本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Amazon CLI 设置具有私有集成的 API Gateway API
使用私有集成创建 API 之前,您必须已设置 VPC 资源,已创建 Network Load Balancer 并已使用 VPC 源作为目标进行配置。如果未满足要求,请按照为 API Gateway 私有集成设置 Network Load Balancer安装 VPC 资源,创建 Network Load Balancer,设置 VPC 资源作为网络负载均衡器的目标。
注意
Network Load Balancer 和 API 必须归同一个 Amazon 账户所有。
为了能够创建和管理 VpcLink
,您还必须具有适当的权限。有关更多信息,请参阅授予创建 VPC 链接的权限。
注意
您只需要具有在 API 中创建 VpcLink
的权限。您不需要具有使用 VpcLink
的权限。
创建 Network Load Balancer 之后,记录其 ARN。您需要它来为私有集成创建 VPC 链接。
使用 Amazon CLI 设置具有私有集成的 API
-
创建
VpcLink
定位到指定的 Network Load Balancer。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 资源集成。记录新创建
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 之前进行测试。