AWS SAM を使用して API Gateway をローカルで実行する
Amazon API Gateway をローカルで実行することには、さまざまな利点があります。例えば、API Gateway をローカルで実行すると、AWS クラウドにデプロイする前に API エンドポイントをローカルでテストできます。最初にローカルでテストすれば、多くの場合クラウドでのテストと開発を減らすことができ、コスト削減に役立ちます。さらに、ローカルでの実行はデバッグを容易にします。
HTTP リクエスト/レスポンス機能のテストに使用する API Gateway のローカルインスタンスを起動するには、sam local start-api AWS SAM CLI コマンドを使用します。この機能にはホットリロードが搭載されているので、関数をすばやく開発して繰り返し実行することができます。
注記
「ホットリロード」とは、変更されたファイルのみを更新し、アプリケーションの状態を維持することです。これに対して、「ライブリロード」では、アプリケーション全体が更新されるので、アプリケーションの状態が失われます。
sam local start-api コマンドを使用する手順については、「sam local start-api を使用したテストの概要」を参照してください。
デフォルトでは、AWS SAM は AWS Lambda プロキシ統合を使用し、HttpApi と Api の両方のリソースタイプをサポートします。HttpApi リソースタイプのプロキシ統合の詳細については、API Gateway デベロッパーガイドの「HTTP API の AWS Lambda プロキシ統合の使用」を参照してください。Api リソースタイプでのプロキシ統合の詳細については、API Gateway デベロッパーガイドの「API Gateway Lambda プロキシの統合について理解する」を参照してください。
例:
$sam local start-api
AWS SAM は、HttpApi または Api イベントソースが定義されている AWS SAM テンプレート内の関数を自動的に検索します。関数は、定義された HTTP パスにマウントされます。
以下の Api 例では、Ratings 関数が GET リクエストの /ratings で ratings.py:handler() をマウントします。
Ratings: Type: AWS::Serverless::Function Properties: Handler: ratings.handler Runtime: python3.9 Events: Api: Type: Api Properties: Path: /ratings Method: get
以下は、Api レスポンスの例です。
// Example of a Proxy Integration response exports.handler = (event, context, callback) => { callback(null, { statusCode: 200, headers: { "x-custom-header" : "my custom header value" }, body: "hello world" }); }
関数のコードを変更する場合は、sam build コマンドを実行して sam local start-api で変更を検出します。
環境変数ファイル
テンプレートで定義されている値をオーバーライドする環境変数をローカルで宣言するには、次の手順を実行します。
-
オーバーライドする環境変数を含む JSON ファイルを作成します。
-
--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" } }
各リソースのオブジェクトを指定する場合、以下の識別子を使用できます (優先順位の高いものから順にリストされています)。
logical_idfunction_idfunction_nameフルパス識別子
環境変数を宣言するための前述の両方の方法を単一のファイルで使用できます。その場合、特定のリソースに対して指定した環境変数がグローバル環境変数よりも優先されます。
環境変数を JSON ファイル (env.json など) に保存します。
環境変数の値のオーバーライド
JSON ファイルで定義された環境変数で環境変数をオーバーライドするには、--env-vars 引数を invoke または start-api コマンドで使用します。以下に例を示します。
$sam local start-api --env-vars env.json
レイヤー
アプリケーションにレイヤーが含まれている場合、ローカルホスト上のレイヤーの問題をデバッグする方法の詳細については、「AWS SAM で Lambda レイヤーを使用して効率を向上させる」を参照してください。