【问题标题】:Access a service exposed by AWS ELB from AWS Lambda从 AWS Lambda 访问 AWS ELB 公开的服务
【发布时间】:2021-01-21 07:21:48
【问题描述】:

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

但是当我运行 lambda 时,我得到以下信息 - 原因:org.apache.commons.httpclient.ConnectTimeoutException:主机在 30000 毫秒的超时时间内没有接受连接 . . . 原因:java.net.SocketTimeoutException:连接超时

【问题讨论】:

  • 即使您进行了更改,听起来还是有一些东西阻止了从 Lambda 到 ELB 的通信。

标签: amazon-web-services aws-lambda amazon-elb amazon-vpc


【解决方案1】:

如果 Elastic Load Balancer 可公开访问,则只能通过公共 IP 地址访问。

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

更好的选择:

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

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

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

如果负载均衡器不需要从 Internet 访问,请将其更改为内部负载均衡器。然后,Lambda 函数将能够通过其私有 IP 地址与其通信。

【讨论】:

    猜你喜欢
    • 2019-07-28
    • 2016-04-22
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 2017-12-26
    • 2023-03-17
    • 1970-01-01
    • 2019-11-07
    相关资源
    最近更新 更多