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

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

次のチュートリアルでは、AWS CLI を使用して VPC リンクとプライベート統合を作成する方法を示します。以下の前提条件を満たす必要があります。

AWS CLI を使用して、プライベート統合で API を設定するには
  1. 次の create-vpc-link コマンドは、指定した 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 になります。これを検証するには、次の get-vpc-link コマンドを呼び出します。

    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 リソースと統合することができます。

    新しく作成した VpcLinkid 値をメモしておきます。この出力例では、gim7c3 です。プライベート統合を設定する際にそれが必要になります。

  2. 次の create-rest-api コマンドは、API Gateway RestApi リソースを作成します。

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

    返された結果の RestApiid 値と RestApirootResourceId 値をメモしておきます。API でさらにオペレーションを実行するには、この値が必要です。

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

  3. GET / メソッドを設定します。次の put-method コマンドを使用して、Idrest-api-id として入力し、rootResourceIdresource-id として入力します。

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

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

  4. GET / メソッドを作成したら、統合を設定します。プライベート統合の場合は、connection-id パラメータを使用して VpcLink ID を指定します。ステージ変数を使用するか、VpcLink ID を直接入力できます。uri パラメータは、エンドポイントへのルーティングリクエストには使用されませんが、Host ヘッダーの設定および証明書の検証に使用されます。

    Use the VPC link ID

    次の put-integration コマンドは、統合で VpcLink ID を直接使用します。

    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
    Use a stage variable

    次の put-integration コマンドは、ステージ変数を使用して VPC リンク ID を参照します。API をステージにデプロイするときは、VPC リンク ID を設定します。

    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}) を二重引用符で囲み、$ 文字をエスケープします。

    いつでも統合を更新して connection-id を変更することもできます。次の update-integration コマンドは、統合を更新する方法を示しています。

    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 パラメータ値として使用するようにしてください。

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

  5. ステージ変数を使用して connection-id を定義した場合は、API をデプロイしてテストする必要があります。次の create-deployment コマンドは、次のステージ変数を使用して API をデプロイする方法を示しています。

    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'

    VpcLink ID リテラルを使用して connection-id プロパティをハードコーディングする場合は、API をデプロイしてテストする必要はありません。test-invoke-method コマンドを使用して、デプロイ前に API をテストします。

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

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

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