我正在努力使AWS lambda向AWS弹性豆茎服务发送HTTPS POST请求。弹性豆茎提供web和web服务,并且工作得很好。lambda正在使用AWS elasticache进行一些计算(工作得很好),然后决定是否向beanstalk URL发送HTTPS POST。
用node.js
表示。POST尝试大约2分钟后,我得到这个超时:
[Error: connect ETIMEDOUT X.Y.Z.W:443] code: 'ETIMEDOUT', errno: 'ETIMEDOUT', syscall: 'connect', address: 'X.Y.Z.W', port: 443
我在弹性bean nginx访问日志中没有看到任何请求的指示。
所以我的理解是安全组没有正确设置。
我排除了弹性豆茎阻止这种连接的选项- lambda使用一个外部域名的url,可以从任何浏览器使用,并且工作良好。
所以我得到的结论是lambda安全性阻止了这种连接。所以,我把lambda安全组完全开放给来自任何地方的"所有流量",但我仍然遇到这个问题。
任何想法?
您正在VPC中运行Lambda函数,这需要访问您的ElastiCache服务器。然而,一旦你将Lambda函数放入VPC中,它就不再能够访问VPC之外的任何东西。您正在尝试通过公共(Internet)地址访问Elastic Beanstalk服务器,而Lambda函数无法访问该地址。因此,您将获得网络连接超时。
需要配置Lambda函数,通过VPC内部地址访问服务。您需要配置您的Elastic Beanstalk安全组,以允许来自Lambda安全组的访问(如果您还没有)。
或者,您可以在VPC中添加NAT网关,这将使您的Lambda函数可以访问VPC外的资源。