API Gateway での REST API の HTTP 統合
HTTP プロキシ統合または HTTP カスタム統合を使用して、API メソッドを HTTP エンドポイントに統合できます。
API Gateway は、次のエンドポイントポートをサポートします。80、443、および 1024-65535 です。
プロキシ統合では、セットアップは簡単です。コンテンツのエンコーディングやキャッシングが不要な場合は、バックエンド要件に従って HTTP メソッドと HTTP エンドポイント URI を設定するだけで済みます。
カスタム統合では、セットアップは複雑になります。プロキシ統合のセットアップ手順に加えて、受信リクエストデータがどのように統合リクエストにマッピングされるか、統合レスポンスデータの結果がメソッド応答にどのようにマッピングされるかを指定する必要があります。
API Gateway の HTTP プロキシ統合を設定する
HTTP プロキシ統合タイプを使用してプロキシリソースをセットアップするには、greedy パスパラメータ (/parent/{proxy+}
など) を使用して API リソースを作成し、このリソースを https://petstore-demo-endpoint.execute-api.com/petstore/{proxy}
メソッドで HTTP バックエンドのエンドポイント (ANY
など) と統合します。greedy パスパラメーターは、リソースパスの末尾にある必要があります。
非プロキシリソースと同様に、API Gateway コンソールを使用するか、OpenAPI 定義ファイルをインポートするか、API Gateway REST API を直接呼び出すことによって、プロキシリソースに HTTP プロキシ統合をセットアップできます。API Gateway コンソールを使用して HTTP 統合でプロキシリソースを設定する詳しい手順については、「チュートリアル: HTTP プロキシ統合を使用して REST API を作成する」を参照してください。
以下の OpenAPI 定義ファイルは、PetStore
この例では、キャッシュのキーは、プロキシリソースの method.request.path.proxy
パスパラメータで宣言されます。これにより、API Gateway コンソールを使用して API を作成するときのデフォルト設定です。API ベースパス (/test
、ステージに対応) はウェブサイトの PetStore ページ (/petstore
) にマッピングされます。単一の統合リクエストは、API の greedy パス変数とキャッチオールの ANY
メソッドを使用して、PetStore ウェブサイト全体をミラーリング処理します。以下の例に、このミラーリングを示しています。
-
ANY
をGET
、{proxy+}
をpets
に設定フロントエンドから開始されたメソッドリクエスト:
GET https://4z9giyi2c1.execute-api.us-west-2.amazonaws.com/test/pets HTTP/1.1
バックエンドに送信された統合リクエスト:
GET http://petstore-demo-endpoint.execute-api.com/petstore/pets HTTP/1.1
ANY
メソッドの実行時インスタンスとプロキシリソースの両方が有効です。呼び出しは200 OK
レスポンスと、バックエンドから返されたペットの最初のバッチが含まれるペイロードを返します。 -
ANY
をGET
、{proxy+}
をpets?type=dog
に設定GET https://4z9giyi2c1.execute-api.us-west-2.amazonaws.com/test/pets?type=dog HTTP/1.1
バックエンドに送信された統合リクエスト:
GET http://petstore-demo-endpoint.execute-api.com/petstore/pets?type=dog HTTP/1.1
ANY
メソッドの実行時インスタンスとプロキシリソースの両方が有効です。呼び出しは200 OK
レスポンスと、バックエンドから返された特定の犬の最初のバッチが含まれるペイロードを返します。 -
ANY
をGET
、{proxy+}
をpets/{petId}
に設定フロントエンドから開始されたメソッドリクエスト:
GET https://4z9giyi2c1.execute-api.us-west-2.amazonaws.com/test/pets/1 HTTP/1.1
バックエンドに送信された統合リクエスト:
GET http://petstore-demo-endpoint.execute-api.com/petstore/pets/1 HTTP/1.1
ANY
メソッドの実行時インスタンスとプロキシリソースの両方が有効です。呼び出しは200 OK
レスポンスと、バックエンドから返された特定のペットが含まれるペイロードを返します。 -
ANY
をPOST
、{proxy+}
をpets
に設定フロントエンドから開始されたメソッドリクエスト:
POST https://4z9giyi2c1.execute-api.us-west-2.amazonaws.com/test/pets HTTP/1.1 Content-Type: application/json Content-Length: ... { "type" : "dog", "price" : 1001.00 }
バックエンドに送信された統合リクエスト:
POST http://petstore-demo-endpoint.execute-api.com/petstore/pets HTTP/1.1 Content-Type: application/json Content-Length: ... { "type" : "dog", "price" : 1001.00 }
ANY
メソッドの実行時インスタンスとプロキシリソースの両方が有効です。呼び出しは200 OK
レスポンスと、バックエンドから返された新しく作成したペットが含まれるペイロードを返します。 -
ANY
をGET
、{proxy+}
をpets/cat
に設定フロントエンドから開始されたメソッドリクエスト:
GET https://4z9giyi2c1.execute-api.us-west-2.amazonaws.com/test/pets/cat
バックエンドに送信された統合リクエスト:
GET http://petstore-demo-endpoint.execute-api.com/petstore/pets/cat
プロキシリソースパスの実行時インスタンスが、バックエンドのエンドポイントに対応しておらず、結果としいて生成されるリクエストは無効です。その結果、
400 Bad Request
レスポンスが次のエラーメッセージとともに返されます。{ "errors": [ { "key": "Pet2.type", "message": "Missing required field" }, { "key": "Pet2.price", "message": "Missing required field" } ] }
-
ANY
をGET
、{proxy+}
をnull
に設定フロントエンドから開始されたメソッドリクエスト:
GET https://4z9giyi2c1.execute-api.us-west-2.amazonaws.com/test
バックエンドに送信された統合リクエスト:
GET http://petstore-demo-endpoint.execute-api.com/petstore/pets
対象のリソースはプロキシリソースの親ですが、
ANY
メソッドを実行時インスタンスは、そのリソースの API に定義されていません。その結果、このGET
リクエストは、403 Forbidden
レスポンスと、API Gateway から返されたMissing Authentication Token
エラーを返します。API が親リソース (ANY
) でGET
または/
メソッドを公開している場合、呼び出しからは404 Not Found
レスポンスと、バックエンドから返されたCannot GET /petstore
メッセージが返されます。
クライアントリクエストの場合、対象のエンドポイント URL が無効であるか、HTTP 動詞が有効であってもサポートされていない場合、バックエンドは 404 Not Found
レスポンスを返します。サポートされていない HTTP メソッドの場合は、403 Forbidden
レスポンスが返されます。
API Gateway の HTTP カスタム統合をセットアップする
HTTP カスタム統合により、API メソッドと API 統合の間を行き来するデータと行き来の方法をより詳細に制御できます。これにはデータマッピングを使用します。
メソッドリクエストのセットアップの一環として、Method リソースの requestParameters プロパティを設定します。これにより、クライアントからプロビジョニングされるメソッドリクエストパラメーターのうち、バックエンドにディスパッチされる前に統合リクエストパラメーターや該当する本文プロパティにマッピングされるものが宣言されます。次に、統合リクエストのセットアップの一環として、対応する Integration リソースで requestParameters プロパティを設定し、パラメータ間のマッピングを指定します。また、requestTemplates プロパティを設定し、サポートされているコンテンツタイプにつき 1 つずつ、マッピングテンプレートを指定します。マッピングテンプレートは、メソッドリクエストパラメーターや本文を統合リクエストボディにマッピングします。
同様に、メソッドレスポンスのセットアップの一環として、MethodResponse リソースで responseParameters プロパティを設定します。これにより、クライアントにディスパッチされるメソッドレスポンスパラメーターのうち、統合レスポンスパラメーターからまたはバックエンドから返された該当する本文プロパティからマッピングされるものが宣言されます。次に、統合レスポンスのセットアップの一環として、対応する IntegrationResponse リソースで responseParameters プロパティを設定し、パラメータからパラメータへのマッピングを指定します。また、responseTemplates マップを設定し、サポートされているコンテンツタイプごとにマッピングテンプレートを 1 つずつ指定します。マッピングテンプレートは、統合レスポンスパラメーターや統合レスポンス本文のプロパティをメソッドレスポンス本文にマッピングします。
マッピングテンプレートの設定の詳細については、「API Gateway での REST API のデータ変換」を参照してください。