メニュー
Amazon API Gateway
開発者ガイド

Amazon API Gateway ステージ変数の使用

API Gateway ステージ変数を使用して、さまざまな API デプロイステージの HTTP および Lambda バックエンドにアクセスできます。また、クエリパラメータとしてステージ固有の設定メタデータを HTTP バックエンドに渡したり、入力マッピングテンプレートで生成されたペイロードとして Lambda 関数に渡したりできます。

前提条件

2 つの異なる HTTP エンドポイントに設定された url 変数で 2 つのステージを作成できます。それらは、2 つの異なる Lambda 関数に割り当てられた function ステージ変数と、ステージ固有のメタデータを含む version ステージ変数です。Amazon API Gateway コンソールを使用したステージ変数の設定の手順に従います。

ステージ変数を使用し、API を通じて HTTP エンドポイントにアクセスする

  1. [Stages] ナビゲーションペインで、[beta] を選択します。[beta Stage Editor] で、[Invoke URL] リンクを選択します。これにより、API のルートリソースで beta ステージの GET リクエストが開始されます。

    注記

    [Invoke URL] リンクは、beta ステージの API のルートリソースを指します。リンクを選択して URL に移動すると、ルートリソースで beta ステージの GET メソッドが呼び出されます。ルートリソースそのものではなく子リソースでメソッドが定義されている場合は、[Invoke URL] リンクを選択すると、{"message":"Missing Authentication Token"} エラーレスポンスが返されます。この場合、特定の子リソースの名前を [Invoke URL] リンクに追加する必要があります。

  2. beta ステージの GET リクエストから取得するレスポンスを次に示します。また、ブラウザを使用し、http://httpbin.org/get に移動して結果を確認することもできます。この値は beta ステージの url 変数に割り当てられました。2 つのレスポンスは同一です。

  3. [Stages] ナビゲーションペインで、[prod] ステージを選択します。[prod Stage Editor] から、[Invoke URL] リンクを選択します。これにより、API のルートリソースで prod ステージの GET リクエストが開始されます。

  4. prod ステージの GET リクエストから取得するレスポンスを次に示します。ブラウザを使用し、http://petstore-demo-endpoint-execute-api.com/petstore/pets に移動して結果を確認できます。この値は prod ステージの url 変数に割り当てられました。2 つのレスポンスは同一です。

クエリパラメータ式で、ステージ変数を通じて HTTP バックエンドにステージ固有のメタデータを渡します。

この手順では、クエリパラメータ式でステージ変数値を使用して、ステージ固有のメタデータを HTTP バックエンドに渡す方法について説明します。「Amazon API Gateway コンソールを使用したステージ変数の設定」で宣言された version ステージ変数を使用します。

  1. [Resource] ナビゲーションペインで、GET メソッドを選択します。メソッドの URL にクエリ文字列パラメータを追加するには、[Method Execution] で、[Method Request] を選択します。パラメータ名として「version」と入力します。

     HTTP GET メソッドに version クエリ文字列パラメータを追加する。
  2. [Method Execution] で [Integration Request] を選択します。[Endpoint URL] 値を編集し、前に定義した URL 値に ?version=${stageVariables.version} を追加します。この場合、この値は url ステージ値でも表されます。[Deploy API] を選択してこれらの変更をデプロイします。

     version ステージ変数とともにクエリ文字列式を HTTP エンドポイント URL に追加する
  3. [Stages] ナビゲーションペインで、[beta] ステージを選択します。[beta Stage Editor] から、現在のステージが最新のデプロイであることを確認し、[Invoke URL] リンクを選択します。

    注記

    ここでベータステージを使用するのは、url 変数によって指定される HTTP エンドポイント "http://httpbin.org/get" がクエリパラメータ式を受け取り、レスポンスで args オブジェクトとしてそれらを返すためです。

  4. レスポンスを次に示します。version ステージ変数に割り当てられた v-beta は、version 引数としてバックエンドで渡されることに注意してください。

     GETbetaurl ステージで  ステージ変数とともに HTTP エンドポイントのプロキシを使用した、API の  メソッドのレスポンス

ステージ変数とともに API を通じて Lambda 関数を呼び出す

この手順では、ステージ変数を使用して API のバックエンドとして Lambda 関数を呼び出す方法について説明します。前に宣言した function ステージ変数を使用します。詳細については、「Amazon API Gateway コンソールを使用したステージ変数の設定」を参照してください。

  1. [Resources] ペインで、ルートディレクトリの下に /lambdasv1 子リソースを作成し、子リソースで GET メソッドを作成します。[Integration type] を [Lambda Function] に設定し、[Lambda Function] に「${stageVariables.function}」と入力します。[Save] を選択します。

     GET ステージ変数で指定されたように、Lambda 関数と統合された function メソッドを作成する。

    ヒント

    [Add Permision to Lambda Function] と表示されたら、AWS CLI コマンドをメモしてから、[OK] を選択します。新しく作成した各 API メソッドで、function ステージ変数に割り当てられたか、今後割り当てられる各 Lambda 関数でコマンドを実行する必要があります。たとえば、$stageVariables.function 値が HelloWorld で、まだこの関数にアクセス権限を追加していない場合は、次の AWS CLI コマンドを実行する必要があります。

    Copy
    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-id statement-id-guid --action lambda:InvokeFunction

    これを行わなかった場合、メソッドを呼び出すと 500 Internal Server Error レスポンスが発生します。必ず、ステージ変数に割り当てられる Lambda 関数で ${stageVariables.function} を置き換えます。

     AWS CLI コマンドを実行して、作成したメソッドで呼び出される Lambda 関数にアクセス権限を追加します。
  2. 使用できるステージに API をデプロイします。

  3. [Stages] ナビゲーションペインで、[beta] ステージを選択します。最新のデプロイが beta Stage Editor にあることを確認します。[Invoke URL] リンクをコピーし、ブラウザのアドレスバーに貼り付け、その URL に /lambdasv1 を追加します。これにより、API の LambdaSv1 子リソースの GET メソッドを通じて、基盤となる Lambda 関数が呼び出されます。

    注記

    HelloWorld Lambda 関数は次のコードを実装します。

    Copy
    exports.handler = function(event, context, callback) { if (event.version) callback(null, 'Hello, World! (' + event.version + ')' ); else callback(null, "Hello, world! (v-unknown)"); };

    この実装では、次のレスポンスが発生します。

    Copy
    "Hello, world! (v-unknown)"

ステージ変数を通じてステージ固有のメタデータを Lambda 関数に渡す

この手順では、ステージ変数を使用して、ステージ固有の設定メタデータを Lambda 関数に渡す方法を示します。POST メソッドと入力マッピングテンプレートを使用して、前に宣言した version ステージ変数でペイロードを生成します。

  1. [Resources] ペインで、/lambdasv1 子リソースを選択します。子リソースで POST メソッドを作成し、[Integration type] を [Lambda Function] に設定して、[Lambda Function] に「${stageVariables.function}」と入力します。[Save] を選択します。

    ヒント

    このステップは、GET メソッドの作成に使用したステップに似ています。詳細については、「ステージ変数とともに API を通じて Lambda 関数を呼び出す」を参照してください。

  2. [/Method Execution] ペインで [Integration Request] を選択します。次に示すように、[Integration Request] ペインで、[Mapping Templates] を展開し、[Add mapping template] を選択して、application/json コンテンツタイプ用のテンプレートを追加します。

     バックエンド Lambda 関数への入力として、POST ステージ変数の値で表された、ステージ固有の設定メタデータを含む version メソッドのペイロードを生成します。

    注記

    ステージ変数は、マッピングテンプレートでは ("$stageVariables.version" または "${stageVariables.version}" のように) 引用符で囲んで参照し、その他の場所では (${stageVariables.function} のように) 引用符で囲まずに参照する必要があります。

  3. 使用できるステージに API をデプロイします。

  4. [Stages] ナビゲーションペインで、[beta] を選択します。[beta Stage Editor] で、現在のステージに最新のデプロイがあることを確認します。[Invoke URL] リンクをコピーし、REST API クライアントの URL 入力フィールドに貼り付けます。次に、その URL に /lambdasv1 を追加し、基盤となる Lambda 関数に POST リクエストを送信します。

    注記

    次のレスポンスが返されます。

    Copy
    "Hello, world! (v-beta)"

要約すると、API Gateway ステージ変数を使用して、API デプロイのステージごとに別の HTTP と Lambda バックエンドを対象にする方法について説明しました。さらに、ステージ変数を使用してステージ固有の設定データを HTTP および Lambda バックエンドに渡す方法についても説明しました。これらの手順は、いずれも API 開発の管理での API Gateway ステージ変数の多彩な機能を示すものです。