初めに
最近AWS上のシステムを触るときに触れた技術であり、よく理解できなかったのでドキュメントに触れつつ基本的な使い方について紹介していきます。
本記事の前半ではSAMやSAM CLIの概要と特徴について説明し、後半にコマンドの使い方について紹介していきます。コマンド紹介までスキップするにはこちら
AWS Serverless Application Model (AWS SAM)とは
最初に公式ドキュメントから引用してSAMの概要・特徴を説明します。
SAMの概要
公式ドキュメントより
AWS Serverless Application Model (AWS SAM) は、サーバーレスアプリケーションの構築と実行における開発者の操作性を向上させるツールキットです。
では次にSAMの特徴について説明していきたいと思います。
- コード記述によりアプリインフラを定義できる
- サーバーレスアプリケーションを管理できる
- コネクタを利用してリソース間の権限移動を動的に行える
- コマンドの利用によりローカルの変更をクラウドと継続的に同期できる
参考にしたドキュメントでは以下のインフラストラクチャの定義を行っていました
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::Serverless-2016-10-31
Resources:
getAllItemsFunction:
Type: AWS::Serverless::Function
Properties:
Handler: src/get-all-items.getAllItemsHandler
Runtime: nodejs12.x
Events:
Api:
Type: HttpApi
Properties:
Path: /
Method: GET
Connectors:
MyConn:
Properties:
Destination:
Id: SampleTable
Permissions:
- Read
SampleTable:
Type: AWS::Serverless::SimpleTable
- AWS Lambdaサービスを利用する機能
- Amazon API Gatewayサービスを利用したHTTP API
- Amazon DynamoDBサービスを利用するデータベース
- サービス連携に必要なIAM権限
これらはResourcesセクションで実行されています。
-
Type: AWS::Serverless::Function
このリソースがサーバーレスLambda関数であることを示します。 -
Type: HttpApi
イベントタイプの指定 -
Type: AWS::Serverless::SimpleTable
簡単なDynamoDBテーブルを定義します。 -
Permissions
このセッションで関数に与える権限を指定する
SAMを構成する主要部品
- AWS SAM テンプレート仕様
サーバーレスアプリケーションのインフラストラクチャーを定義するために使用できるオープンソースのフレームワーク
AWS AWS SAM AWS CloudFormation テンプレートはテンプレートを拡張したもので、使いやすくするためのコンポーネントがいくつか追加されています。
- AWS SAM CLI
AWS SAMテンプレートやサポートされているサードパーティインテグレーションと組み合わせて使用できるコマンドラインツールで、サーバーレスアプリケーションを構築して実行できます。
SAM CLIコマンドについて
AWS SAM CLIは、AWS SAMテンプレートやサポートされているサードパーティインテグレーションと組み合わせてサーバーレスアプリケーションを構築して実行できるコマンドラインツールです。
・サードパーティのインテグレーションとは...
あるソフトウェアやシステムが、他の企業や開発者(サードパーティ)が提供する別のソフトウェアやサービスと連携して機能すること
なお本記事は、こちらを参考にして作成したものになりますのでよくわからなかった時に参照していただければより詳細な情報を入手できると考えていますのでぜひ活用してください!
sam build
sam build
コマンドは、ローカルテストや AWS クラウドへのデプロイなど、開発者ワークフローの後続のステップに備えてアプリケーションを準備します。
・使い方
sam build <引数> <オプション>
- 引数
AWS SAMテンプレートで宣言された1つのリソースをビルドするように指示します。指定されたリソースのビルド結果は、ワークフローの後続コマンド (つまり、sam package と sam deploy) に使用できる唯一の成果物になります。
- オプション
--base-dir
関数またはレイヤーのソースコードへの相対パスを、このディレクトリを基準にして解決します。このオプションは、ソースコードフォルダへの相対パスの解決方法を変更したい場合に使用します。
--template
AWS SAM テンプレートファイルのパスとファイル名を示します。
--use-container
関数がネイティブにコンパイルされた依存関係を持つパッケージに依存する場合は、このオプションを使用して、Lambda に似た Docker コンテナ内で関数を構築します。
sam package
sam package
コマンドは、コードと依存関係の.zipファイルを作成し、そのファイルを Amazon Simple Storage Service (Amazon S3) にアップロードします。
sam deploy が sam package の機能を暗黙的に実行するようになったそうなので意味さえ押さえておけば大丈夫そう...
・使い方
sam package <引数> <オプション>
- 引数
パッケージ化するLambda関数のIDを指します。
- オプション
--s3-bucket
このコマンドがアーティファクトをアップロードする Amazon S3 バケットの名前になります。
--s3-prefix
Amazon S3 バケットにアップロードされる成果物名に追加されたプレフィックスです。
プレフィックス:
特定の文字列やデータの先頭に付加される文字列のこと
--output-template-file
パッケージ化されたテンプレートを書き込むファイルへのパスを示します。
--region
デプロイ先の AWS リージョンを示します。
--profile
認証情報ファイルから AWS 認証情報を取得する特定のプロファイルを示します。
sam deploy
sam deploy
コマンドでは、AWSクラウドを使用してアプリケーションをAWS CloudFormationにデプロイします。
・使い方
<環境変数> sam deploy <オプション>
- 環境変数
AWS SAM CLI が AWS CloudFormation スタックの状態をチェックする頻度を設定します。(秒数で指定を行う)
使用例
SAM_CLI_POLL_DELAY=5 sam deploy
- オプション
--stack-name
・必須項目
デプロイ先の AWS CloudFormation スタックの名前を指定します。
--capabilities
AWS CloudFormationが特定のスタックを作成できるように指定する必要がある機能のリストを示します。
--no-fail-on-empty-changeset
スタックに対して行う変更がない場合に 0 以外の終了コードを返すかどうかを指定します。デフォルトの動作では、ゼロ以外の終了コードが返されます。
--parameter-overrides
キーと値のペアとしてエンコードされたAWS CloudFormationパラメータのオーバーライドを行います。
--tags
作成または更新されたスタックに関連付けるタグのリストを示します。
さいごに
全体を通してカタカナが多く、一部ニュアンスで乗り切った自分がいたので真の理解とはまだまだ遠く離れている印象です。
紹介しきれていないコマンドであったりコマンドごとのオプションが少し見ただけでもリファレンスに大量にありますが、力尽きましたのでその他便利コマンドをお探しの方はぜひ参照してください!