使用 AWS CLI 设置具有私有集成的 API Gateway API
使用私有集成创建 API 之前,您必须已设置 VPC 资源,已创建网络负载均衡器并已使用 VPC 源作为目标进行配置。如果未满足要求,请按照为 API Gateway 私有集成设置网络负载均衡器安装 VPC 资源,创建网络负载均衡器,设置 VPC 资源作为网络负载均衡器的目标。
注意
Network Load Balancer 和 API 必须归同一个 AWS 账户所有。
为了能够创建和管理 VpcLink
,您还必须具有适当的权限。有关更多信息,请参阅 授予 API Gateway 创建 VPC 链接的权限。
注意
您只需要具有在 API 中创建 VpcLink
的权限。您不需要具有使用 VpcLink
的权限。
创建网络负载均衡器之后,记录其 ARN。您需要它来为私有集成创建 VPC 链接。
使用 AWS CLI 设置具有私有集成的 API
-
创建
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 端点关联的网络负载均衡器创建VpcLink
,在statusMessage
属性上将获得以下内容:"NLB is already associated with another VPC Endpoint Service"
在成功创建
VpcLink
之后,您可以创建 API 并通过VpcLink
将其与 VPC 资源集成。记录新创建
VpcLink
的id
值 (之前输出中的
)。设置私有集成时需要该值。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 或网络负载均衡器集成。由于我们使用了私有代理集成,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 的调用 URL 来查看结果。
当您使用
VpcLink
ID 文本硬编码connection-id
时,您还可以调用test-invoke-method
,在部署 API 之前进行测试。