将AWS lambda的https发送到AWS弹性beanstalk服务器

时间:2016-09-11 15:01:57

标签: elastic-beanstalk aws-lambda amazon-elastic-beanstalk aws-security-group

我正在努力使AWS lambda能够向AWS弹性beanstalk服务发送HTTPS POST请求。 弹性beanstalk提供Web和Web服务,并且运行良好。 lambda正在使用AWS elasticache进行一些计算(运行良好),然后决定是否将HTTPS POST发送到beanstalk URL。

lambda是用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访问日志中看不到任何请求的迹象。

所以我的理解是安全组设置不正确。

我排除了弹性beanstalk阻止此类连接的选项 - lambda使用的是一个带有外部域名的url,可以在任何浏览器中使用,并且工作正常。

所以我得出的结论是lambda安全性阻止了这种连接。所以 - 我完全打开了lambda安全组,以及#34;所有流量"从任何地方 - 我仍然遇到这个问题。

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

您正在VPC中运行Lambda功能,这是访问ElastiCache服务器所必需的。但是,一旦将Lambda函数放入VPC,它就不再能够访问VPC之外的任何内容。您正试图通过Lambda函数无权访问的公共(Internet)地址访问Elastic Beanstalk服务器。因此,您将获得网络连接超时。

您需要配置Lambda函数以通过内部VPC地址访问服务。您需要配置Elastic Beanstalk安全组以允许来自Lambda安全组的访问(如果您还没有)。

或者,您可以向VPC添加NAT网关,这将使您的Lambda函数可以访问VPC之外的资源。