如何将 connectionId 或自定义令牌作为 Amazon API Gateway WebSocket API 的标头传递给 VPC Link 集成?

2 分钟阅读
0

我想将 connectionId 或自定义令牌作为我的 Amazon API Gateway WebSocket API 的标头传递给 VPC Link 集成。我该如何操作?

简短描述

对于 WebSocket API,需要使用 connectionId 才能从后端发送回调响应。默认情况下,WebSocket API 不会将 ConnectionId 传递给 VPC 链接集成。

解决方法

使用 Amazon API Gateway 控制台和 AWS CLI

**注意:**如果您在运行 AWS 命令行界面(AWS CLI)命令时遇到错误,请确保您使用的是最新版本的 AWS CLI

1.    按照说明创建 REST API VPC 链接并将其与您的网络负载均衡器关联

2.    按照说明设置 WebSocket API 集成并创建 VPC 链接私有集成端点

3.    要检索集成 ID,请运行 AWS CLI 命令 get-integrations,如下所示:

aws apigatewayv2 get-integrations --api-id <api-id>

4.    使用以下格式创建并保存名为 integration.json 的 JSON 文件:

{
    "ApiId": "<api-id>",
    "IntegrationId": "<integration id retrieved from previous step>",
    "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.<querysting-key>": "'static value'" //passing static value as querystring to backend
    }
}

注意:在继续步骤 5 之前,请删除用正斜杠“//”标注的注释。

5.    要更新集成,请运行 AWS CLI 命令 update-integration,如下所示:

aws apigatewayv2 update-integration --cli-input-json file://integration.json

6.    要应用这些更改,请按照说明 部署 REST API

使用 AWS CloudFormation

如果您使用 CloudFormation 管理 Amazon 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 链接后端集成。有关更多信息,请参阅将路由请求数据映射到集成请求参数


相关信息

设置 WebSocket API 集成

AWS 官方
AWS 官方已更新 1 年前