AWS:我是否可以让VPC内的Lambda函数访问公共WebSockets API网关? [英] AWS: Can I give a Lambda function inside a VPC access to a public Websockets API Gateway?
问题描述
我在API网关中有一个使用WebSockets协议的公共API。我将其连接ID存储在我的vPC内的一个数据存储中,并尝试编写一个Lambda来读取这些连接ID,然后使用await apigwManagementApi.postToConnection({ ConnectionId: connectionId, Data: postData }).promise();
将数据发送给它们中的每一个。超时-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
。现在我调用apigwManagementApi时抛出ForbiddenException: Forbidden
。
我尝试查看Execute-API Gateway的文档,但接口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 API,因此这些指令不起作用,因为它们没有资源策略选项。
推荐答案
我在AWS Slake上询问过这个问题,无法使用资源策略,会增加很多网络复杂性:https://awsdevelopers.slack.com/archives/C6LDW0BC3/p1570618074008500
来自该线程中的AWS开发人员:
您好-当Lambda启用VPC时,受您的VPC和子网的所有路由规则约束。
若要访问任何公共资源,您需要NAT GW、路由规则和SG设置以允许通信。
资源策略将不起作用。
这篇关于AWS:我是否可以让VPC内的Lambda函数访问公共WebSockets API网关?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!