本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定具有私有整合的 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
-
建立目標設為所指定 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 需要 2-4 分鐘才能完成建立
VpcLink
。操作順利完成時,status
是AVAILABLE
。驗證方式是呼叫下列 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
-
透過建立 API Gateway
RestApi
資源來設定 API:aws apigateway create-rest-api --name 'My VPC Link Test'
請記下所傳回結果中
RestApi
的id
值。您需要此值才能對 API 執行進一步操作。基於說明,我們將建立根資源 (
GET
) 上只有/
方法的 API,並整合此方法與VpcLink
。 -
設定
GET /
方法。先取得根資源的識別符 (/
):aws apigateway get-resources --rest-api-id
abcdef123
在輸出中,記下
id
路徑的/
值。在此範例中,假設它是
。skpp60rab7
設定 API 方法
GET /
的方法請求:aws apigateway put-method \ --rest-api-id
abcdef123
\ --resource-idskpp60rab7
\ --http-method GET \ --authorization-type "NONE"如果您未搭配使用代理整合與
VpcLink
,則也必須至少設定200
狀態碼的方法回應。我們將在這裡使用代理整合。 -
設定
HTTP_PROXY
類型的私有整合,並呼叫put-integration
命令,如下所示:aws apigateway put-integration \ --rest-api-id
abcdef123
\ --resource-idskpp60rab7
\ --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-idgim7c3
針對私有整合,將
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-idskpp60rab7
\ --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-idskpp60rab7
\ --http-method GET \ --patch-operations '[{"op":"replace","path":"/connectionId","value":"${stageVariables.vpcLinkId}"}]'請務必使用字串化 JSON 清單做為
patch-operations
參數值。您可以透過重設
VpcLink
s 階段變數值,使用階段變數將 API 與其他 VPC 或 Network Load Balancer 整合。因為我們使用私有代理整合,所以 API 現在已準備好進行部署和測試執行。使用非代理整合,您也必須設定方法回應和整合回應,就像設定具有 HTTP 自訂整合的 API 一樣。
-
若要測試 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。