Amazon API Gateway のステージ変数の使用
API Gateway ステージ変数を使用して、さまざまな API デプロイステージの HTTP と Lambda バックエンドにアクセスできます。ステージ変数を使用して、ステージ固有の設定メタデータをクエリパラメータとして HTTP バックエンドに渡し、入力マッピングテンプレートで生成されるペイロードとして Lambda 関数に渡すこともできます。
前提条件
2 つの異なる HTTP エンドポイント (2 つの異なる Lambda 関数に割り当てられた url
ステージ変数、およびステージ固有のメタデータを含む function
ステージ変数) に設定された version
変数を持つ 2 つのステージを作成する必要があります。「」の手順に従いますAmazon API Gateway コンソールを使用したステージ変数の設定
ステージ変数を使用し、API を通じて HTTP エンドポイントにアクセスする
-
[ステージ] ナビゲーションペインで、[beta] を選択します。[beta Stage Editor] で、[Invoke URL] リンクを選択します。これにより、API のルートリソースで beta ステージの
GET
リクエストが開始されます。注記
[Invoke URL] リンクは、beta ステージの API のルートリソースを指します。リンクを選択して URL に移動すると、ルートリソースで beta ステージの
GET
メソッドが呼び出されます。ルートリソースそのものではなく子リソースでメソッドが定義されている場合は、[Invoke URL (URL の呼び出し)] リンクを選択すると、{"message":"Missing Authentication Token"}
エラーレスポンスが返されます。この場合、特定の子リソースの名前を [呼び出し URL] リンクに追加する必要があります。 -
beta ステージの
GET
リクエストから取得するレスポンスを次に示します。また、ブラウザを使用し、http://httpbin.org/get に移動して結果を確認することもできます。この値は beta ステージのurl
変数に割り当てられました。2 つのレスポンスは同一です。 -
[ステージ] ナビゲーションペインで、[prod] ステージを選択します。[prod Stage Editor] から、[呼び出し URL] リンクを選択します。これにより、API のルートリソースで prod ステージの
GET
リクエストが開始されます。 -
prod ステージの
GET
リクエストから取得するレスポンスを次に示します。ブラウザを使用し、http://petstore-demo-endpoint.execute-api.com/petstore/pets に移動して結果を確認できます。この値は prod ステージのurl
変数に割り当てられました。2 つのレスポンスは同一です。
クエリパラメータ式でステージ変数を使用してステージ固有のメタデータを HTTP バックエンドに渡す
この手順では、クエリパラメータ式でステージ変数値を使用して、ステージ固有のメタデータを HTTP バックエンドに渡す方法について説明します。「version
」で宣言された Amazon API Gateway コンソールを使用したステージ変数の設定 ステージ変数を使用します。
-
[リソース] ナビゲーションペインで、GET メソッドを選択します。メソッドの URL にクエリ文字列パラメータを追加するには、[メソッドの実行] で、[メソッドリクエスト] を選択します。パラメータ名として
version
を入力します。 -
[メソッドの実行] で [統合リクエスト] を選択します。[エンドポイント URL] 値を編集し、前に定義した URL 値に
を追加します。この場合、この値は?version=${stageVariables.version}
url
ステージ値でも表されます。[API のデプロイ] を選択してこれらの変更をデプロイします。 -
[ステージ] ナビゲーションペインで、[beta] ステージを選択します。[beta Stage Editor] から、現在のステージが最新のデプロイであることを確認し、[呼び出し URL] リンクを選択します。
注記
ここでベータステージを使用するのは、(
url
変数「http://httpbin.org/get」によって指定される) HTTP エンドポイントがクエリパラメータ式を受け取り、レスポンスでargs
オブジェクトとしてそれらを返すためです。 -
レスポンスを次に示します。
v-beta
ステージ変数に割り当てられたversion
は、version
引数としてバックエンドで渡されることに注意してください。
ステージ変数を使用して API 経由で Lambda 関数を呼び出す
この手順では、ステージ変数を使用して API のバックエンドとして Lambda 関数を呼び出す方法について説明します。前に宣言した function
ステージ変数を使用します。詳細については、「Amazon API Gateway コンソールを使用したステージ変数の設定」を参照してください。
-
[リソース] ペインで、ルートディレクトリの下に /lambdasv1 子リソースを作成し、子リソースで
GET
メソッドを作成します。[Integration type (統合タイプ)] を [Lambda Function (Lambda 関数)] に設定し、[Lambda Function (Lambda 関数)] に「${stageVariables.function}
」と入力します。[保存] を選択します。ヒント
[Add Permission to Lambda Function] (Lambda 関数への許可の追加) というプロンプトが表示されたら、[OK] をクリックする前にその AWS CLI コマンドをメモします。新しく作成した各 API メソッドで、
function
ステージ変数に割り当てられたか、今後割り当てられる各 Lambda 関数でコマンドを実行する必要があります。たとえば、$stageVariables.function
値がHelloWorld
で、まだこの関数にアクセス権限を追加していない場合は、次の AWS CLI コマンドを実行する必要があります。aws lambda add-permission --function-name arn:aws:lambda:us-east-1:
account-id
:function:HelloWorld --source-arn arn:aws:execute-api:us-east-1:account-id
:api-id
/*/GET/lambdasv1 --principal apigateway.amazonaws.com --statement-idstatement-id-guid
--action lambda:InvokeFunctionこれを行わなかった場合、メソッドを呼び出すと
500 Internal Server Error
レスポンスが発生します。必ず、ステージ変数に割り当てられる Lambda 関数で${stageVariables.function}
を置き換えます。 -
使用できるステージに API をデプロイします。
-
[ステージ] ナビゲーションペインで、[beta] ステージを選択します。最新のデプロイが beta Stage Editor にあることを確認します。[Invoke URL] リンクをコピーし、ブラウザのアドレスバーに貼り付け、その URL に
を追加します。これにより、API の LambdaSv1 子リソースの/lambdasv1
GET
メソッドを通じて、基盤となる Lambda 関数が呼び出されます。注記
HelloWorld
Lambda 関数は次のコードを実装します。export const handler = function(event, context, callback) { if (event.version) callback(null, 'Hello, World! (' + event.version + ')' ); else callback(null, "Hello, world! (v-unknown)"); };
この実装では、次のレスポンスが発生します。
"Hello, world! (v-unknown)"
ステージ変数を使用してステージ固有のメタデータを Lambda 関数に渡す
この手順では、ステージ変数を使用して、ステージ固有の設定メタデータを Lambda 関数に渡す方法を示します。POST
メソッドと入力マッピングテンプレートを使用して、前に宣言した version
ステージ変数でペイロードを生成します。
-
[リソース] ペインで、/lambdasv1 子リソースを選択します。子リソースで
POST
メソッドを作成し、[Integration type (統合タイプ)] を [Lambda Function (Lambda 関数)] に設定して、[Lambda Function (Lambda 関数)] に「
」と入力します。[保存] を選択します。${stageVariables.function}
ヒント
このステップは、
GET
メソッドの作成に使用したステップに似ています。詳細については、「ステージ変数を使用して API 経由で Lambda 関数を呼び出す」を参照してください。 -
[/メソッドの実行] ペインで [統合タイプ] を選択します。次の説明にあるように、[Integration Request] (統合リクエストペイン) で [Mapping Templates] (マッピングテンプレート) を展開し、次に [Add mapping template] (マッピングテンプレートの追加) を選択して、
application/json
コンテンツタイプ用のテンプレートを追加します。注記
マッピングテンプレートでは、ステージ変数を引用符で囲んで参照する必要があります (
"$stageVariables.version"
または"${stageVariables.version}"
のように)。他の場所では、引用符なしで参照する必要があります (${stageVariables.function}
のように)。 -
使用できるステージに API をデプロイします。
-
[ステージ] ナビゲーションペインで、[beta] を選択します。[beta Stage Editor (ベータステージエディタ)] で、現在のステージに最新のデプロイがあることを確認します。[Invoke URL (Invoke URL)] リンクをコピーし、REST API クライアントの URL 入力フィールドに貼り付けます。次に、その URL に
を追加し、基盤となる Lambda 関数に/lambdasv1
POST
リクエストを送信します。注記
次のレスポンスが返されます。
"Hello, world! (v-beta)"