🍂

SAM CLIのコマンドまとめ

2024/03/18に公開

SAM CLIで何ができるんだっけ?をまとめます。

はじめに

SAM CLIとは

AWS SAMテンプレートを使用したサーバーレスアプリケーションの構築を実行・開発のためのコマンドラインツール

SAM CLIのインストールについてはこちら

https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/install-sam-cli.html
https://zenn.dev/fusic/articles/d2a307b12e5288

コマンドリファレンス

あります。困ったら、あるいは特定の何かをしたくなったらここを見る。
https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/serverless-sam-cli-command-reference.html

主なSAM CLIコマンド

新規アプリケーションを初期化:sam init

新しくAWS SAMプロジェクトを初める場合はsam init

デプロイの準備:sam build

ローカル実行やデプロイを行う前に、アプリケーションを準備するコマンド。
このコマンドを実行すると.aws-samというディレクトリが作成される。
例えば:.aws-sam/buildディレクトリ下にコンパイルされたLambda関数のコードが格納される

AWSクラウド上にデプロイ:sam deploy

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 syncAWS SAM Accelerateを利用しています。アプリケーションの作成・テストが簡単に早く実行できます。
https://aws.amazon.com/jp/blogs/news/aws-sam-accelerate/

AWS SAMリソースの確認

sam list {subcommands}

で現在のリソースを確認することができます。

  • endpoints
    クラウドまたはローカルのエンドポイントを表示
  • resources
    SAMテンプレートで定義・CloudFormationにより作成されたリソースを表示。
  • stack-outputs
    CloudFormationスタックの出力を表示。

https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-list.html

アプリケーションをローカルで実行: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は興味深かったです。改めて深掘りしてみたいです。

GitHubで編集を提案
Fusic 技術ブログ

Discussion