Amazon API Gateway
開発者ガイド

AWS CLI を使用して、プライベート統合で API Gateway API を設定する

Before creating an API with the private integration, you must have your VPC resource set up and a network load balancer created and configured with your VPC source as the target. If the requirements are not met, follow API Gateway のプライベート統合のNetwork Load Balancerを設定する to install the VPC resource, create a NLB, set the VPC resource as a target of the network load balancer.

For you to be able to create and manage a VpcLink, you must also have the appropriate permissions configured. For more information, see VPC リンクを作成する権限の付与.

注記

You only need the permissions to create a VpcLink in your API. You do not need the permissions to use the VpcLink.

network load balancerが作成されたら、その ARN に注意してください。プライベート統合のための VPC リンクを作成する必要があります。

AWS CLI を使用して、プライベート統合で API を設定するには

  1. 指定されたnetwork load balancerを対象とする VpcLink を作成します。

    この説明では、ARN のnetwork load balancerが arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/net/my-vpclink-test-nlb/1f8df693cd094a72 であることを前提としています。

    aws apigateway create-vpc-link \ --name my-test-vpc-link \ --target-arns arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/net/my-vpclink-test-nlb/1f8df693cd094a72 \ --endpoint-url https://apigateway.us-east-1.amazonaws.com \ --region us-east-1

    AWS 設定で us-east-1 をデフォルトのリージョンとして使用する場合、前述の入力で、 endpoint-urlregion パラメータは省略できます。

    上記のコマンドは、すぐに次の応答を返します。リクエストの受信を確認し、作成中の VpcLinkPENDING ステータスを表示します。

    { "status": "PENDING", "targetArns": [ "arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/net/my-vpclink-test-nlb/1f8df693cd094a72" ], "id": "gim7c3", "name": "my-test-vpc-link" }

    API Gateway が VpcLink の作成を完了するまでに 2〜4 分かかります。操作が正常に終了すると、statusAVAILABLE になります。次の CLI コマンドを呼び出すことで、これを確認できます。

    aws apigateway get-vpc-link --vpc-link-id gim7c3

    操作が失敗した場合、エラーメッセージを含む statusMessage と共に FAILED ステータスが表示されます。たとえば、すでに VPC エンドポイントに関連付けられているnetwork load balancerを使用して VpcLink を作成しようとすると、statusMessage プロパティで次のように表示されます。

    "NLB is already associated with another VPC Endpoint Service"

    VpcLink が正常に作成された後にのみ、API を作成し、VpcLink を通じて VPC リソースと統合する準備ができます。

    新しく作成された VpcLink (前述の出力の gim7c3) の id 値に注意してください。プライベート統合を設定する必要があります。

  2. API GatewayRestApi リソースを作成して API を設定します。

    aws apigateway create-rest-api --name 'My VPC Link Test'

    AWS 設定で指定されたデフォルトのリージョンを使用するために、endpoint-urlregion の入力パラメータを削除しました。

    返された結果の RestApiid 値に注意してください。この例では、それが、6j4m3244we であることを前提としています。メソッドと統合の設定を含め、API のさらなる操作を実行するには、この値が必要です。

    例として、ルートリソース (/) に GET メソッドのみを持つ API を作成し、そのメソッドを VpcLink と統合します。

  3. GET / メソッドを設定します。最初に、ルートリソース (/) の識別子を取得します。

    aws apigateway get-resources --rest-api-id 6j4m3244we

    出力では、/ パスの id 値に注意してください。この例では、それが、skpp60rab7 であることを前提としています。

    GET / の API メソッドに対するメソッドリクエストを設定します。

    aws apigateway put-method \ --rest-api-id 6j4m3244we \ --resource-id skpp60rab7 \ --http-method GET \ --authorization-type "NONE"

    IAM アクセス権限、Lambda オーソライザー、または Amazon Cognito ユーザープールを使用して、発信者を認証するには、authorization-typeAWS_IAMCUSTOMCOGNITO_USER_POOLS にそれぞれ設定します。

    VpcLink とのプロキシ統合を使用しない場合は、少なくとも 200 ステータスコードのメソッドレスポンスも設定する必要があります。ここでプロキシ統合を使用します。

  4. HTTP_PROXY 型のプライベート統合を設定し、次のように put-integration コマンドを呼び出します。

    aws apigateway put-integration \ --rest-api-id 6j4m3244we \ --resource-id skpp60rab7 \ --uri 'http://myApi.example.com' \ --http-method GET \ --type HTTP_PROXY \ --integration-http-method GET \ --connection-type VPC_LINK \ --connection-id gim7c3

    プライベート統合の場合は、connection-typeVPC_LINK に設定し、connection-idVpcLink の識別子、または、VpcLink ID を参照するステージ変数に設定する必要があります。uri パラメータは、エンドポイントへのルーティングリクエストには使用されませんが、Host ヘッダーの設定および証明書の検証に使用されます。

    成功すると、コマンドは以下の出力を返します。

    { "passthroughBehavior": "WHEN_NO_MATCH", "timeoutInMillis": 29000, "connectionId": "gim7c3", "uri": "http://myApi.example.com", "connectionType": "VPC_LINK", "httpMethod": "GET", "cacheNamespace": "skpp60rab7", "type": "HTTP_PROXY", "cacheKeyParameters": [] }

    ステージ変数を使用して、統合を作成するときに connectionId プロパティを設定します。

    aws apigateway put-integration \ --rest-api-id 6j4m3244we \ --resource-id skpp60rab7 \ --uri 'http://myApi.example.com' \ --http-method GET \ --type HTTP_PROXY \ --integration-http-method GET \ --connection-type VPC_LINK \ --connection-id "\${stageVariables.vpcLinkId}"

    ステージ変数を二重引用符 (${stageVariables.vpcLinkId}) にし、$ 文字をエスケープします。

    または、統合を更新して connectionId 値をステージ変数を使用してリセットすることもできます。

    aws apigateway update-integration \ --rest-api-id 6j4m3244we \ --resource-id skpp60rab7 \ --http-method GET \ --patch-operations '[{"op":"replace","path":"/connectionId","value":"${stageVariables.vpcLinkId}"}]'

    文字列化された JSON リストを patch-operations パラメータ値として使用するようにしてください。

    ステージ変数を使用して connectionId 値を設定すると、ステージ変数の値をリセットすることによって、同じ API を別の VpcLink と統合できるという利点があります。これは、API を別の VPC リンクに切り替えて、別のnetwork load balancerまたは別の VPC に移行する場合に便利です。

    プライベートプロキシ統合を使用していたため、API はデプロイメントおよびテスト実行をする準備が整っています。非プロキシ統合では、API を HTTP カスタム統合を使用して設定するのと同じように、メソッドのレスポンスと統合レスポンスも設定する必要があります。

  5. API をテストするには、API をデプロイします。これは、ステージ変数を VpcLink ID のプレースホルダーとして使用した場合に必要です。ステージ変数を使用して、API をデプロイするには、次のように create-deployment コマンドを呼び出します。

    aws apigateway create-deployment \ --rest-api-id 6j4m3244we \ --stage-name test \ --variables vpcLinkId=gim7c3

    ステージ変数を別の VpcLink ID (例: asf9d7) で更新するには、update-stage コマンドを呼び出します。

    aws apigateway update-stage \ --rest-api-id 6j4m3244we \ --stage-name test \ --patch-operations op=replace,path='/variables/vpcLinkId',value='asf9d7'

    API をテストするには、次の cURL コマンドを使用して API を呼び出します。

    curl -X GET https://6j4m3244we.beta.execute-api.us-east-1.amazonaws.com/test

    または、ウェブブラウザに API の invoke-URL を入力して結果を表示することもできます。

    VpcLink ID リテラルを使用して connection-id プロパティをハードコードする場合は、test-invoke-method を呼び出して、API をデプロイする前にその呼び出しをテストすることもできます。