【问题标题】:Boto3 ec2.instancesCollection infinite loop in AWS LambdaAWS Lambda 中的 Boto3 ec2.instancesCollection 无限循环
【发布时间】:2021-10-23 18:54:20
【问题描述】:

我正在尝试获取我在 Lambda 上的 EC2 实例的所有私有 IP 地址的列表。我的问题是它在本地工作得很好,我得到了它们,但是当我在 Lambda 上运行它时它会在循环中停止并且它不会在 Cloud 中引发任何错误

import boto3
import botocore

def print_hello(event, context):
    session = boto3.Session(
        aws_access_key_id="id",
        aws_secret_access_key="key",
        region_name="region"
        )
    try:
        ec2 = session.resource('ec2')
        for instance in ec2.instances.all():
            print(instance.private_ip_address)
    except Exception as e:
        print(e)
    
    return {
        "statusCode": 200,
        "headers": {
            "Content-Type": "application/json"
        },
        "body": ""
    }

正如我所提到的,在本地,它工作得很好,我把它们都打印出来了。当我把它放在 Lambda 上时,它在 9 秒后超时,完全没有错误。我试过在代码中写一些打印,并认为它就在该行停止

for instance in ec2.instances.all():

我认为它可能会跳过它以防它为空,但它不会超过 for.我认为打印可能是空的,但我尝试使用 print(1) 并且它也不会在 for 内打印任何内容。我认为也许 ec2.instances.all() 不是可迭代的或某种奇怪的类型,但它应该是 ec2.instancesCollection(ec2.ServiceResource(), ec2.Instance) 。

CloudWatch 的输出如下:

START RequestId: abc Version: $LATEST
REPORT RequestId: abc   Duration: 9009.47 ms    Billed Duration: 9000 ms    Memory Size: 128 MB Max Memory Used: 34 MB  
Task timed out after 9.01 seconds

目前我不知道是什么原因导致它在本地工作但不能在 Lambda 上工作。

【问题讨论】:

  • lambda 函数是否配置为在 VPC 中运行?
  • @MarkB 你是救生员。它确实在 VPC 中

标签: python-3.x amazon-web-services amazon-ec2 aws-lambda boto3


【解决方案1】:

您需要将其从 VPC 中移除(如果它确实不需要 VPC 访问)或仅将其部署到具有到 NAT 网关的路由的 VPC 子网。

【讨论】:

    猜你喜欢
    • 2021-09-27
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多