SAM CLI で Lambda 関数のリモート呼び出し機能を使ってみた

この記事は公開されてから半年以上経過しています。情報が古い可能性がありますので、ご注意ください。

目次

概要

SAM CLIのコマンドを使用してデプロイ後のLambda関数を呼び出すことができるようになりました。
これまではAWSマネジメントコンソールからテストイベントを作成してテストしたり、aws lambda invokeなどのAWS CLIコマンドを使用してLambda関数を呼び出していましたが、開発~デプロイ~テストまでSAM CLIで完結できるようになり効率が上がることが見込まれます。

AWS公式の記事はこちらになります。
※この機能は、SAM CLI バージョン 1.88.0 以降で利用可能です。

実際にやってみました

実行環境

sam --version
SAM CLI, version 1.95.0

Lambda関数のデプロイ

まずはSAM CLIでLambda関数をデプロイしてみます。
sam initを実行して「Hello World Example」を選択します。

「sam-app」という名前で作成が完了しました。
生成されたtemplate.yamlは下記の通りです。
Lambda関数が「HelloWorldFunction」の論理IDで定義されています。

sam buildを実行してビルド完了を確認します。

次に実行できるコマンド(Commands you can use next)の「Test Function in the Cloud」を実行します。
sam sync --stack-name sam-app --watch

「Infra sync completed.」が表示されるとデプロイ成功です。
これでコードと依存関係がローカルとクラウドで同期されるため、ローカルでの変更が即時クラウドに反映されます。
sam syncは開発環境に推奨されるコマンドです。

リモート呼び出し機能を使ってみた

いよいよ本題です。
別のターミナルを用意して、リモート呼び出しコマンドを実行します。
コマンドの実行に必要な引数、オプションはこちらに記載されています。
基本的には「Lambda関数の論理ID」と「CloudFormationのスタック名」を指定すればよさそうです。
sam remote invoke HelloWorldFunction --stack-name sam-appを実行します。

呼び出しに成功してレスポンスが返ってきました!
実行秒数や使用メモリなどのREPORTログまで表示してくれるのは嬉しいですね!

さらに…

Lambda関数のデプロイにてローカルでの変更が即時クラウドに反映されるようにしました。
実際にコードを変更して再度リモート呼び出しを実施してみます。

app.pyの変更

sam syncターミナル

変更が少ないからなのか、数秒程度で同期が完了しました。

リモート呼び出し実行

app.pyに追加したtest_messageがレスポンスに表示されています。
sam syncsam remote invokeを組み合わせることで動作の確認がより迅速に実施できそうです。

コマンドのその他使用例

  • SAMで管理しているLambda関数が1つのみの場合は引数やオプションを省略できます
    • sam remote invoke
  • LambdaのARNを指定することでSAM管理外のLambda関数も呼び出すことができます
    • sam remote invoke {{LambdaArn}}
  • eventevent-fileのオプションでテストイベントを渡すことができます
    • sam remote invoke TranslateFunction --stack-name remote-test --event '{"test_message":"test_message"}'
    • sam remote invoke TranslateFunction --stack-name remote-test --event-file '{{テストイベントファイルパス}}'

まとめ

Lambda関数のテストがより簡単に行えるようになりました。
コードエディタとAWSマネジメントコンソールを行き来することなく、開発に注力できるようになりそうです。
さらにログの出力内容も確認できるようになったため、より細かい粒度でテストが実施できるようになったと思います。

投稿者プロフィール

nagura
2021年4月からスカイアーチに中途入社しました。
AWSともっと仲良くなるべく日々勉強中です。