AWS SAM を使用してローカル統合テストを自動化する - AWS Serverless Application Model

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS SAM を使用してローカル統合テストを自動化する

sam local invoke を使用したテストの概要 を使用してコードを手動でテストできますが、AWS SAM では自動化した統合テストを使用してコードをテストすることもできます。統合テストは、開発サイクルの早い段階で問題を検出し、コードの品質を向上させ、コストを削減しながら時間を節約するのに役立ちます。

AWS SAM 内に自動化された統合テストを作成するには、AWS クラウドにデプロイする前に、まずローカルの Lambda 関数に対するテストを実行します。sam local start-lambda を使用したテストの概要 コマンドは、Lambda 呼び出しエンドポイントをエミュレートするローカルのエンドポイントを起動します。これは、自動化されたテストから呼び出すことができます。このエンドポイントは Lambda 呼び出しエンドポイントをエミュレートするので、テストの記述後は、ローカルの Lambda 関数、またはデプロイされた Lambda 関数にも、変更なしでこれらのテストを実行できます。CI/CD パイプライン内のデプロイされた AWS SAM スタックに対しても、同じテストを実行できます。

プロセスの仕組みは以下のとおりです。

  1. ローカル Lambda エンドポイントを起動する。

    AWS SAM テンプレートが含まれるディレクトリで以下のコマンドを実行して、ローカル Lambda エンドポイントを起動します。

    sam local start-lambda

    このコマンドは、http://127.0.0.1:3001 をエミュレートする AWS Lambda でローカルエンドポイントを起動します。自動化されたテストは、このローカル Lambda エンドポイントに対して実行できます。AWS CLI または SDK を使用してこのエンドポイントを呼び出すと、リクエストで指定された Lambda 関数がローカルで実行され、レスポンスが返されます。

  2. ローカル Lambda エンドポイントに対して統合テストを実行する。

    統合テストでは、テストデータで Lambda 関数を呼び出し、レスポンスを待機して、レスポンスが期待どおりであることを確認するために AWS SDK を使用できます。統合テストをローカルで実行するには、前のステップで起動したローカル Lambda エンドポイントを呼び出すための Lambda Invoke API コールを送信するように AWS SDK を設定する必要があります。

    以下は、Python の例です (他の言語の AWS SDK にも同じような設定があります)。

    import boto3 import botocore # Set "running_locally" flag if you are running the integration test locally running_locally = True if running_locally: # Create Lambda SDK client to connect to appropriate Lambda endpoint lambda_client = boto3.client('lambda', region_name="us-west-2", endpoint_url="http://127.0.0.1:3001", use_ssl=False, verify=False, config=botocore.client.Config( signature_version=botocore.UNSIGNED, read_timeout=15, retries={'max_attempts': 0}, ) ) else: lambda_client = boto3.client('lambda') # Invoke your Lambda function as you normally usually do. The function will run # locally if it is configured to do so response = lambda_client.invoke(FunctionName="HelloWorldFunction") # Verify the response assert response == "Hello World"

    このコードは、running_locallyFalse に設定することによって、デプロイされた Lambda 関数のテストに使用できます。これにより、AWS クラウド内の AWS Lambda に接続するための AWS SDK がセットアップされます。