Amazon API Gateway
開発者ガイド

チュートリアル: 2 つの AWS のサービス統合と 1 つの Lambda 非プロキシ統合を使用して Calc REST API を作成する

非プロキシ統合の開始方法のチュートリアルでは、Lambda Function 統合のみを使用します。Lambda Function 統合は、Lambda 関数を呼び出すために必要なリソースベースのアクセス許可を自動的に追加するなど、統合設定の大部分を実行する AWS Service 統合タイプの特殊なケースです。ここでは、3 つの統合のうち 2 つが AWS Service 統合を使用しています。この統合タイプでは、より細かく制御できますが、適切なアクセス許可を含む IAM ロールの作成や指定などのタスクを手動で実行する必要があります。

このチュートリアルでは、基本的な算術演算を実装し、JSON 形式の入出力を受け入れて返す Calc Lambda 関数を作成します。次に、REST API を作成し、それを Lambda 関数と以下の方法で統合します。

  1. /calc リソースで GET メソッドを公開して Lambda 関数を呼び出し、入力をクエリ文字列パラメータとして渡します (AWS Service 統合)。

  2. /calc リソースで POST メソッドを公開して Lambda 関数を呼び出すことにより、メソッドリクエストのペイロードに入力を提供します (AWS Service 統合)。

  3. 入れ子になった /calc/{operand1}/{operand2}/{operator} リソースで GET を公開して Lambda 関数を呼び出し、パスパラメータとして入力を提供します (Lambda Function 統合)。

このチュートリアルを試してみるだけでなく、Calc API 用の OpenAPI 定義ファイルを検討することをお勧めします。これは、REST API を API Gateway にインポートする の API Gateway へのインポートの指示に従ってインポートできます。

AWS アカウントを作成する

このチュートリアルを始める前に、AWS アカウントが必要です。

AWS アカウントをお持ちでない場合は、次に説明する手順に従ってアカウントを作成してください。

AWS にサインアップするには

  1. https://aws.amazon.com/ を開き、[AWS アカウントの作成] を選択します。

  2. オンラインの手順に従います。

引き受け可能な IAM ロールを作成する

API が Calc Lambda 関数を呼び出すためには、次の信頼関係を持つ IAM ロールである API Gateway の引き受け可能な IAM ロールを持つ必要があります。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "apigateway.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

作成するロールには Lambda InvokeFunction アクセス許可が必要です。それ以外の場合、API 発信者は 500 Internal Server Error レスポンスを受け取ります。このアクセス許可をロールに付与するには、次の IAM ポリシーをアタッチします。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "*" } ] }

これをすべて実行する方法は次のとおりです。

API Gateway の引き受け可能な IAM ロールを作成する

  1. IAM コンソールにログインします。

  2. [Roles (ロール)] を選択します。

  3. [Create Role (ロールの作成)] を選択します。

  4. [信頼されたエンティティの種類を選択] の下で、[AWS のサービス] を選択します。

  5. [このロールを使用するサービスを選択] の下で、[Lambda] を選択します。

  6. [Next: Permissions (次へ: アクセス許可)] を選択します。

  7. [Create Policy (ポリシーの作成)] を選択します。

    新しい [ポリシーの作成] コンソールウィンドウが開きます。このウィンドウで、以下の操作を行います。

    1. [JSON] タブで、既存のポリシーを以下のポリシーに置き換えます。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "*" } ] }
    2. [ポリシーの確認] を選択します。

    3. [ポリシーの確認] で、以下の作業を行います。

      1. [名前] には lambda_execute などの名前を入力します。

      2. [Create Policy (ポリシーの作成)] を選択します。

  8. 元の [ロールの作成] ウィンドウで、以下の操作を行います。

    1. [アクセス権限ポリシーをアタッチする] で、ドロップダウンリストから lambda_execute ポリシーを選択します。

      ポリシーが一覧に表示されていない場合は、一覧の上部にある [refresh (更新)] ボタンをクリックしてください。(ブラウザページを更新しないでください)。

    2. [Next:Tags (次へ: タグ)] を選択します。

    3. [Next:Review (次へ: レビュー)] を選択します。

    4. [ロール名] には、lambda_invoke_function_assume_apigw_role などの名前を入力します。

    5. [ロールの作成] を選択します。

  9. ロールのリストから lambda_invoke_function_assume_apigw_role 関数を選択します。

  10. [信頼関係] タブを選択します。

  11. [Edit trust relationship (信頼関係の編集)] を選択します。

  12. 既存のポリシーを以下に置き換えます。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com", "apigateway.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
  13. [Update Trust Policy (信頼ポリシーの更新)] を選択します。

  14. 作成したロールのロール ARN を書き留めます。後で必要になります。

Calc Lambda 関数を作成する

次に、Lambda コンソールを使用して Lambda 関数を作成します。

  1. Lambda コンソールで、[関数の作成] を選択します。

  2. [一から作成] を選択します。

  3. [Name (名前)] に、「Calc」と入力します。

  4. [ランタイム] を [Node.js 8.10] に設定したままにします。

  5. [Create function (関数の作成)] を選択します。

  6. 以下の Lambda 関数をコピーし、Lambda コンソールのコードエディターに貼り付けます。

    console.log('Loading the Calc function'); exports.handler = function(event, context, callback) { console.log('Received event:', JSON.stringify(event, null, 2)); if (event.a === undefined || event.b === undefined || event.op === undefined) { callback("400 Invalid Input"); } var res = {}; res.a = Number(event.a); res.b = Number(event.b); res.op = event.op; if (isNaN(event.a) || isNaN(event.b)) { callback("400 Invalid Operand"); } switch(event.op) { case "+": case "add": res.c = res.a + res.b; break; case "-": case "sub": res.c = res.a - res.b; break; case "*": case "mul": res.c = res.a * res.b; break; case "/": case "div": res.c = res.b===0 ? NaN : Number(event.a) / Number(event.b); break; default: callback("400 Invalid Operator"); break; } callback(null, res); };
  7. 実行ロールで、[既存のロールを選択] を選択します。

  8. 前に作成した lambda_invoke_function_assume_apigw_role ロールのロール ARN を入力します。

  9. [Save] を選択します。

この関数には、a 入力パラメータからの 2 つのオペランド (bop) および演算子 (event) が必要です。入力は以下の形式の JSON オブジェクトです。

{ "a": "Number" | "String", "b": "Number" | "String", "op": "String" }

この関数は計算結果 (c) と入力を返します。入力が無効な場合、関数は結果として Null 値または「Invalid op」文字列のいずれかを返します。出力は以下の JSON 形式になります。

{ "a": "Number", "b": "Number", "op": "String", "c": "Number" | "String" }

この関数は、次のステップで API と統合する前に、Lambda コンソールでテストする必要があります。

Calc Lambda 関数をテストする

これが、Lambda コンソールで Calc 関数をテストする方法です。

  1. [保存されたテストイベント] ドロップダウンメニューで、[テストイベントの設定] を選択します。

  2. テストイベントの名前として calc2plus5 と入力します。

  3. テストイベントの定義を次のように置き換えます。

    { "a": "2", "b": "5", "op": "+" }
  4. [Save] を選択します。

  5. [Test (テスト)] を選択します。

  6. [実行結果: 成功] を展開します。次のように表示されます。

    { "a": 2, "b": 5, "op": "+", "c": 7 }

Calc API を作成する

次の手順は、作成したばかりの Calc Lambda 関数用の API を作成する方法を示しています。次のセクションでは、リソースとメソッドをそれに追加します。

Calc API を作成する

  1. API Gateway コンソールで、[API の作成] を選択します。

  2. [API Name (API 名)] に LambdaCalc を入力します。

  3. [説明] を空のままにして、[エンドポイントタイプ] を [リージョン別] に設定したままにします。

  4. [Create API (API の作成)] を選択します。

統合 1: Lambda 関数を呼び出すためのクエリパラメータを持つ GET メソッドを作成する

クエリ文字列パラメータを Lambda 関数に渡す GET メソッドを作成することで、ブラウザから API を呼び出すことができます。この方法は、特にオープンアクセスを許可する API には便利です。

クエリ文字列パラメータを使用して GET メソッドを設定するには

  1. API Gateway コンソールで、LambdaCalc API の [Resources (リソース)] の下にある [/] を選択します。

  2. [Actions (アクション)] ドロップダウンメニューで、[Create Resource (リソースの作成)] を選択します。

  3. [Resource Name (リソース名)] に calc と入力します。

  4. [リソースの作成] を選択します。

  5. 先ほど作成した [/calc/] リソースを選択します。

  6. [アクション] ドロップダウンメニューから、[メソッドの作成] を選択します。

  7. 表示される [メソッド] ドロップダウンメニューから、[GET] を選択します。

  8. チェックマークアイコンを選択して、選択を保存します。

  9. 次の [Set up (設定)] ペインで、以下の操作を行います。

    1. [統合タイプ] で、[AWS のサービス] を選択します。

    2. [AWS リージョン] の Lambda 関数を作成したリージョン (us-west-2 など) を選択します。

    3. [AWS のサービス] で、[Lambda] を選択します。

    4. この Lambda 関数は、どの AWS サブドメインでもホストされていないため、[AWS サブドメイン] は空白のままにします。

    5. [HTTP メソッド] で、[POST] を選択し、チェックマークアイコンを選択して選択内容を保存します。Lambda では、Lambda 関数の呼び出しに POST リクエストを使用する必要があります。この例では、フロントエンドのメソッドリクエストの HTTP メソッドは、バックエンドの統合リクエストとは異なる場合があることを示しています。

    6. [アクションタイプ] として [Use path override] を選択します。このオプションでは、実行する Invoke アクションの ARN を指定して Calc 関数を呼び出すことができます。

    7. [Path override (パス上書き)] に /2015-03-31/functions/arn:aws:lambda:region:account-id:function:Calc/invocations と入力します。ここで、region は Lambda 関数を作成したリージョン、account-id は AWS アカウントのアカウント番号です。

    8. [Execution role (実行ロール)] に、以前に作成した lambda_invoke_function_assume_apigw_role IAM ロールのロール ARN を入力します。

    9. このメソッドではバイナリデータを扱わないため、[コンテンツの処理] は [パススルー] のままにしておきます。

    10. [デフォルトタイムアウトの使用] チェックボックスをオンのままにしておきます。

    11. [Save] を選択します。

  10. [メソッドリクエスト] を選択します。

    バックエンド Lambda 関数に代わって入力を受け取ることができるように、/calcGET メソッドのクエリパラメータを設定します。

    1. [リクエストの検証] の横にある鉛筆アイコンを選択し、ドロップダウンメニューから [クエリ文字列パラメータおよびヘッダーの検証] を選択します。この設定により、クライアントが必要なパラメータを指定しなかった場合に、それらが見つからないことを示すエラーメッセージが返されます。バックエンドへの呼び出しに対しては料金が請求されません。

    2. チェックマークアイコンを選択して、選択を保存します。

    3. [URL クエリ文字列パラメータ] セクションを展開します。

    4. [クエリ文字列の追加] を選択します。

    5. [Name (名前)] に、「operand1」と入力します。

    6. チェックマークアイコンを選択してパラメータを保存します。

    7. 上記のステップを繰り返し、operand2 および operator という名前のパラメータを作成します。

    8. パラメータごとに [必須] オプションを調べて、すべてのパラメータを確認します。

  11. [メソッドの実行]、[統合リクエスト] の順に選択し、Calc 関数の要求に応じて、クライアントで指定したクエリ文字列を統合リクエストのペイロードに変換するためのマッピングテンプレートを設定します。

    1. [マッピングテンプレート] セクションを展開します。

    2. [リクエストボディのパススルー] で [リクエストの Content-Type ヘッダーに一致するテンプレートがない場合] を選択します。

    3. [Content-Type] の [マッピングテンプレートの追加] を選択します。

    4. application/json」と入力し、チェックマークアイコンを選択してテンプレートエディタを開きます。

    5. [はい、この統合を保護します] を選択して続行します。

    6. 次のマッピングスクリプトをマッピングテンプレートエディタにコピーします。

      { "a": "$input.params('operand1')", "b": "$input.params('operand2')", "op": "$input.params('operator')" }

      このテンプレートでは、[メソッドリクエスト] で宣言した 3 つのクエリ文字列パラメータは、バックエンド Lambda 関数への入力として、JSON オブジェクトの指定したプロパティ値にマッピングされます。変換された JSON オブジェクトは統合リクエストのペイロードとして含まれます。

    7. [Save] を選択します。

  12. [メソッドの実行] を選択します。

  13. これで、GET メソッドをテストして、このメソッドが Lambda 関数を呼び出すように適切に設定されていることを確認できます。

    1. [クエリ文字列] に「operand1=2&operand2=3&operator=+」と入力します。

    2. [Test (テスト)] を選択します。

      結果は以下のようになります。

      
                                Lambda プロキシとして API Gateway で API を作成する

統合 2: Lambda 関数を呼び出すための JSON ペイロードを持つ POST メソッドを作成する

Lambda 関数を呼び出すための JSON ペイロードを含む POST メソッドを作成することによって、クライアントがリクエストボディのバックエンド関数に必要な入力を提供するようにします。クライアントが正しい入力データをアップロードしたことを確認するために、ペイロードに対してリクエストの検証を有効にします。

Lambda 関数を呼び出すための JSON ペイロードを持つ POST メソッドを設定するには

  1. API Gateway コンソールに移動します。

  2. [API] を選択します。

  3. 以前に作成した [LambdaCalc] API を選択します。

  4. [リソース] ペインで [/calc] リソースを選択します。

  5. [アクション] メニューから、[メソッドの作成] を選択します。

  6. [メソッド] ドロップダウンリストから [POST] を選択します。

  7. チェックマークアイコンを選択して、選択を保存します。

  8. 次の [Set up (設定)] ペインで、以下の操作を行います。

    1. [統合タイプ] で、[AWS のサービス] を選択します。

    2. [AWS リージョン] の Lambda 関数を作成したリージョン (us-west-2 など) を選択します。

    3. [AWS のサービス] で、[Lambda] を選択します。

    4. この Lambda 関数は、どの AWS サブドメインでもホストされていないため、[AWS サブドメイン] は空白のままにします。

    5. [HTTP メソッド] で、[POST] を選択します。この例では、フロントエンドのメソッドリクエストの HTTP メソッドは、バックエンドの統合リクエストとは異なる場合があることを示しています。

    6. [Action (アクション)] で、[Action Type (アクションタイプ)] に [Use path override] を選択します。このオプションでは、実行する 呼び出し アクションの ARN を指定して Calc 関数を呼び出すことができます。

    7. [Path override (パス上書き)] に /2015-03-31/functions/arn:aws:lambda:region:account-id:function:Calc/invocations と入力します。ここで、region は Lambda 関数を作成したリージョン、account-id は AWS アカウントのアカウント番号です。

    8. [Execution role (実行ロール)] に、以前に作成した lambda_invoke_function_assume_apigw_role IAM ロールのロール ARN を入力します。

    9. このメソッドではバイナリデータを扱わないため、[コンテンツの処理] は [パススルー] のままにしておきます。

    10. [デフォルトタイムアウトの使用] チェックボックスをオンのままにしておきます。

    11. [Save] を選択します。

  9. API Gateway コンソールのプライマリナビゲーションペインで、LambdaCalc API の下の [Models (モデル)] を選択し、メソッドの入力および出力のデータモデルを作成します。

    1. [モデル] ペインの [作成] を選択します。[Model name (モデル名)] に Input と入力し、[Content type (コンテンツタイプ)] に application/json と入力します。さらに [Model schema (モデルのスキーマ)] ボックスに次のスキーマ定義をコピーします。

      { "type":"object", "properties":{ "a":{"type":"number"}, "b":{"type":"number"}, "op":{"type":"string"} }, "title":"Input" }

      このモデルでは、入力データ構造を記述し、受信リクエストボディを検証します。

    2. [モデルの作成] を選択します。

    3. [モデル] ペインの [作成] を選択します。[Model name (モデル名)] に Output と入力し、[Content type (コンテンツタイプ)] に application/json と入力します。さらに [Model schema (モデルのスキーマ)] ボックスに次のスキーマ定義をコピーします。

      { "type":"object", "properties":{ "c":{"type":"number"} }, "title":"Output" }

      このモデルでは、バックエンドの計算結果のデータ構造を記述します。このモデルを使用して統合レスポンスデータを別のモデルにマッピングできます。このチュートリアルではパススルー動作を利用するため、このモデルは使用しません。

    4. コンソール画面の上部にある API の API ID を見つけてメモします。これは API 名の後に括弧で囲んで表示されます。

    5. [Models (モデル)] ペインで [Create (作成)] を選択します。

    6. [Model name (モデル名)] に Result と入力します。

    7. [Content type (コンテンツタイプ)] に application/json と入力します。

    8. 次のスキーマ定義 (restapi-id は先にメモした REST API ID) を [Model schema (モデルのスキーマ)] ボックスにコピーします。

      { "type":"object", "properties":{ "input":{ "$ref":"https://apigateway.amazonaws.com/restapis/restapi-id/models/Input" }, "output":{ "$ref":"https://apigateway.amazonaws.com/restapis/restapi-id/models/Output" } }, "title":"Output" }

      このモデルでは、返されたレスポンスデータのデータ構造を記述します。このモデルは、指定された API (Input) に定義されている Output スキーマと restapi-id スキーマの両方を参照します。このチュートリアルではパススルー動作を利用するため、このモデルも使用しません。

    9. [モデルの作成] を選択します。

  10. メインナビゲーションペインの LambdaCalc API で、[Resources (リソース)] を選択します。

  11. [リソース] ペインで、API の POST メソッドを選択します。

  12. [メソッドリクエスト] を選択します。

  13. [メソッドリクエスト] 構成設定で、以下の操作を行って、受信リクエストボディに対するリクエストの検証を有効にします。

    1. [リクエストの検証] の横にある鉛筆アイコンを選択し、[Validate body] を選択します。チェックマークアイコンを選択して、選択を保存します。

    2. [リクエストボディ] セクションを展開し、[モデルの追加] を選択します。

    3. [Content-Type] 入力フィールドに「application/json」と入力し、[モデル名] 列のドロップダウンリストから [Input] を選択します。チェックマークアイコンを選択して、選択を保存します。

  14. POST メソッドをテストするには、以下の作業を行います。

    1. [メソッドの実行] を選択します。

    2. [Test (テスト)] を選択します。

  15. 次の JSON ペイロードを [リクエストボディ] にコピーします。

    { "a": 1, "b": 2, "op": "+" }
  16. [Test (テスト)] を選択します。

    [リクエストボディ] では、次のような出力が表示されます。

    { "a": 1, "b": 2, "op": "+", "c": 3 }

統合 3: Lambda 関数を呼び出すためのパスパラメータを持つ GET メソッドを作成する

次に、一連のパスパラメータで指定されたリソースで GET メソッドを作成し、バックエンドの Lambda 関数を呼び出します。パスパラメータの値は、Lambda 関数への入力データを指定します。受信パスパラメータ値を必要な統合リクエストペイロードにマッピングするためのマッピングテンプレートを使用します。

今回は、API Gateway コンソールに組み込まれている Lambda 統合サポートを使用して、メソッド統合を設定します。

生成された API リソースの構造は次のようになります。


                Lambda プロキシとして API Gateway で API を作成する

URL パスパラメータを使用して GET メソッドを設定するには

  1. API Gateway コンソールに移動します。

  2. [API] で、以前に作成した LambdaCalc API を選択します。

  3. API の [リソース] メインナビゲーションペインで、[/calc] を選択します。

  4. [アクション] ドロップダウンメニューから、[リソースの作成] を選択します。

  5. [リソース名] に「{operand1}」を入力します。

  6. [リソースパス] に「{operand1}」と入力します。

  7. [リソースの作成] を選択します。

  8. 先ほど作成した /calc/{operand1} を選択します。

  9. [アクション] ドロップダウンメニューから、[リソースの作成] を選択します。

  10. [リソース名] に「{operand2}」を入力します。

  11. [リソースパス] に「{operand2}」と入力します。

  12. [リソースの作成] を選択します。

  13. 先ほど作成した /calc/{operand1}/{operand2} を選択します。

  14. [アクション] ドロップダウンメニューから、[リソースの作成] を選択します。

  15. [リソースパス] に「{operator}」と入力します。

  16. [リソース名] に「{operator}」を入力します。

  17. [リソースの作成] を選択します。

  18. 先ほど作成した /calc/{operand1}/{operand2}/{operator} を選択します。

  19. [アクション] ドロップダウンメニューから、[メソッドの作成] を選択します。

  20. [メソッド] ドロップダウンメニューから GET を選択します。

  21. [Setup (設定)] ペインで、[統合タイプ] の [Lambda Function] を選択し、コンソールで有効になっている合理化されたセットアッププロセスを使用します。

  22. [Lambda リージョン] で、リージョン (us-west-2 など) を選択します。これは、Lambda 関数がホストされているリージョンです。

  23. [Lambda 関数] で、既存の Lambda 関数 (Calc など) を選択します。

  24. [保存]、[OK] の順に選択して、[Add Permissions to Lambda Function (Lambda 関数にアクセス許可を追加)] に同意します。

  25. [Integration Request (統合リクエスト)] を選択します。

  26. マッピングテンプレートを次のようにセットアップします。

    1. [マッピングテンプレート] セクションを展開します。

    2. [When no template matches the requested Content-Type header (リクエストされた Content-Type ヘッダーと一致するテンプレートがない場合)] のままにしておきます。

    3. [マッピングテンプレートの追加] を選択します。

    4. [Content-Type] に「application/json」と入力し、チェックマークアイコンを選択してテンプレートエディタを開きます。

    5. [はい、この統合を保護します] を選択して続行します。

    6. 次のマッピングスクリプトをテンプレートエディタにコピーします。

      { "a": "$input.params('operand1')", "b": "$input.params('operand2')", "op": #if($input.params('operator')=='%2F')"/"#{else}"$input.params('operator')"#end }

      このテンプレートでは、/calc/{operand1}/{operand2}/{operator} リソースを作成したときに宣言した 3 つの URL パスパラメータが、JSON オブジェクトで指定したプロパティ値にマッピングされます。URL パスは URL エンコードされる必要があるため、除算演算子を %2F ではなく / として指定してください。このテンプレート では、%2F'/' に変換してから Lambda 関数に渡します。

    7. [Save] を選択します。

    メソッドが正しく設定されると、設定は次のようになります。

    
                        Lambda 関数を呼び出すためのパスパラメータを持つ GET メソッドを設定する
  27. GET 関数をテストするには、以下の作業を行います。

    1. [メソッドの実行] を選択します。

    2. [Test (テスト)] を選択します。

    3. [{operand1}]、[{operand2}]、[{operator}] の各フィールドに、それぞれ「1」、「2」、「+」と入力します。

    4. [Test (テスト)] を選択します。

    5. 結果は以下のようになります。

      
                                メソッドリクエストの URL パスパラメータを統合リクエストのペイロードにマッピングして Lambda 関数を呼び出せるようにする

    このテスト結果は、マッピングテンプレートがないため、バックエンドの Lambda 関数からの出力はそのままマッピングされずに統合レスポンスに渡されています。次に、Result スキーマに従って、メソッドレスポンスペイロードのデータ構造をモデル化します。

  28. デフォルトでは、メソッドレスポンス本文に空のモデルが割り当てられます。これにより、統合レスポンス本文がマッピングなしで渡されます。ただし、Java や Objective-C などの厳密に型指定された言語のいずれかの SDK を生成すると、SDK ユーザーは空のオブジェクトを結果として受け取ります。REST クライアントと SDK クライアントの両方が必要な結果を受け取るためには、事前定義済みのスキーマを使用してレスポンスデータをモデル化する必要があります。ここでは、メソッドレスポンス本文のモデルを定義し、マッピングテンプレートを構築して統合レスポンス本文をメソッドレスポンス本文に変換します。

    1. [/calc/{operand1}/{operand2}/{operator}] を選択します。

    2. [GET] を選択します。

    3. [メソッドの実行] を選択します。

    4. [Method Response (メソッドレスポンス)] を選択します。

    5. [200] レスポンスを

    6. [Response Body for 200 (200 のレスポンス本文)] で、application/json コンテンツタイプのモデルの横にある鉛筆アイコンを選択します。

    7. [モデル] ドロップダウンリストから [Result] を選択します。

    8. チェックマークアイコンを選択して、選択を保存します。

    メソッドレスポンス本文のモデルを設定すると、レスポンスデータは該当する SDK の Result オブジェクトにキャストされます。それに応じて統合レスポンスデータが確実にマッピングされるようにするには、マッピングテンプレートが必要です。

  29. マッピングテンプレートを作成するには、次の手順に従います。

    1. [メソッドの実行] を選択します。

    2. [統合レスポンス] を選択して、200 メソッドレスポンスエントリを展開します。

    3. [マッピングテンプレート] セクションを展開します。

    4. [Content-Type] リストから [application/json] を選択します。

    5. [テンプレートの生成] ドロップダウンリストから [Result] を選択し、Result テンプレート設計図を表示します。

    6. テンプレート設計図を次のように変更します。

      #set($inputRoot = $input.path('$')) { "input" : { "a" : $inputRoot.a, "b" : $inputRoot.b, "op" : "$inputRoot.op" }, "output" : { "c" : $inputRoot.c } }
    7. [Save] を選択します。

  30. マッピングテンプレートをテストするには、次の手順に従います。

    1. [メソッドの実行] を選択します。

    2. [Test (テスト)] を選択します。

    3. [operand1]、[operand2]、[operator] の各入力フィールドに、それぞれ 1 2、および + と入力します。

      Lambda 関数からの統合レスポンスが Result オブジェクトにマッピングされます。

    4. [Test (テスト)] を選択すると、コンソールの [Response Body (レスポンス本文)] の下に次のように表示されます。

      { "input": { "a": 1, "b": 2, "op": "+" }, "output": { "c": 3 } }
  31. この時点では、API Gateway コンソールの [Test Invoke (テスト呼び出し)] を介してのみ API を呼び出すことができます。クライアントが利用できるようにするには、次のようにデプロイする必要があります。

    1. [アクション] ドロップダウンメニューから [API のデプロイ] を選択します。

    2. [Deployment Stage (デプロイされるステージ)] ドロップダウンメニューから [New Stage (新しいステージ)] を選択します。

    3. [Stage Name (ステージ名)] に test と入力します。

    4. [デプロイ] を選択します。

    5. コンソールウィンドウの上部にある [Invoke URL (URL の呼び出し)] をメモします。PostmancURL のようなツールでこれを使って API をテストできます。

注記

リソースやメソッドを追加、変更、削除したり、データマッピングを更新したり、ステージ設定を更新したりするときには、必ず API を再デプロイしてください。そうしない場合、新しい機能やアップデートは API のクライアントには利用できません。