You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Websockets API自定义域名生产环境postToConnection调用异常

问题分析与解决方案

首先看报错里的资源ARN:arn:aws:execute-api:YYY/production/POST/@connections/@connections/LLDsmeF5ZicCJ8w%3D,这里出现了重复的@connections路径段,这是核心问题根源。

问题成因

当自定义域名将空路径映射到production阶段时,调用postToConnection如果错误地在请求路径中重复拼接了@connections(比如SDK配置不当,同时指定了stage和自定义域名),就会触发连锁问题:

  1. 初始的AccessDeniedException:实际请求的资源路径是production/POST/@connections/@connections/*,但你的IAM策略仅授权了production/POST/@connections/*,权限范围不匹配导致拒绝。
  2. 添加invoke权限后的NotFoundException:此时权限校验通过,但API Gateway找不到@connections/@connections/{connectionId}这个不存在的路由,返回404。

解决步骤

1. 修正SDK调用的Endpoint配置

使用自定义域名调用postToConnection时,不要在Endpoint中包含stage或@connections路径,SDK会自动拼接正确的路由。以Python boto3为例:

# 正确写法:仅使用自定义域名作为Endpoint,无额外后缀
client = boto3.client(
    'apigatewaymanagementapi',
    endpoint_url='https://your-custom-domain.com',
    region_name='your-region'
)

# 调用时只需传入ConnectionId和消息数据
client.post_to_connection(
    ConnectionId='LLDsmeF5ZicCJ8w=',
    Data=b'your-message-content'
)

如果之前在endpoint_url中添加了/production或/@connections,会导致路径重复,必须移除。

2. 验证IAM策略匹配

当前生产环境的IAM策略是正确的,只要请求路径修正为production/POST/@connections/{connectionId},权限就会自动匹配,无需额外添加execute-api:Invoke权限(execute-api:ManageConnections已覆盖postToConnection所需的所有权限)。

3. 确认自定义域名映射配置

在API Gateway控制台的自定义域名页面,检查生产环境的映射规则:

  • 路径应为(none)(空字符串)
  • 关联的阶段是production
  • 确保没有额外的路径前缀或重写规则导致路径变形

4. 直接HTTP测试排查

用curl直接发送请求,排除SDK配置问题:

curl -X POST https://your-custom-domain.com/@connections/LLDsmeF5ZicCJ8w= \
  -d '{"message": "test"}' \
  -H "Content-Type: application/json" \
  --aws-sigv4 "aws:amz:your-region:execute-api" \
  -u "AKIAYOURACCESSKEY:your-secret-key"

如果请求成功,说明SDK配置有误;如果失败,根据返回的错误信息进一步排查API Gateway的路由或映射配置。

内容的提问来源于stack exchange,提问作者DevelJoe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 00:59:54