我有一个Lambda函数,需要使用它的URL从SQS队列中读取消息.然后,它需要将该数据插入到在VPC内的服务器上运行的Cassandra.
我能够从我的Lambda函数访问Cassandra服务器,使用它的私有IP并正确配置安全组.
但是,我无法从SQS队列中读取消息.当我将Lambda函数的配置更改为No VPC,然后我能够从SQS队列中读取消息.但是,使用VPC设置时,它只会超时.
我怎么能克服这个?我已检查我的Lambda函数的安全组是否具有对所有IP地址的完全出站访问权限.
gar*_*aat 12
一些服务(例如S3)提供VPC端点来解决这个特定问题,但SQS不是其中之一.我认为这个问题的唯一真正解决方案是在你的VPC中运行NAT,这样来自Lambda函数的网络流量就可以路由到外部世界.
在2018年底,AWS宣布支持SQS终端节点,这些终端节点提供
连接到Amazon SQS,而无需Internet网关,网络地址转换(NAT)实例或VPN连接。
有一个教程,用于从Amazon Virtual Private Cloud发送消息到Amazon SQS队列
另请参阅SQS VPC端点文档以了解更多信息。
需要注意的重要一点是,如果要在Lambda VPC中访问SQS,还需要执行其他几件事:
endpoint_url为“ https://sqs.us-west-2.amazonaws.com ”当我运行lambda函数并访问VPC上的elasticache时,我遇到了同样的问题.虽然该功能配置为在VPC中运行,但我无法与任何其他服务(特别是对我的codedeploy)进行通信.
正如@garnaat所指出的,NAT似乎是解决没有VPC端点的服务的唯一方法.
就像你指出的那样,一旦我用路由表中的IGW替换了条目,我也遇到了麻烦,我无法通过SSH进入机器.似乎分离IGW分别使VPC对进入的流量(主要是)或来自或来自互联网的传出流量进行了匮乏.所以这就是我所做的,它对我有用:
在VPC中创建一个新的子网现在,当lambda运行时,确保lambda在此子网中运行.你可以像这样使用aws-cli来做到这一点:
aws lambda update-function-configuration --function-name your-function-name --vpc-config SubnetIds="subnet-id-of-created-subnet",SecurityGroupIds="sg-1","sg-2"
确保添加入站和出站流量规则适用于lambda函数的所有安全组.
接下来,转到VPC控制台中的Route Tables并创建新的路由表.
您可以在此处将NAT网关添加到目标.
最后转到新路由表中的Subnet Associations选项卡,并在那里添加新创建的子网.
多数民众赞成应该让它运作起来.请注意,请将此视为一种解决方法.我没有做太多的挖掘,而且对于如何在执行此操作时在内部解决问题我的想法非常有限.这可能不是一个理想的解决方案.
理想的解决方案似乎是事先设计VPC.使用子网隔离需要Internet访问的资源/实例(不包括私有和公共子网),并在需要的地方放置适当的网关(这样您以后可能不必为此目的创建单独的子网).谢谢
| 归档时间: |
|
| 查看次数: |
8602 次 |
| 最近记录: |