設定具有私有整合的 API Gateway API AWS CLI - Amazon API Gateway

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

設定具有私有整合的 API Gateway API AWS CLI

建立具有私有整合的 API 前,您必須設定 VPC 資源、使用 VPC 來源建立 Network Load Balancer,並將其設定為目標。如果需求皆不符合,請按照 設定 API Gateway 私有整合的 Network Load Balancer 來安裝 VPC 資源、建立 Network Load Balancer,並將 VPC 資源設定為 Network Load Balancer 的目標。

注意

Network Load Balancer 和 API 必須擁有相同 AWS 帳戶。

為了能夠建立和管理 VpcLink,您還必須設定適當的許可。如需詳細資訊,請參閱 授予建立 VPC 連結的許可

注意

您只需要在 API 中建立 VpcLink 的許可。您不需要使用 VpcLink 的許可。

建立 Network Load Balancer 之後,請記下其 ARN。您需要它才能建立私有整合的 VPC 連結。

若要使用私有整合設定 API AWS CLI
  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

    此命令的輸出會確認收到請求,並顯示建立中 VpcLinkPENDING 狀態。

    { "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 需要 2-4 分鐘才能完成建立 VpcLink。操作順利完成時,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 資源整合。

    請記下新建立 idVpcLink 值 (先前輸出中的 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

    設定 API 方法 GET / 的方法請求:

    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-type 設定為 VPC_LINK,並將 connection-id 設定為您 VpcLink 的識別符或參考您 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 現在已準備好進行部署和測試執行。使用非代理整合,您也必須設定方法回應和整合回應,就像設定具有 HTTP 自訂整合的 API 一樣。

  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

    或者,您可以在 Web 瀏覽器中輸入 API 的 invoke-URL 來檢視結果。

    當您硬式編碼具有 connection-id ID 常值的 VpcLink 屬性時,也可以呼叫 test-invoke-method 來測試在部署 API 之前呼叫 API。