我想将 connectionId 或自定义令牌作为我的 Amazon API Gateway WebSocket API 的标头传递给 VPC 链接集成。
简短描述
需要 connectionId 才能从后端为 WebSocket API 发送回调响应。默认情况下,WebSocket API 不会将 connectionId 传递给 VPC 链接集成。
要传递 connectionID 或自定义令牌,请使用 API Gateway 控制台和 AWS 命令行界面(AWS CLI),或使用 AWS CloudFormation。
解决方法
注意:如果在运行 AWS CLI 命令时收到错误,请参阅排查 AWS CLI 错误。此外,请确保您使用的是最新版本的 AWS CLI。
使用 API Gateway 控制台和 AWS CLI
完成以下步骤:
-
按照说明创建 REST API VPC 链接并将其与您的网络负载均衡器关联。
-
按照说明设置 WebSocket API 集成并创建 VPC 链接私有集成端点。
-
要检索集成 ID,请运行 AWS CLI 命令 get-integrations:
aws apigatewayv2 get-integrations --api-id <api-id>
-
使用以下格式创建并保存名为 integration.json 的 JSON 文件:
{
"ApiId": "<api-id>",
"IntegrationId": "<integration id retrieved from previous step>",
"RequestParameters": {
"integration.request.header.ConnectionId": "context.connectionId",
"integration.request.header.<header-key>": "route.request.body.<parameter>",
"integration.request.querystring.<querysting-key>": "'static value'"
}
}
-
要更新集成,请运行 AWS CLI 命令 update-integration,如下所示:
aws apigatewayv2 update-integration --cli-input-json file://integration.json
-
要应用这些更改,请按照说明部署 WebSocket API。
使用 CloudFormation
如果您使用 CloudFormation 来管理 API Gateway,则使用 AWS::ApiGatewayV2::Integration 资源配置类似于以下内容的请求参数:
Integration:
Type: AWS::ApiGatewayV2::Integration
Properties:
ApiId: !Ref websocket
ConnectionId: !Ref <VPC-Link-connection-id>
ConnectionType: VPC_LINK
IntegrationMethod: <HTTP method to backend >
IntegrationType: <HTTP_PROXY/HTTP>
IntegrationUri: "<endpoint-url>"
RequestParameters:
"integration.request.header.connectionId": "context.connectionId" #passing context variable 'connectionId' as ConnectionId header to backend
"integration.request.header.<header-key>": "route.request.body.<parameter>" #passing a request body parameter as header to backend
"integration.request.querystring.<querystring-key>": "'static value'" #passing static value as querystring to backend
您可以使用数据映射将路由请求中的数据映射到 VPC 链接后端集成。有关更多信息,请参阅将路由请求数据映射至集成请求参数。
相关信息
API Gateway 中针对 WebSocket API 的集成