API Gateway REST API を介してバックエンド Lambda 関数または HTTP エンドポイントにデータを渡すにはどうすればよいですか?
Amazon API Gateway REST API で、バックエンド AWS Lambda 関数と HTTP エンドポイントにデータを渡したいです。どうすればそれができますか?
簡単な説明
データをバックエンド Lambda 関数に渡すように REST API を設定するには、Lambda カスタム統合を使用します。
クエリ文字列パラメータを HTTP エンドポイントに渡すには、HTTP カスタム統合を使用します。
重要: 入力データが統合リクエストペイロードとして提供されていることを確認してください。ベストプラクティスとして、マッピングテンプレートを使用してペイロードを提供することが推奨されます。詳細については、「メソッドリクエストデータを統合リクエストパラメータにマッピングする」を参照してください。
解決方法
API Gateway API からのカスタムヘッダーを処理する Lambda 関数を作成する
1. Lambda コンソールを開きます。
2. [Create function (関数を作成)] を選択します。[Create function (関数を作成)] ページが開き、選択した [ Author from scratch (最初から作成)] オプションが表示されます。
3. [Basic information] (基本情報) ペインで、次の操作を行います。[Function name] (関数名) に、関数の目的を説明する名前を入力します。例: MapTemplate。[Runtime] (ランタイム) には [Python 3.9] を選択します。
4. [Permissions] (アクセス許可) で [Change default execution role (デフォルト実行ロールを変更)] を選択します。
5. [Use an existing role (既存のロールを使用する)] を選択します。[Existing roles (既存のロール)] ドロップダウンリストが表示されます。
6. 前に作成した Lambda 実行ロールを [Existing role (既存のロール)] で選択します。
7. [Create function (関数を作成)] を選択します。
8. [Code] (コード) タブの [Code source] (コードソース) で、lambda_function.py のコードを次のように置き換えます。
import json def lambda_handler(event, context): print(event) return { 'statusCode': 200, 'body': json.dumps(event) # returning the data sent to backend lambda function as API response. }
9. [Deploy] (デプロイ) を選択します。
詳細については、Python による Lambda 関数のビルドをご参照ください。
バックエンド Lambda 関数または HTTP エンドポイントにデータを渡す
1. API Gateway Console にログインします。
2. [Create API (API の作成)] を選択します。
- または -
(初めて API Gateway を使用する場合) サービスの特徴を紹介するページが表示されます。[REST API] で [Build (ビルド)] を選択します。[Create Example API (サンプル API の作成)] ポップアップが表示されたら [OK] を選択します。
3. [REST API] ペインの [Choose an API type (API タイプを選択)] で [Build (ビルド)] を選択します。
4. [新しい API の作成] で、[新規 API] を選択します。
5. [Settings (設定)] で、次の操作を行います。[API name (API 名)] に、API の目的を説明する名前を入力します。例: MappingTemplateTutorial。(オプション) [Description (説明)] に API の目的を表す短い説明を入力します。たとえば、バックエンド Lambda 関数/HTTP エンドポイントにデータを送信します。[Endpoint Type (エンドポイントタイプ)] で [Resional (リージョン)] を選択します。
6. [Create API (API の作成)] を選択します。
API のリソース、統合ポイントとボディマッピングテンプレートを設定する
1. 前のステップで作成した API の名前を API Gateway console (API Gateway コンソール)で選択します。API の [Resources (リソース)] ページが開きます。
2. [Resources (リソース)] ページで [Actions (アクション)] を選択します。[Create Resource (リソースの作成)] を選択します。
3. [New Child Resource (新しい子リソース)] ペインの [Configure as proxy resource (プロキシリソースとして設定)] で、チェックマークアイコンを選択し、[Create Resource (リソースの作成)] を選択します。
4. /{proxy+} - ANY - Setup ページで、次の操作を行います。
- [Integration type (統合タイプ)] で、[Lambda Function Proxy (Lambda 関数 プロキシ)] を選択します。
- [Lambda Region (Lambda リージョン)] で関数のホストになる AWS リージョンを選択します。
- [Lambda Function (Lambda 関数)] には、関数の名前 MappingTemplateTutorial を入力します。
[Save] を選択します。[Add Permission to Lambda Function (Lambda 関数にアクセス許可を追加する)] ポップアップが表示されたら、[OK] を選択します。
7. / {proxy+} - ANY - メソッドの実行ページで、[Integration Request (統合リクエスト)] を選択します。
8. / {proxy+} - ANY - 統合リクエストページで、次の操作を行います。
- [Lambda Proxy integration (Lambda プロキシ統合の使用)] アイコンボックスのチェックを外します。[Switch to Lambda integration (Lambda 統合に切り替え)] ポップアップが表示されます。
- ポップアップで [OK] を選択します。 [Add Permission to Lambda Function (Lambda 関数にアクセス許可を追加する)] ポップアップが表示されます。ポップアップで [OK] を選択します。
- [Mapping Templates (マッピングテンプレート)] を展開します。
- [リクエストボディのパススルー] で[テンプレートが定義されていない場合 (推奨)]を選択します。
[Add mapping template (マッピングテンプレートの追加)] を選択します。Content-Type には、application/json と入力します。チェックマークアイコンを選択します。
9. [Generate template (テンプレートを生成)] ドロップダウンリストを選択し、[Method Request passthrough (メソッドリクエストパススルー)] を選択します。
10. マッピングテンプレートエディタで、次のように入力します。
## See http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html #set($allParams = $input.params()) { "method" : "$context.httpMethod", ## API method "authcontext" : "$context.authorizer.stringkey", ## Optional output from Lambda Authorizers ## passthrough body "body-json" : $input.json('$'), ## passthrough headers, querystrings and path parameters "params" : { #foreach($type in $allParams.keySet()) #set($params = $allParams.get($type)) "$type" : { #foreach($paramName in $params.keySet()) "$paramName" : "$util.escapeJavaScript($params.get($paramName))" #if($foreach.hasNext),#end #end } #if($foreach.hasNext),#end #end } }
11. [Save] を選択します。
12. [Method Execution (メソッドの実行)] を選択して、 / {proxy+} - ANY - メソッドの実行ページに戻ります。
13. 有効なメソッド応答を設定するには、[Method Response (メソッド応答)] を選択します。
14. /{proxy+} - ANY - メソッドレスポンスページで、[Add Response (レスポンスを追加)] を選択します。
15. HTTP ステータスコードには、200 と入力します。チェックマークアイコンを選択します。
16. [Actions (アクション)] を選択して API をステージにデプロイします。
新しいステージに API をデプロイします。
1. 「REST API をステージにデプロイする」の手順に従います。詳細については、「API Gateway コンソールを使用したステージのセットアップ」を参照してください。
2. [Stage Editor (ステージエディタ)] ペインで [URL の呼び出し] をクリップボードにコピーします。
REST API 呼び出し URL の例
https://1a2bc3d456.execute-api.us-east-1.amazonaws.com/stage
設定をテストする
すべてのデータが API によってバックエンド Lambda 関数または HTTP エンドポイントに渡されていることを確認するには、次の curl コマンドを実行します。
重要: https://restApiId.execute-api.region.amazonaws.com/stageName を API の 呼び出し URL に置き換えます。
curl -i --location --request POST 'https://1a2bc3d456.execute-api.us-east-1.amazonaws.com/stage/path1/path2?query1=querystring1&query2=querystring2' --header 'header1: value1' --header 'header2: value2' --header 'Content-Type: application/json' --data-raw '{"keybody":"valuebody"}'
コマンド出力には、バックエンド Lambda 関数がクライアントに受信したすべてのデータが含まれます。お使いの環境の出力メッセージを更新できます。
注記: Windows に curl をインストールするには、Git ウェブサイトでダウンロードを参照してください。curl の詳細については、curl プロジェクトのウェブサイトをご覧ください。
関連情報
チュートリアル: Lambda 非プロキシ統合を使用した API Gateway REST API の構築
カスタム Lambda 統合を使用して、API Gateway経由でカスタムヘッダーを Lambda 関数に渡すにはどうすればよいですか?
関連するコンテンツ
- 質問済み 1年前lg...
- 質問済み 10ヶ月前lg...
- 質問済み 7日前lg...
- 質問済み 5日前lg...