AWS SAM を使用して Lambda 関数をローカルで呼び出す - AWS Serverless Application Model

AWS SAM を使用して Lambda 関数をローカルで呼び出す

クラウドでのテストまたはデプロイの前に Lambda 関数をローカルで呼び出すことには、まざまな利点があります。これにより、関数のロジックをより迅速にテストできます。最初にローカルでテストすることで、クラウドでのテスト時やデプロイ時に問題が見つかる可能性を低くでき、不要なコストを回避するのにも役立ちます。さらに、ローカルでテストすることでデバッグが楽になります。

Lambda 関数は、sam local invoke コマンドを使用して関数の論理 ID とイベントファイルを指定することによってローカルで呼び出せます。また、sam local invokestdin をイベントとして受け取ります。イベントの詳細については、AWS Lambda デベロッパーガイドの「イベント」を参照してください。異なる AWS サービスからのイベントメッセージ形式の詳細については、「AWS Lambda デベロッパーガイド」の「他のサービスで AWS Lambda を使用する」を参照してください。

注記

sam local invoke コマンドは AWS Command Line Interface (AWS CLI) コマンドの aws lambda invoke に対応します。どちらのコマンドを使用しても Lambda 関数を呼び出すことができます。

sam local invoke コマンドは、呼び出す関数を含むプロジェクトディレクトリで実行する必要があります。

例:

# Invoking function with event file $ sam local invoke "Ratings" -e event.json # Invoking function with event via stdin $ echo '{"message": "Hey, are you there?" }' | sam local invoke --event - "Ratings" # For more options $ sam local invoke --help

環境変数ファイル

テンプレートで定義されている値をオーバーライドする環境変数をローカルで宣言するには、次の手順を実行します。

  1. オーバーライドする環境変数を含む JSON ファイルを作成します。

  2. --env-vars 引数を使用して、テンプレートで定義されている値をオーバーライドします。

環境変数の宣言

すべてのリソースにグローバルに適用する環境変数を宣言するには、次のような Parameters オブジェクトを指定します。

{ "Parameters": { "TABLE_NAME": "localtable", "BUCKET_NAME": "amzn-s3-demo-bucket", "STAGE": "dev" } }

各リソースごとに別々の環境変数を宣言するには、以下のようにリソースごとにオブジェクトを指定します。

{ "MyFunction1": { "TABLE_NAME": "localtable", "BUCKET_NAME": "amzn-s3-demo-bucket", }, "MyFunction2": { "TABLE_NAME": "localtable", "STAGE": "dev" } }

各リソースのオブジェクトを指定する場合、以下の識別子を使用できます (優先順位の高いものから順にリストされています)。

  1. logical_id

  2. function_id

  3. function_name

  4. フルパス識別子

環境変数を宣言するための前述の両方の方法を単一のファイルで使用できます。その場合、特定のリソースに対して指定した環境変数がグローバル環境変数よりも優先されます。

環境変数を JSON ファイル (env.json など) に保存します。

環境変数の値のオーバーライド

JSON ファイルで定義された環境変数で環境変数をオーバーライドするには、--env-vars 引数を invoke または start-api コマンドで使用します。以下に例を示します。

sam local invoke --env-vars env.json

レイヤー

アプリケーションにレイヤーが含まれている場合、ローカルホスト上のレイヤーの問題をデバッグする方法の詳細については、「AWS SAM で Lambda レイヤーを使用して効率を向上させる」を参照してください。

詳細

関数をローカルで呼び出す実践的な例については、「包括的な AWS SAM ワークショップ」の「モジュール 2 - ローカルで実行する」を参照してください。