プライベート統合の設定 - Amazon API Gateway

プライベート統合の設定

Application Load Balancer または Network Load Balancer とのプライベート統合を作成するには、HTTP プロキシ統合を作成し、使用する VPC リンク V2 を指定して、Network Load Balancer または Application Load Balancer の ARN を指定します。デフォルトでは、プライベート統合トラフィックは HTTP プロトコルを使用します。HTTPS を使用するには、https://example.com:443/test などの安全なサーバー名を含む uri を指定します。プライベート統合で REST API を作成する方法の完全なチュートリアルについては、「チュートリアル: プライベート統合を使用して REST API を作成する」を参照してください。

プライベート統合の作成

以下の手順は、VPC リンク V2 を使用してロードバランサーに接続するプライベート統合を作成する方法を示しています。

AWS マネジメントコンソール

プライベート統合を作成する方法のチュートリアルについては、「チュートリアル: プライベート統合を使用して REST API を作成する」を参照してください。

AWS CLI

次の put-integration コマンドは、VPC リンク V2 を使用してロードバランサーに接続するプライベート統合を作成します。

aws apigateway put-integration \ --rest-api-id abcdef123 \ --resource-id aaa000 \ --integration-target 'arn:aws:elasticloadbalancing:us-east-2:111122223333:loadbalancer/app/myLoadBalancerName/1234567891011' \ --uri 'https://example.com:443/path' \ --http-method GET \ --type HTTP_PROXY \ --integration-http-method GET \ --connection-type VPC_LINK \ --connection-id bbb111

接続 ID を直接指定する代わりに、ステージ変数を使用できます。API をステージにデプロイするときは、VPC リンク V2 ID を設定します。次の put-integration コマンドは、VPC リンク V2 ID のステージ変数を使用してプライベート統合を作成します。

aws apigateway put-integration \ --rest-api-id abcdef123 \ --resource-id aaa000 \ --integration-target 'arn:aws:elasticloadbalancing:us-east-2:111122223333:loadbalancer/app/myLoadBalancerName/1234567891011' \ --uri 'https://example.com:443/path' \ --http-method GET \ --type HTTP_PROXY \ --integration-http-method GET \ --connection-type VPC_LINK \ --connection-id "\${stageVariables.vpcLinkV2Id}"

ステージ変数表現 (${stageVariables.vpcLinkV2Id}) を二重引用符で囲み、$ 文字をエスケープします。

OpenAPI

API の OpenAPI ファイルをインポートすることで、プライベート統合を使用して API を設定することができます。これらの設定は、HTTP 統合を使用する API の OpenAPI 定義と似ていますが、次のような例外があります。

  • connectionType を明示的に VPC_LINK に設定する必要があります。

  • connectionIdVpcLinkV2 の ID または VpcLinkV2 の ID を参照するステージ変数に明示的に設定する必要があります。

  • プライベート統合の uri パラメータは、VPC 内の HTTP/HTTPS エンドポイントを指しますが、代わりに統合リクエストの Host ヘッダーを設定するために使用されます。

  • VPC 内の HTTPS エンドポイントとのプライベート統合における uri パラメータは、記載されているドメイン名を VPC エンドポイントにインストールされている証明書内のドメイン名と照合するために使用されます。

ステージ変数を使用して VpcLinkV2 ID を参照することができます。または、ID 値を connectionId に直接割り当てることもできます。

次の JSON 形式の OpenAPI ファイルは、ステージ変数 (${stageVariables.vpcLinkIdV2}) によって参照された VPC リンクが設定された API の例を示しています。

{ "swagger": "2.0", "info": { "version": "2017-11-17T04:40:23Z", "title": "MyApiWithVpcLinkV2" }, "host": "abcdef123.execute-api.us-west-2.amazonaws.com", "basePath": "/test", "schemes": [ "https" ], "paths": { "/": { "get": { "produces": [ "application/json" ], "responses": { "200": { "description": "200 response", "schema": { "$ref": "#/definitions/Empty" } } }, "x-amazon-apigateway-integration": { "responses": { "default": { "statusCode": "200" } }, "uri": "https://example.com:443/path", "passthroughBehavior": "when_no_match", "connectionType": "VPC_LINK", "connectionId": "${stageVariables.vpcLinkV2Id}", "integration-target": "arn:aws:elasticloadbalancing:us-east-2:111122223333:loadbalancer/app/myLoadBalancerName/1234567891011", "httpMethod": "GET", "type": "http_proxy" } } } }, "definitions": { "Empty": { "type": "object", "title": "Empty Schema" } } }

プライベート統合の更新

次の例では、プライベート統合の VPC リンク V2 を更新します。

AWS マネジメントコンソール
プライベート統合を更新するには
  1. https://console.aws.amazon.com/apigateway で API Gateway コンソールにサインインします。

  2. プライベート統合で REST API を選択します。

  3. プライベート統合を使用するリソースとメソッドを選択します。

  4. [統合リクエスト] タブの [統合リクエストの設定] で、[編集] を選択します。

  5. プライベート統合の設定を編集できます。現在 VPC リンク V1 を使用している場合は、VPC リンクを VPC リンク V2 に変更できます。

  6. [保存] を選択します。

  7. 変更を有効にするには、API を再デプロイします。

AWS CLI

次の update-integration コマンドは、VPC リンク V2 を使用するようにプライベート統合を更新します。

aws apigateway update-integration \ --rest-api-id a1b2c3d4e5 \ --resource-id a1b2c3 \ --http-method GET \ --patch-operations "[{\"op\":\"replace\",\"path\":\"/connectionId\",\"value\":\"pk0000\"}, {\"op\":\"replace\",\"path\":\"/uri\",\"value\":\"http://example.com\"}, {\"op\":\"replace\",\"path\":\"/integrationTarget\",\"value\":\"arn:aws:elasticloadbalancing:us-east-2:111122223333:loadbalancer/app/myLoadBalancerName/1234567891011\"}]"