我使用Websockets协议在API网关中有一个公共API。我将它的连接in存储在VPC中的一个数据存储区中,并试图编写一个Lambda来读取这些连接in,然后使用await apigwManagementApi.postToConnection({ ConnectionId: connectionId, Data: postData }).promise();将数据发送给每个连接in。这一次-- Lambda无法向API网关发送消息。因此,我尝试在execute-api:aws ec2 create-vpc-endpoint --vpc-id vpc-xyz --vpc-endpoint-type Interface --service-name com.amazonaws.eu-west-1.execute-api --subnet-ids subnet-xyz --security-group-id sg-xyz中添加一个网关。现在我被我打给ForbiddenException: Forbidden的电话扔给了apigwManagementApi。
我尝试过查看execute的文档,但是接口文档https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html指向https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-private-apis.html并导致创建私有API --我不想这样,我需要我的API公开。
我想我可能可以使用资源策略,通常是https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-resource-policies-examples.html,但是这是一个websocket,所以这些指令不能工作,因为它们没有资源策略选项。
发布于 2019-10-25 13:30:50
我在AWS上问到了这个问题,它不可能使用资源策略,并且会增加很多网络复杂性:https://awsdevelopers.slack.com/archives/C6LDW0BC3/p1570618074008500
来自该线程中的AWS:
嘿-当Lambda启用VPC时,它必须遵守VPC和子网的所有路由规则。
要访问任何公共资源,您将需要NAT GW、路由规则和SG设置来允许通信。
资源策略不起作用.
发布于 2020-01-06 09:42:48
我也遇到了同样的问题--这个文档解释了原因(https://aws.amazon.com/premiumsupport/knowledge-center/api-gateway-vpc-connections/)。
要修复它,您需要添加一个边缘优化的自定义域名,这需要以下内容:
https://stackoverflow.com/questions/58306086
复制相似问题