翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
sam local invoke を使用したテストの概要
AWS Serverless Application Model コマンドラインインターフェイス (AWS SAM CLI) sam local invoke
サブコマンドを使用して、AWS Lambda 関数の 1 回限りの呼び出しをローカルで開始します。
-
AWS SAM CLI の概要については、「AWS SAMCLI とは?」を参照してください。
-
sam local invoke
コマンドオプションのリストについては、「sam local invoke」を参照してください。 -
一般的な開発ワークフローでの
sam local invoke
の使用例については、「ステップ 7: (オプション) アプリケーションをローカルでテストする」を参照してください。
sam local invoke
を使用するには、次を実行して AWS SAM CLI をインストールします。
sam local invoke
を使用する前に、次の基本を理解しておくことをお勧めします。
Lambda 関数をローカルで呼び出す
sam local invoke
を実行すると、AWS SAM CLI は現在の作業ディレクトリがプロジェクトのルートディレクトリであると想定します。AWS SAM CLI は最初に .aws-sam
サブフォルダ内の template.[yaml|yml]
ファイルを検索します。見つからない場合、AWS SAM CLI は現在の作業ディレクトリ内で template.[yaml|yml]
ファイルを探します。
Lambda 関数をローカルで呼び出すには
-
プロジェクトのルートディレクトリから次のコマンドを実行します。
$
sam local invoke
<options>
-
アプリケーションに複数の関数が含まれている場合は、関数の論理 ID を指定します。以下に例を示します。
$
sam local invoke
HelloWorldFunction
-
AWS SAM CLI は、Docker を使用してローカルコンテナに関数を構築します。その後、関数を呼び出し、関数のレスポンスを出力します。
以下に例を示します。
$
sam local invoke
Invoking app.lambda_handler (python3.9) Local image is out of date and will be updated to the latest runtime. To skip this, pass in the parameter --skip-pull-image Building image.................................................................................................................... Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64. Mounting /Users/.../sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container START RequestId: 64bf7e54-5509-4762-a97c-3d740498d3df Version: $LATEST END RequestId: 64bf7e54-5509-4762-a97c-3d740498d3df REPORT RequestId: 64bf7e54-5509-4762-a97c-3d740498d3df Init Duration: 1.09 ms Duration: 608.42 ms Billed Duration: 609 ms Memory Size: 128 MB Max Memory Used: 128 MB {"statusCode": 200, "body": "{\"message\": \"hello world\"}"}%
ログを管理する
sam local invoke
を使用する場合、Lambda 関数のランタイム出力 (ログなど) は stderr
に出力され、Lambda 関数の結果は stdout
に出力されます。
基本的な Lambda 関数の例を次に示します。
def handler(event, context): print("some log") # this goes to stderr return "hello world" # this goes to stdout
これらの標準出力は保存できます。以下に例を示します。
$
sam local invoke 1> stdout.log
...$
cat stdout.log
"hello world"$
sam local invoke 2> stderr.log
...$
cat stderr.log
Invoking app.lambda_handler (python3.9) Local image is up-to-date Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64. Mounting /Users/.../sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container START RequestId: 0b46e646-3bdf-4b58-8beb-242d00912c46 Version: $LATEST some log END RequestId: 0b46e646-3bdf-4b58-8beb-242d00912c46 REPORT RequestId: 0b46e646-3bdf-4b58-8beb-242d00912c46 Init Duration: 0.91 ms Duration: 589.19 ms Billed Duration: 590 ms Memory Size: 128 MB Max Memory Used: 128 MB
これらの標準出力を使用して、ローカル開発プロセスをさらに自動化できます。
オプション
カスタムイベントを渡して Lambda 関数を呼び出す
イベントを Lambda 関数に渡すには、--event
オプションを使用します。以下に例を示します。
$
sam local invoke --event
events/s3.json S3JsonLoggerFunction
sam local generate-event
サブコマンドを使用してイベントを作成できます。詳細については、「を使用したテストの概要 sam local generate-event」を参照してください。
Lambda 関数を呼び出すときに環境変数を渡す
Lambda 関数で環境変数を使用する場合は、ローカルテスト中に --env-vars
オプションを使用して環境変数を渡すことができます。これは、クラウドで既にデプロイされているアプリケーション内のサービスを使用して、Lambda 関数をローカルでテストするための優れた方法です。以下に例を示します。
$
sam local invoke --env-vars
locals.json
テンプレートまたは関数を指定する
AWS SAM CLI が参照するテンプレートを指定するには、--template
オプションを使用します。AWS SAM CLI は、その AWS SAM テンプレートとそれがポイントするリソースのみをロードします。
ネストされたアプリケーションまたはスタックの関数を呼び出すには、関数の論理 ID とともに、アプリケーションまたはスタックの論理 ID を指定します。以下に例を示します。
$
sam local invoke
StackLogicalId/FunctionLogicalId
Terraform プロジェクトから Lambda 関数をテストする
--hook-name
オプションを使用して、Terraform プロジェクトから Lambda 関数をローカルでテストします。詳細については、「の使用 AWS SAM CLI with Terraform ローカルデバッグとテスト用」を参照してください。
以下に例を示します。
$
sam local invoke --hook-name terraform --beta-features
ベストプラクティス
アプリケーションに .aws-sam
を実行している sam build
ディレクトリがある場合は、関数コードを更新するたびに必ず sam build
を実行してください。その後、更新された関数コードをローカルでテストするために sam local invoke
を実行します。
ローカルテストは、クラウドにデプロイする前に迅速な開発とテストを行うための優れたソリューションです。ただし、ローカルテストでは、クラウド内のリソース間の許可など、すべてが検証されるわけではありません。可能な限り、アプリケーションをクラウドでテストします。クラウドテストのワークフローを高速化するために sam sync を使用することをお勧めします。
例
Amazon API Gateway サンプルイベントを生成し、それを使用してローカルで Lambda 関数を呼び出す
まず、API Gateway HTTP API イベントペイロードを生成し、events
フォルダに保存します。
$
sam local generate-event
apigateway http-api-proxy > events/apigateway_event.json
次に、イベントからパラメータ値を返すように Lambda 関数を変更します。
def lambda_handler(event, context): print("HelloWorldFunction invoked") return { "statusCode": 200, "body": json.dumps({ "message": event['queryStringParameters']['parameter2'], }), }
その後、ローカルで Lambda 関数を呼び出し、カスタムイベントを提供します。
$
sam local invoke --event
Invoking app.lambda_handler (python3.9) Local image is up-to-date Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64. Mounting /Users/...sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container START RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 Version: $LATEST some log END RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 REPORT RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 Init Duration: 1.63 ms Duration: 564.07 ms Billed Duration: 565 ms Memory Size: 128 MB Max Memory Used: 128 MB {"statusCode": 200, "body": "{\"message\": \"value\"}"}%events/apigateway_event.json
Lambda 関数をローカルで呼び出すときに環境変数を渡す
このアプリケーションには、Amazon DynamoDB テーブル名の環境変数を使用する Lambda 関数が含まれています。AWS SAM テンプレートで定義されている関数の例を次に示します。
AWSTemplateFormatVersion: 2010-09-09 Transform: AWS::Serverless-2016-10-31 ... Resources: getAllItemsFunction: Type: AWS::Serverless::Function Properties: Handler: src/get-all-items.getAllItemsHandler Description: get all items Policies: - DynamoDBReadPolicy: TableName: !Ref SampleTable Environment: Variables: SAMPLE_TABLE: !Ref SampleTable ...
Lambda 関数をクラウド内の DynamoDB テーブルとインタラクションさせながら、ローカルでテストしたいと考えています。これを実行するには、環境変数ファイルを作成し、プロジェクトのルートディレクトリに locals.json
として保存します。ここで SAMPLE_TABLE
に指定される値は、クラウド内の DynamoDB テーブルを参照します。
{ "getAllItemsFunction": { "SAMPLE_TABLE": "dev-demo-SampleTable-1U991234LD5UM98" } }
次に、sam local invoke
を実行して、--env-vars
オプションを使用して環境変数を渡します。
$
sam local invoke
Mounting /Users/...sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container START RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 Version: $LATEST some log END RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 REPORT RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 Init Duration: 1.63 ms Duration: 564.07 ms Billed Duration: 565 ms Memory Size: 128 MB Max Memory Used: 128 MB {"statusCode":200,"body":"{}"}getAllItemsFunction
--env-varslocals.json
詳細はこちら
すべての sam local invoke
オプションのリストについては、「sam local invoke」を参照してください。
sam local
の使用のデモについては、「ローカル開発用の AWS SAM」を参照してください。YouTube での Serverless Land の SAM を使用したセッションのシリーズのローカル開発環境からの AWS クラウド リソースのテスト