AWS CLI を使用してプライベート統合で API Gateway API をセットアップする - Amazon API Gateway

AWS CLI を使用してプライベート統合で API Gateway API をセットアップする

プライベート統合を使用して API を作成する前に、VPC リソースをセットアップする必要があります。また、Network Load Balancer を作成し、VPC ソースをターゲットとして設定する必要があります。要件が満たされていない場合は、「API Gateway のプライベート統合の Network Load Balancer を設定する」に従って VPC リソースをインストールし、Network Load Balancer を作成して、Network Load Balancer のターゲットとして VPC リソースを設定します。

注記

Network Load Balancer と API は、同じ AWS アカウントによって所有されている必要があります。

VpcLink を作成および管理するには、適切なアクセス権限が設定されている必要もあります。詳細については、「VPC リンクを作成するためのアクセス許可の付与」を参照してください。

注記

API で VpcLink を作成するアクセス権限のみが必要です。VpcLink を使用するアクセス権限は必要ありません。

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

AWS CLI を使用して、プライベート統合で API を設定するには
  1. 指定された Network Load Balancer を対象とする VpcLink を作成します。

    aws apigateway create-vpc-link \ --name my-test-vpc-link \ --target-arns arn:aws:elasticloadbalancing:us-east-2:123456789012:loadbalancer/net/my-vpclink-test-nlb/1234567890abcdef

    このコマンドの出力は、リクエストの受信を確認し、作成中の VpcLink のステータス PENDING を示します。

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

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

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

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

    "NLB is already associated with another VPC Endpoint Service"

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

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

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

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

    返された結果の RestApiid 値に注意してください。API でさらにオペレーションを実行するには、この値が必要です。

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

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

    aws apigateway get-resources --rest-api-id abcdef123

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

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

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

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

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

    aws apigateway put-integration \ --rest-api-id abcdef123 \ --resource-id skpp60rab7 \ --uri 'http://my-vpclink-test-nlb-1234567890abcdef.us-east-2.amazonaws.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://my-vpclink-test-nlb-1234567890abcdef.us-east-2.amazonaws.com", "connectionType": "VPC_LINK", "httpMethod": "GET", "cacheNamespace": "skpp60rab7", "type": "HTTP_PROXY", "cacheKeyParameters": [] }

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

    aws apigateway put-integration \ --rest-api-id abcdef123 \ --resource-id skpp60rab7 \ --uri 'http://my-vpclink-test-nlb-1234567890abcdef.us-east-2.amazonaws.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 abcdef123 \ --resource-id skpp60rab7 \ --http-method GET \ --patch-operations '[{"op":"replace","path":"/connectionId","value":"${stageVariables.vpcLinkId}"}]'

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

    ステージ変数を使用して VpcLinks ステージ変数の値をリセットすることで、API を別の VPC または Network Load Balancer と統合できます。

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

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

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

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

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

    次のコマンドを使用して API を呼び出します。

    curl -X GET https://abcdef123.execute-api.us-east-2.amazonaws.com/test

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

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