SAM CLIのコマンドまとめ
SAM CLIで何ができるんだっけ?をまとめます。
はじめに
SAM CLIとは
AWS SAMテンプレートを使用したサーバーレスアプリケーションの構築を実行・開発のためのコマンドラインツール
SAM CLIのインストールについてはこちら
コマンドリファレンス
あります。困ったら、あるいは特定の何かをしたくなったらここを見る。
主なSAM CLIコマンド
sam init
新規アプリケーションを初期化:新しくAWS SAMプロジェクトを初める場合はsam init
sam build
デプロイの準備:ローカル実行やデプロイを行う前に、アプリケーションを準備するコマンド。
このコマンドを実行すると.aws-sam
というディレクトリが作成される。
例えば:.aws-sam/build
ディレクトリ下にコンパイルされたLambda関数のコードが格納される
sam deploy
AWSクラウド上にデプロイ:AWSクラウド上にアプリケーションをデプロイ。
.aws-sam/
ディレクトリ内のアーティファクトをデプロイするため、変更がある場合はデプロイ前にsam build
を実行して.aws-sam/
ディレクトリを更新する。
初回デプロイではsam deploy --guided
を実行してデプロイ設定を構成(samconfig.toml
)、以降はsamconfig.toml
の設定を利用してsam deploy
のみでデプロイができる。
sam sync
変更の同期:ローカルの変更をAWSクラウドに同期する。
sam deploy
との違いとしては、samconfig.toml
を使用しない・CloudFormationの変更セットを使用しないという点です。
--code
オプション
ローカルファイルのコード変更のみを反映
--watch
ローカルファイルの変更をウォッチ、保存時に即反映されます。
便利!
sam sync
はAWS SAM Accelerateを利用しています。アプリケーションの作成・テストが簡単に早く実行できます。
AWS SAMリソースの確認
sam list {subcommands}
で現在のリソースを確認することができます。
-
endpoints
クラウドまたはローカルのエンドポイントを表示 -
resources
SAMテンプレートで定義・CloudFormationにより作成されたリソースを表示。 -
stack-outputs
CloudFormationスタックの出力を表示。
sam local
アプリケーションをローカルで実行:SAM CLIはDockerを利用して、ローカルHTTPサーバーを通じてLambda関数をローカル環境で実行できます。
API Gatewayエンドポイントにより呼び出すLambda関数のテストに役立ちます。
※Dockerを使用するため、Docker環境が準備できていることが使用前提
ローカルHTTPサーバーの起動と使用
sam local start-api
このコマンドを実行すると、HTTPサーバーエンドポイントが以下のように出力されます。
Mounting DeleteFunction at http://127.0.0.1:3000/delete/{id} [DELETE]
Mounting CreateFunction at http://127.0.0.1:3000/create [POST]
Mounting UpdateFunction at http://127.0.0.1:3000/update/{id} [POST]
Mounting ReadFunction at http://127.0.0.1:3000/read/{id} [GET]
ローカルHTTPサーバーを起動した状態で上記エンドポイントを使用することでLambda関数のローカル実行が可能です。
$ curl "http://127.0.0.1:3000/read/1"
{"result":{"id":{"S":"1"},"name":{"S":"Sam"}}}
Lambda関数を単体でローカル実行する
sam local invoke {リソースID}
このコマンドを実行するとLambda関数をローカルで呼び出すことができます。
リソースIDで指定するのは論理IDです。
sam list resouces
を実行して出力されるLogical ID
を指定します。
他にもある
あります。が、最低限押さえておきたいコマンドをまとめたので今回はここまで!
調べていると、AWS SAMはサーバーレスアプリケーションの開発のための様々な機能があることが分かりました。やりたいことがあれば、その都度調査して実現することができると思います。
特にAWS SAM Accelerateは興味深かったです。改めて深掘りしてみたいです。
Discussion