【发布时间】: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