为什么我的 API Gateway WebSocket 不发送配置了自定义域名的响应?

Ben*_*ada 7 amazon-web-services websocket aws-lambda aws-api-gateway

我已经使用 API Gateway 配置了一个 WebSocket API,并且正在尝试为其配置一个自定义域名。这是一个非常简单的 API,用于在连接的客户端之间发送消息,将连接 ID 存储在 DynamoDB 中。本质上,它类似于此处演示的示例:https : //aws.amazon.com/blogs/compute/annoucing-websocket-apis-in-amazon-api-gateway/

使用 AWS 生成的 URL 时一切正常,即 wss://.execute-api.us-west-2.amazonaws.com/。但是,当我按照AWS 的这些说明设置自定义区域域名时,我能够连接但无法在客户端之间发送消息。

我检查了我的 Lambda 函数的 Cloudwatch 日志,没有看到任何错误,并尝试使用我的 CloudFormation 模板启动一个全新的环境,但无济于事。

非常清楚,以下连接命令正确触发了我的 Lambda 函数,并使用 AWS 生成的 URL 和我在 Route 53 中自己的 URL 连接我的客户端。

wscat -c wss://<endpoint> <payload>
Run Code Online (Sandbox Code Playgroud)

以下命令向连接的客户端发送消息,使用 AWS 生成的 URL 但不是我自己的。

{ "message": "sendMessage", "toId": "193818", "data", "a random msg" }
Run Code Online (Sandbox Code Playgroud)

Bir*_*e94 5

我们遇到了同样的问题,但是 api 返回了一个错误:

botocore.errorfactory.ForbiddenException: An error occurred (ForbiddenException) when calling the PostToConnection operation: Forbidden
Run Code Online (Sandbox Code Playgroud)

我们结束了手动构建回调URL发送回的响应:{api_id}.execute-api.{region}.amazonaws.com

您可以从传递给 lambda 函数的请求上下文中获取 api id。

我们使用的python/boto3代码:

botocore.errorfactory.ForbiddenException: An error occurred (ForbiddenException) when calling the PostToConnection operation: Forbidden
Run Code Online (Sandbox Code Playgroud)