我有一个目标组,它在应用程序负载均衡器后面有两个EC2实例。我正在尝试构建一个lambda服务来监视负载均衡器监听器之外的EC2实例健康状态。 如果未启用VPC,则此lambda按预期工作。一旦我启用了VPC,下面的代码就会失败:
client = boto3.client("elbv2", region_name=default_region_name)
tg_res = client.describe_target_groups(Names=[self.name])
API describe_target_groups将一直停留在那里直到超时。
此VPC确实为所有IP启用了Internet访问和安全组入站/出站临时打开。
任何热门歌曲都将受到高度赞赏。
==========更新================== 从lambda日志开始,超时发生在:
Starting new HTTPS connection (1): elasticloadbalancing.us-west-2.amazonaws.com
我检查了网络设置,我确定这个VPC有NAT配置。
答案 0 :(得分:0)
您可能需要编辑aws lambda函数以添加VPC支持。 您可以阅读有关here
的更多信息答案 1 :(得分:0)
通过分配另外两个仅内部访问子网来解决此问题。 1)两个EC2实例落后于ALB。 EC2实例位于子网中,例如:west-2a-public,west-2b-public。这两个子网面向互联网,可以分配公共IP。 2)我将lambda服务分配到同一个子网:west-2a-public和west-2b-public但它不起作用。 3)然后我将lambda服务分配到另外两个子网:west-2a-private和west-2b-private。这两个子网确实有NAT,但没有公共IP分配。
我想路由器映射的问题,但我需要时间来弄清根本原因。到目前为止,它确实有效。
答案 2 :(得分:0)
我认为其原因如下:首先,您需要一个NAT网关来访问Internet,以实现Lambda功能,如下所述: https://aws.amazon.com/de/blogs/aws/new-access-resources-in-a-vpc-from-your-lambda-functions/
Internet访问–启用此功能后, 特定功能,该功能不再可以访问Internet 默认。如果您的功能需要这种类型的访问权限,您将 需要在VPC中设置托管NAT网关(请参阅“新建–托管” 适用于AWS的NAT(网络地址转换)网关 信息)或运行您自己的NAT(请参阅NAT实例)。
第二,如果您需要从Internet入站访问EC2实例或其他服务(例如负载均衡器),则还需要Internet网关。 但是,无法将Internet网关和NAT分配给一个子网。因此,您需要设置两个子网。
这里是描述正确的设置和配置的文章: https://marcelog.github.io/articles/aws_lambda_internet_vpc.html