翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
sam local invoke を使用したテストの概要
AWS Serverless Application Model コマンドラインインターフェイス (AWS SAMCLI) sam local invokeサブコマンドを使用して、 AWS Lambda 関数の 1 回限りの呼び出しをローカルで開始します。
-
の概要については AWS SAMCLI、「」を参照してください。 AWS SAMCLIとは
-
sam local invokeコマンドオプションのリストについては、「sam local invoke」を参照してください。 -
一般的な開発ワークフローでの
sam local invokeの使用例については、「ステップ 7: (オプション) アプリケーションをローカルでテストする」を参照してください。
注記
sam local invoke は、自動チェックポイント機能と再生機能を備えた耐久性のある 関数をサポートしています。永続的な関数をローカルで呼び出すと、実行状態が自動的に管理されます。
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 invokeHelloWorldFunction -
AWS SAM CLI は、Docker を使用してローカルコンテナに関数を構築します。その後、関数を呼び出し、関数のレスポンスを出力します。
以下に例を示します。
$sam local invokeInvoking 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.logInvoking 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 --eventevents/s3.json S3JsonLoggerFunction
sam local generate-event サブコマンドを使用してイベントを作成できます。詳細についてはsam local generate-event を使用したテストの概要を参照してください。
Lambda 関数を呼び出すときに環境変数を渡す
Lambda 関数で環境変数を使用する場合は、ローカルテスト中に --env-vars オプションを使用して環境変数を渡すことができます。これは、クラウドで既にデプロイされているアプリケーション内のサービスを使用して、Lambda 関数をローカルでテストするための優れた方法です。以下に例を示します。
$sam local invoke --env-varslocals.json
テンプレートまたは関数を指定する
AWS SAM CLI が参照するテンプレートを指定するには、--template オプションを使用します。 AWS SAMCLI は、その AWS SAM テンプレートとそれが指すリソースのみをロードします。
ネストされたアプリケーションまたはスタックの関数を呼び出すには、関数の論理 ID とともに、アプリケーションまたはスタックの論理 ID を指定します。以下に例を示します。
$sam local invokeStackLogicalId/FunctionLogicalId
Terraform プロジェクトから Lambda 関数をテストする
--hook-name オプションを使用して、Terraform プロジェクトから Lambda 関数をローカルでテストします。詳細についてはTerraform と連携させた AWS SAM CLI をローカルでのデバッグおよびテストに使用する方法を参照してください。
以下に例を示します。
$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-eventapigateway 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 --eventInvoking 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 invokeMounting /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 」を参照してください。での SAM シリーズを使用した Serverless Land Sessions YouTubeのローカル開発環境からの AWS クラウド リソースのテスト