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

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

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

前提条件

2 つの異なる HTTP エンドポイント (2 つの異なる Lambda 関数に割り当てられた url ステージ変数、およびステージ固有のメタデータを含む function ステージ変数) に設定された version 変数を持つ 2 つのステージを作成する必要があります。「」の手順に従いますAmazon API Gateway コンソールを使用したステージ変数の設定

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

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

    注記

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

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

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

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

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

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

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

  2. [メソッドの実行] で [統合リクエスト] を選択します。[エンドポイント URL] 値を編集し、前に定義した URL 値に ?version=${stageVariables.version} を追加します。この場合、この値は url ステージ値でも表されます。[API のデプロイ] を選択してこれらの変更をデプロイします。

  3. [ステージ] ナビゲーションペインで、[beta] ステージを選択します。[beta Stage Editor] から、現在のステージが最新のデプロイであることを確認し、[呼び出し URL] リンクを選択します。

    注記

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

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

    
              beta ステージの url ステージ変数と共に HTTP エンドポイントのプロキシを使用した API の GET メソッドからのレスポンス

ステージ変数を使用して API 経由で Lambda 関数を呼び出す

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

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

    
              function ステージ変数の指定通りに、Lambda 関数と統合された GET メソッドを作成しします。
    ヒント

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

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

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

  3. [ステージ] ナビゲーションペインで、[beta] ステージを選択します。最新のデプロイが beta Stage Editor にあることを確認します。[Invoke URL] リンクをコピーし、ブラウザのアドレスバーに貼り付け、その URL に /lambdasv1 を追加します。これにより、API の 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 ステージ変数でペイロードを生成します。

  1. [リソース] ペインで、/lambdasv1 子リソースを選択します。子リソースで POST メソッドを作成し、[Integration type (統合タイプ)] を [Lambda Function (Lambda 関数)] に設定して、[Lambda Function (Lambda 関数)] に「${stageVariables.function}」と入力します。[保存] を選択します。

    ヒント

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

  2. [/メソッドの実行] ペインで [統合タイプ] を選択します。次の説明にあるように、[Integration Request] (統合リクエストペイン) で [Mapping Templates] (マッピングテンプレート) を展開し、次に [Add mapping template] (マッピングテンプレートの追加) を選択して、application/json コンテンツタイプ用のテンプレートを追加します。

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

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

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

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

    注記

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

    "Hello, world! (v-beta)"