チュートリアル: 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 関数と以下の方法で統合します。
-
/calc
リソースでGET
メソッドを公開して Lambda 関数を呼び出し、入力をクエリ文字列パラメータとして渡します (AWS Service
統合)。 -
/calc
リソースでPOST
メソッドを公開して Lambda 関数を呼び出すことにより、メソッドリクエストのペイロードに入力を提供します (AWS Service
統合)。 -
ネストされた
/calc/{operand1}/{operand2}/{operator}
リソースでGET
を公開して Lambda 関数を呼び出し、パスパラメータとして入力を提供します (Lambda Function
統合)。
このチュートリアルを試してみるだけでなく、Calc
API 用の OpenAPI 定義ファイルを検討することをお勧めします。これは、OpenAPI を使用した REST API の設定 の API Gateway へのインポートの指示に従ってインポートできます。
トピック
AWS アカウントの作成
このチュートリアルを始める前に、AWS アカウントが必要です。
AWS アカウントをお持ちでない場合は、以下の手順に従ってアカウントを作成してください。
サインアップして AWS アカウントを作成するには
-
オンラインの手順に従います。
サインアップ手順の一環として、通話呼び出しを受け取り、電話のキーパッドを用いて確認コードを入力することが求められます。
引き受け可能な IAM ロールを作成する
API で Calc
Lambda 関数を呼び出すには、API Gateway が引き受け可能な IAM ロールが必要です。これは、次の信頼関係を持つ 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 ロールを作成する
-
IAM コンソールにログインします。
-
[Roles (ロール)] を選択します。
-
[Create Role (ロールの作成)] を選択します。
-
[Select type of trusted entity (信頼されたエンティティの種類を選択)] の下で、[AWS サービス)] を選択します。
-
[このロールを使用するサービスを選択] の下で、[Lambda] を選択します。
-
[Next: Permissions (次へ: アクセス許可)] を選択します。
-
[Create Policy (ポリシーの作成)] を選択します。
新しい [ポリシーの作成] コンソールウィンドウが開きます。このウィンドウで、以下の操作を行います。
-
[JSON] タブで、既存のポリシーを以下のポリシーに置き換えます。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "*" } ] }
-
[ポリシーの確認] を選択します。
-
[ポリシーの確認] で、以下の作業を行います。
-
[名前] には
lambda_execute
などの名前を入力します。 -
[Create Policy (ポリシーの作成)] を選択します。
-
-
-
元の [ロールの作成] ウィンドウで、以下の操作を行います。
-
[アクセス権限ポリシーをアタッチする] で、ドロップダウンリストから
lambda_execute
ポリシーを選択します。ポリシーが一覧に表示されていない場合は、一覧の上部にある [refresh (更新)] ボタンをクリックしてください。(ブラウザページを更新しないでください)。
-
[Next:Tags (次へ: タグ)] を選択します。
-
[Next:Review (次へ: レビュー)] を選択します。
-
[ロール名] には、
lambda_invoke_function_assume_apigw_role
などの名前を入力します。 -
[ロールの作成] を選択します。
-
-
ロールのリストから
lambda_invoke_function_assume_apigw_role
関数を選択します。 -
[信頼関係] タブを選択します。
-
[Edit trust relationship (信頼関係の編集)] を選択します。
-
既存のポリシーを以下に置き換えます。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com", "apigateway.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
-
[Update Trust Policy (信頼ポリシーの更新)] を選択します。
-
作成したロールのロール ARN を書き留めます。後で必要になります。
Calc
Lambda 関数の作成
次に、 Lambda コンソールを使用して Lambda 関数を作成します。
-
Lambda コンソールで、[Create function (関数の作成)] をクリックします。
-
[一から作成] を選択します。
-
[名前] に「
Calc
」と入力します。 -
[ランタイム] を、サポートされている Node.js ランタイムに設定します。
-
[Create function (関数の作成)] を選択します。
-
以下の 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); };
-
実行ロールで、[Choose an existing role (既存のロールを選択)] を選択します。
-
前に作成した
lambda_invoke_function_assume_apigw_role
ロールのロール ARN を入力します。 -
[デプロイ] を選択します。
この関数には、a
入力パラメータからの 2 つのオペランド (b
と op
) および演算子 (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
関数をテストする方法です。
-
[Saved test events (保存されたテストイベント)] ドロップダウンメニューで、[Configure test events (テストイベントの設定)] を選択します。
-
テストイベントの名前として
calc2plus5
と入力します。 -
テストイベントの定義を次のように置き換えます。
{ "a": "2", "b": "5", "op": "+" }
-
[Save] を選択します。
-
[Test (テスト)] を選択します。
-
[実行結果: 成功] を展開します。次のように表示されます。
{ "a": 2, "b": 5, "op": "+", "c": 7 }
Calc
API を作成する
次の手順は、作成したばかりの Calc
Lambda 関数用の API を作成する方法を示しています。次のセクションでは、リソースとメソッドをそれに追加します。
Calc
API を作成する
-
API Gateway コンソール https://console.aws.amazon.com/apigateway
にサインインします。 -
API Gateway を初めて使用する場合は、サービスの特徴を紹介するページが表示されます。[REST API] で、[ビルド] を選択します。[Create Example API (サンプル API の作成)] がポップアップ表示されたら、[OK] を選択します。
API Gateway を使用するのが初めてではない場合、[Create API (API の作成)] を選択します。[REST API] で、[ビルド] を選択します。
-
[Create new API (新しい API の作成)] で、[New API (新しい API)] を選択します。
-
[API name (API 名)] に「
LambdaCalc
」と入力します。 -
[Description (説明)] を空のままにして、[Endpoint Type (エンドポイントタイプ)] を [Regional (リージョン別)] に設定したままにします。
-
[Create API (API の作成)] を選択します。
統合 1: Lambda 関数を呼び出すためのクエリパラメータを持つ GET
メソッドを作成する
クエリ文字列パラメータを Lambda 関数に渡す GET
メソッドを作成することで、ブラウザから API を呼び出すことができます。この方法は、特にオープンアクセスを許可する API には便利です。
クエリ文字列パラメータを使用して GET
メソッドを設定するには
-
API Gateway コンソールの
LambdaCalc
API の [Resources (リソース)] で、[/] を選択します。 -
[Actions (アクション)] ドロップダウンメニューで、[Create Resource (リソースの作成)] を選択します。
-
[Resource Name (リソース名)] に
calc
と入力します。 -
[リソースの作成] を選択します。
-
先ほど作成した [/calc/] リソースを選択します。
-
[Actions (アクション)] ドロップダウンメニューから、[Create Method (メソッドの作成)] を選択します。
-
表示されるメソッドのドロップダウンメニューから、[GET] を選択します。
-
チェックマークアイコンを選択して、選択を保存します。
-
次の [Set up (設定)] ペインで、以下の操作を行います。
-
[Integration type (統合タイプ)] で、[AWS Service (AWS サービス)] を選択します。
-
[AWS Region (AWS リージョン)] の Lambda 関数を作成したリージョン (例:
us-west-2
) を選択します。 -
[AWS Service (AWS のサービス)] で、[Lambda] を選択します。
-
この Lambda 関数は、どの AWS サブドメインでもホストされていないため、[AWS Subdomain (AWS サブドメイン)] は空白のままにします。
-
[HTTP method (HTTP メソッド)]で [POST] を選択した後、チェックマークを選択して保存します。Lambda では、すべての Lambda 関数の呼び出しに
POST
リクエストを使用する必要があります。この例では、フロントエンドのメソッドリクエストの HTTP メソッドは、バックエンドの統合リクエストとは異なる場合があることを示しています。 -
[アクションタイプ] として [
Use path override
] を選択します。このオプションでは、実行する Invoke アクションの ARN を指定してCalc
関数を呼び出すことができます。 -
[Path override (パス上書き)] に「
/2015-03-31/functions/arn:aws:lambda:
」と入力します。ここで、region
:account-id
:function:Calc/invocationsregion
は Lambda 関数を作成したリージョン、account-id
は AWS アカウントのアカウント番号です。 -
[Execution role (実行ロール)] に、以前に作成した
lambda_invoke_function_assume_apigw_role
IAM ロールのロール ARN を入力します。 -
このメソッドではバイナリデータを扱わないため、[Content Handling (コンテンツの処理)] は [Passthrough (パススルー)] のままにしておきます。
-
[デフォルトタイムアウトの使用] チェックボックスをオンのままにしておきます。
-
[Save] を選択します。
-
-
[メソッドリクエスト] を選択します。
バックエンド Lambda 関数に代わって入力を受け取ることができるように、/calc で GET メソッドのクエリパラメータを設定します。
-
[Request Validator (リクエスト検証)] の横にある鉛筆アイコンを選択し、ドロップダウンメニューから [Validate query string parameters and headers (クエリ文字列パラメータおよびヘッダーの検証)] を選択します。この設定により、クライアントが必要なパラメータを指定しなかった場合に、それらが見つからないことを示すエラーメッセージが返されます。バックエンドへの呼び出しに対しては料金が請求されません。
-
チェックマークアイコンを選択して、選択を保存します。
-
[URL クエリ文字列パラメータ] セクションを展開します。
-
[クエリ文字列の追加] を選択します。
-
[Name (名前)] に、「
operand1
」と入力します。 -
チェックマークアイコンを選択してパラメータを保存します。
-
上記のステップを繰り返し、
operand2
およびoperator
という名前のパラメータを作成します。 -
パラメータごとに [必須] オプションを調べて、すべてのパラメータを確認します。
-
-
[メソッドの実行]、[統合リクエスト] の順に選択し、
Calc
関数の要求に応じて、クライアントで指定したクエリ文字列を統合リクエストのペイロードに変換するためのマッピングテンプレートを設定します。-
[マッピングテンプレート] セクションを展開します。
-
[Request body passthrough (リクエストボディのパススルー)] で [When no template matches the request Content-Type header (リクエストの Content-Type ヘッダーに一致するテンプレートがない場合)] を選択します。
-
[Content-Type] の [マッピングテンプレートの追加] を選択します。
-
「
application/json
」と入力し、チェックマークアイコンを選択してテンプレートエディタを開きます。 -
[はい、この統合を保護します] を選択して続行します。
-
次のマッピングスクリプトをマッピングテンプレートエディタにコピーします。
{ "a": "$input.params('operand1')", "b": "$input.params('operand2')", "op": "$input.params('operator')" }
このテンプレートでは、[Method Request (メソッドリクエスト)] で宣言した 3 つのクエリ文字列パラメータは、バックエンド Lambda 関数への入力として、JSON オブジェクトの指定したプロパティ値にマッピングされます。変換された JSON オブジェクトは統合リクエストのペイロードとして含まれます。
-
[Save] を選択します。
-
-
[メソッドの実行] を選択します。
-
これで、
GET
メソッドをテストして、このメソッドが Lambda 関数を呼び出すように適切に設定されていることを確認できます。-
[クエリ文字列] に「
operand1=2&operand2=3&operator=+
」と入力します。 -
[Test (テスト)] を選択します。
結果は以下のようになります。
-
統合 2: Lambda 関数を呼び出すための JSON ペイロードを持つ POST
メソッドを作成する
Lambda 関数を呼び出すための JSON ペイロードを含む POST
メソッドを作成することによって、クライアントがリクエストボディのバックエンド関数に必要な入力を提供するようにします。クライアントが正しい入力データをアップロードしたことを確認するために、ペイロードに対してリクエストの検証を有効にします。
Lambda 関数を呼び出すための JSON ペイロードを持つ POST
メソッドを設定するには
-
API Gateway コンソールに移動します。
-
[API] を選択します。
-
以前に作成した [LambdaCalc] API を選択します。
-
[リソース] ペインで [/calc] リソースを選択します。
-
[アクション] メニューから、[メソッドの作成] を選択します。
-
メソッドのドロップダウンリストから [POST] を選択します。
-
チェックマークアイコンを選択して、選択を保存します。
-
次の [Set up (設定)] ペインで、以下の操作を行います。
-
[Integration type (統合タイプ)] で、[AWS Service (AWS サービス)] を選択します。
-
[AWS Region (AWS リージョン)] の Lambda 関数を作成したリージョン (例:
us-west-2
) を選択します。 -
[AWS Service (AWS のサービス)] で、[Lambda] を選択します。
-
この Lambda 関数は、どの AWS サブドメインでもホストされていないため、[AWS Subdomain (AWS サブドメイン)] は空白のままにします。
-
[HTTP メソッド] で、[POST] を選択します。この例では、フロントエンドのメソッドリクエストの HTTP メソッドは、バックエンドの統合リクエストとは異なる場合があることを示しています。
-
[Action (アクション)] で、[Action Type (アクションタイプ)] に [
Use path override
] を選択します。このオプションでは、実行する Invoke アクションの ARN を指定してCalc
関数を呼び出すことができます。 -
[Path override (パス上書き)] に「
/2015-03-31/functions/arn:aws:lambda:
」と入力します。ここで、region
:account-id
:function:Calc/invocationsregion
は Lambda 関数を作成したリージョン、account-id
は AWS アカウントのアカウント番号です。 -
[Execution role (実行ロール)] に、以前に作成した
lambda_invoke_function_assume_apigw_role
IAM ロールのロール ARN を入力します。 -
このメソッドではバイナリデータを扱わないため、[Content Handling (コンテンツの処理)] は [Passthrough (パススルー)] のままにしておきます。
-
[デフォルトタイムアウトの使用] チェックボックスをオンのままにしておきます。
-
[Save] を選択します。
-
-
API Gateway コンソールのプライマリナビゲーションペインで、LambdaCalc API の下の [Models (モデル)] を選択し、メソッドの入力および出力のデータモデルを作成します。
-
[モデル] ペインの [作成] を選択します。[Model name (モデル名)] に
Input
と入力し、[Content type (コンテンツタイプ)] にapplication/json
と入力します。さらに [Model schema (モデルのスキーマ)] ボックスに次のスキーマ定義をコピーします。{ "type":"object", "properties":{ "a":{"type":"number"}, "b":{"type":"number"}, "op":{"type":"string"} }, "title":"Input" }
このモデルでは、入力データ構造を記述し、受信リクエストボディを検証します。
-
[モデルの作成] を選択します。
-
[モデル] ペインの [作成] を選択します。[Model name (モデル名)] に
Output
と入力し、[Content type (コンテンツタイプ)] にapplication/json
と入力します。さらに [Model schema (モデルのスキーマ)] ボックスに次のスキーマ定義をコピーします。{ "type":"object", "properties":{ "c":{"type":"number"} }, "title":"Output" }
このモデルでは、バックエンドの計算結果のデータ構造を記述します。このモデルを使用して統合レスポンスデータを別のモデルにマッピングできます。このチュートリアルではパススルー動作を利用するため、このモデルは使用しません。
-
コンソール画面の上部にある API の API ID を見つけてメモします。これは API 名の後に括弧で囲んで表示されます。
-
[Models (モデル)] ペインで [Create (作成)] を選択します。
-
[Model name (モデル名)] に
Result
と入力します。 -
[Content type (コンテンツタイプ)] に
application/json
と入力します。 -
次のスキーマ定義 (
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
-
[モデルの作成] を選択します。
-
-
メインナビゲーションペインの
LambdaCalc
API で、[Resources (リソース)] を選択します。 -
[リソース] ペインで、API の
POST
メソッドを選択します。 -
[メソッドリクエスト] を選択します。
-
[メソッドリクエスト] 構成設定で、以下の操作を行って、受信リクエストボディに対するリクエストの検証を有効にします。
-
[リクエストの検証] の横にある鉛筆アイコンを選択し、[
Validate body
] を選択します。チェックマークアイコンを選択して、選択を保存します。 -
[リクエストボディ] セクションを展開し、[モデルの追加] を選択します。
-
[Content-Type] 入力フィールドに「
application/json
」と入力し、[モデル名] 列のドロップダウンリストから [Input
] を選択します。チェックマークアイコンを選択して、選択を保存します。
-
-
POST
メソッドをテストするには、以下の作業を行います。-
[メソッドの実行] を選択します。
-
[Test (テスト)] を選択します。
-
-
次の JSON ペイロードを [リクエストボディ] にコピーします。
{ "a": 1, "b": 2, "op": "+" }
-
[Test (テスト)] を選択します。
[リクエストボディ] では、次のような出力が表示されます。
{ "a": 1, "b": 2, "op": "+", "c": 3 }
統合 3: Lambda 関数を呼び出すためのパスパラメータを持つ GET
メソッドを作成する
次に、一連のパスパラメータで指定されたリソースで GET
メソッドを作成し、バックエンドの Lambda 関数を呼び出します。パスパラメータの値は、Lambda 関数への入力データを指定します。受信パスパラメータ値を必要な統合リクエストペイロードにマッピングするためのマッピングテンプレートを使用します。
今回は、API Gateway コンソールに組み込まれている Lambda 統合サポートを使用して、メソッド統合を設定します。
生成された API リソースの構造は次のようになります。

URL パスパラメータを使用して GET
メソッドを設定するには
-
API Gateway コンソールに移動します。
-
[API] で、以前に作成した LambdaCalc API を選択します。
-
API の [リソース] メインナビゲーションペインで、[/calc] を選択します。
-
[Actions (アクション)] ドロップダウンメニューから、[Create Resource (リソースの作成)] を選択します。
-
[リソース名] に「
{operand1}
」を入力します。 -
[リソースパス] に「
{operand1}
」と入力します。 -
[リソースの作成] を選択します。
-
先ほど作成した /calc/{operand1} を選択します。
-
[Actions (アクション)] ドロップダウンメニューから、[Create Resource (リソースの作成)] を選択します。
-
[リソース名] に「
{operand2}
」を入力します。 -
[リソースパス] に「
{operand2}
」と入力します。 -
[リソースの作成] を選択します。
-
先ほど作成した /calc/{operand1}/{operand2} を選択します。
-
[Actions (アクション)] ドロップダウンメニューから、[Create Resource (リソースの作成)] を選択します。
-
[リソースパス] に「
{operator}
」と入力します。 -
[リソース名] に「
{operator}
」を入力します。 -
[リソースの作成] を選択します。
-
先ほど作成した /calc/{operand1}/{operand2}/{operator} を選択します。
-
[アクション] ドロップダウンメニューから、[メソッドの作成] を選択します。
-
[メソッド] ドロップダウンメニューから
GET
を選択します。 -
[Setup (設定)] ペインで、[統合タイプ] の [
Lambda Function
] を選択し、コンソールで有効になっている合理化されたセットアッププロセスを使用します。 -
[Lambda Region (Lambda リージョン )] で、 リージョン (例:
us-west-2
) を選択します。これは、Lambda 関数がホストされているリージョンです。 -
Lambda 関数の既存の Lambda 関数 (
Calc
) を選択します。 -
[保存]、[OK] の順に選択して、[Add Permissions to Lambda Function (Lambda 関数にアクセス許可を追加)] に同意します。
-
[Integration Request (統合リクエスト)] を選択します。
-
マッピングテンプレートを次のようにセットアップします。
-
[マッピングテンプレート] セクションを展開します。
-
[When no template matches the requested Content-Type header (リクエストされた Content-Type ヘッダーと一致するテンプレートがない場合)] のままにしておきます。
-
[マッピングテンプレートの追加] を選択します。
-
[Content-Type] に「
application/json
」と入力し、チェックマークアイコンを選択してテンプレートエディタを開きます。 -
[はい、この統合を保護します] を選択して続行します。
-
次のマッピングスクリプトをテンプレートエディタにコピーします。
{ "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 関数に渡します。 -
[Save] を選択します。
メソッドが正しく設定されると、設定は次のようになります。
-
-
GET
関数をテストするには、以下の作業を行います。-
[メソッドの実行] を選択します。
-
[Test (テスト)] を選択します。
-
[{operand1}]、[{operand2}]、[{operator}] の各フィールドに、それぞれ「
1
」、「1
」、「+
」と入力します。 -
[Test (テスト)] を選択します。
-
結果は以下のようになります。
このテスト結果は、マッピングテンプレートがないため、バックエンドの Lambda 関数からの出力はそのままマッピングされずに統合レスポンスに渡されています。次に、
Result
スキーマに従って、メソッドレスポンスペイロードのデータ構造をモデル化します。 -
-
デフォルトでは、メソッドレスポンス本文に空のモデルが割り当てられます。これにより、統合レスポンス本文がマッピングなしで渡されます。ただし、Java や Objective-C などの厳密に型指定された言語のいずれかの SDK を生成すると、SDK ユーザーは空のオブジェクトを結果として受け取ります。REST クライアントと SDK クライアントの両方が必要な結果を受け取るためには、事前定義済みのスキーマを使用してレスポンスデータをモデル化する必要があります。ここでは、メソッドレスポンス本文のモデルを定義し、マッピングテンプレートを構築して統合レスポンス本文をメソッドレスポンス本文に変換します。
-
[/calc/{operand1}/{operand2}/{operator}] を選択します。
-
[GET] を選択します。
-
[メソッドの実行] を選択します。
-
[Method Response (メソッドレスポンス)] を選択します。
-
[200] レスポンスを
-
[Response Body for 200 (200 のレスポンス本文)] で、
application/json
コンテンツタイプのモデルの横にある鉛筆アイコンを選択します。 -
[モデル] ドロップダウンリストから [
Result
] を選択します。 -
チェックマークアイコンを選択して、選択を保存します。
メソッドレスポンス本文のモデルを設定すると、レスポンスデータは該当する SDK の
Result
オブジェクトにキャストされます。それに応じて統合レスポンスデータが確実にマッピングされるようにするには、マッピングテンプレートが必要です。 -
-
マッピングテンプレートを作成するには、次の手順に従います。
-
[メソッドの実行] を選択します。
-
[統合レスポンス] を選択して、200 メソッドレスポンスエントリを展開します。
-
[マッピングテンプレート] セクションを展開します。
-
[Content-Type] リストから [
application/json
] を選択します。 -
[テンプレートの生成] ドロップダウンリストから [
Result
] を選択し、Result
テンプレート設計図を表示します。 -
テンプレート設計図を次のように変更します。
#set($inputRoot = $input.path('$')) { "input" : { "a" : $inputRoot.a, "b" : $inputRoot.b, "op" : "$inputRoot.op" }, "output" : { "c" : $inputRoot.c } }
-
[Save] を選択します。
-
-
マッピングテンプレートをテストするには、次の手順に従います。
-
[メソッドの実行] を選択します。
-
[Test (テスト)] を選択します。
-
[operand1]、[operand2]、[operator] の各入力フィールドに、それぞれ
1
2
、および+
と入力します。Lambda 関数からの統合レスポンスが
Result
オブジェクトにマッピングされます。 -
[Test (テスト)] を選択すると、コンソールの [Response Body (レスポンス本文)] の下に次のように表示されます。
{ "input": { "a": 1, "b": 2, "op": "+" }, "output": { "c": 3 } }
-
-
この時点では、API Gateway コンソールの [Test Invoke (テスト呼び出し)] を介してのみ API を呼び出すことができます。クライアントが利用できるようにするには、次のようにデプロイする必要があります。
リソースやメソッドを追加、変更、削除したり、データマッピングを更新したり、ステージ設定を更新したりするときには、必ず API を再デプロイしてください。そうしない場合、新しい機能やアップデートは API のクライアントには利用できません。