以下2つのコマンドについて、違いがわからなかったので調べました。
sam local invoke <arguments> <options>
sam local start-lambda <options>
sam local invokeコマンド
sam local invoke サブコマンドは、 AWS Lambda 関数の 1 回限りの呼び出しをローカルで開始します。
想定ユースケース:
-
Lambda 関数の単体テスト
API Gateway や Step Functions を介さず、特定のイベントを直接渡して動作確認が可能です。 -
デバッグ
ローカル環境で関数をデバッグし、標準出力を確認しながら動作を調整できます。
sam local start-lambdaコマンド
sam local start-lambda サブコマンドは、 AWS Lambdaをエミュレートするローカルエンドポイントを起動します。
想定ユースケース:
-
ローカル環境で API Gateway などから Lambda を呼び出す
例えば、Lambda を API Gateway や AWS Step Functions などの外部サービスと連携させたい場合、ローカル環境でその動作を確認できます。 -
外部ツール(Postmanなど)を使って関数をテスト
sam local start-lambda を起動すれば、Lambda をローカル API として動かせるので、Postman や curl を使って手軽にリクエストを送信し、レスポンスを確認できます。
結論
sam local invokeは、
1. ローカル上でLambdaコンテナを起動し、
2. ローカルでイベントを渡して、
3. 1回だけ実行できる
というコマンドでした。
一方、sam local start-lambdaは
1. ローカル上でLambdaのエミュレーター(エンドポイント)を作り、
2. ローカル上でAPIを起動して、
3. 複数回の動作確認を手軽に実行できる
というコマンドでした。
- Lambdaコンテナをローカル上で起動して呼び出すのがinvoke
- Lambdaのエンドポイントをローカル上で作成するのがstart-lambda
と覚えればよいと思います。
(invokeはLambdaを"起動"すること、start-lambdaは実行環境を"開始"すること、という意図の命名だと思います)