从AWS Lambda访问AWS ELB公开的服务



我有一个用Java编写的AWS Lambda函数,它试图访问ELB公开的SOAP API服务。lambda函数和ELB都在默认的VPC中。我已经确保Lambda连接到默认VPC内的所有子网。lambda函数具有AWSLambdaVPCAccessExecutionRole访问权限。我已经将Lambda的SG添加到ELB SG的入站规则中。

但当我运行lambda时,我会得到以下内容-原因:org.apache.commons.httpclient.ConnectTimeoutException:主机在30000毫秒的超时内未接受连接。。。引起原因:java.net.SocketTimeoutException:连接超时

如果弹性负载均衡器是可公开访问的,那么它只能通过公共IP地址访问。

当AWS Lambda函数连接到VPC时,它只有一个私有IP地址。要访问Internet,它需要公共子网中的NAT网关或NAT实例将流量发送到Internet,然后返回到负载均衡器。如果这是您当前的配置,那么请注意,负载平衡器上的安全组可能无法识别Lambda函数的公共IP地址(由NAT分配(,因此负载均衡器上的边界内安全组不允许流量。您可以通过暂时允许所有流量进入负载均衡器来测试是否存在这种情况。

更好的选择:

选项1:不将Lambda函数附加到VPC

连接到VPC时,Lambda功能将连接到Internet。然后,它将能够通过公共IP地址访问负载均衡器。

选项2:使用内部负载均衡器

如果不需要从Internet访问负载平衡器,请将其更改为内部负载平衡器。Lambda功能将能够通过其私人IP地址与其进行通信。

相关内容

  • 没有找到相关文章

最新更新