函数 ec2.snapshots.all 不迭代 boto3 lambda
Posted
技术标签:
【中文标题】函数 ec2.snapshots.all 不迭代 boto3 lambda【英文标题】:Function ec2.snapshots.all not iterate boto3 lambda 【发布时间】:2017-07-27 01:13:09 【问题描述】:我正在使用 boto3 来列出所有快照。 但是当我使用函数 ec2.snapshots.all(),然后尝试使用 for 进行迭代时,它不起作用。
从 __future__ 导入 print_function from boto3 导入资源 地区 = “我们-东-1” def lambda_handler(事件,上下文): ec2 = 资源("ec2", region_name=REGION) all_snapshots = ec2.snapshots.all() 对于 all_snapshots 中的快照: 打印(“快照迭代”)结果是下一个:
“errorMessage”:“2017-03-07T00:08:56.583Z 3faed105-02ca-11e7-b637-cfb921e4e3cc 任务在 3.00 秒后超时”【问题讨论】:
你有多少快照?估计是太多了你想做什么? 我同意@helloV - 在命令行上为您运行“aws ec2 describe-snapshots”需要多长时间?我们有很多,大约需要 15 秒才能恢复。为什么你的超时时间只有 3 秒? 我不知道该函数返回了所有公共快照。我通过将超时时间增加到 30 秒进行了测试,但显然还不够。我应用了一个过滤器来指示我的所有者 ID,如 John Rotenstein 所示,现在它可以工作了。 【参考方案1】:我怀疑它列出了所有公开可用的快照,这可能很多。最好将其限制为您是所有者的快照。
describe-snapshots()
函数采用OwnerIds
参数,该参数可以缩小返回值的范围。
这是来自boto3 snapshot documentation 的示例,它展示了如何在snapshots
迭代器上使用过滤器:
snapshot_iterator = ec2.snapshots.filter(
DryRun=True|False,
SnapshotIds=[
'string',
],
OwnerIds=[
'string',
],
RestorableByUserIds=[
'string',
],
Filters=[
'Name': 'string',
'Values': [
'string',
]
,
],
NextToken='string',
MaxResults=123
)
这可能会有所帮助。
【讨论】:
我不知道该函数返回了所有公共快照。我应用了一个过滤器来指示我的所有者 ID,现在它可以工作了。非常感谢。以上是关于函数 ec2.snapshots.all 不迭代 boto3 lambda的主要内容,如果未能解决你的问题,请参考以下文章