gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 21:30:47 25 4
gpt4 key购买 nike

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

使用 AWS 生成的 URL(即 wss://.execute-api.us-west-2.amazonaws.com/)时,一切正常。然而,当我关注 these instructions从 AWS 设置自定义区域域名,我能够连接,但无法在客户端之间发送消息。

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

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

wscat -c wss://<endpoint> <payload>

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

{ "message": "sendMessage", "toId": "193818", "data", "a random msg" }

最佳答案

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

botocore.errorfactory.ForbiddenException: An error occurred (ForbiddenException) when calling the PostToConnection operation: Forbidden

我们最终手动构建了用于发回响应的回调 URL:{api_id}.execute-api.{region}.amazonaws.com

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

我们使用的python/boto3代码:

stage = event['requestContext']['stage']
api_id = event['requestContext']['apiId']
region = 'us-east-1'

domain = f'{api_id}.execute-api.{region}.amazonaws.com'
client = boto3.client('apigatewaymanagementapi', endpoint_url=f'https://{domain}/{stage}')

client.post_to_connection(
Data='...',
ConnectionId='...'
)

关于amazon-web-services - 为什么我的 API Gateway WebSocket 不发送配置了自定义域名的响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55756269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com