函数 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的主要内容,如果未能解决你的问题,请参考以下文章

为啥 string_view 构造函数不采用一对迭代器

为啥 c++ 顺序访问迭代器的函数签名不使用指针?

为啥压缩函数和可迭代的结果不起作用? [复制]

为啥不接受 Map 构造函数的可迭代元组数组?

3-22函数进阶——迭代器

函数装饰器迭代器内置方法总练习题