【问题标题】:Function ec2.snapshots.all not iterate boto3 lambda函数 ec2.snapshots.all 不迭代 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 所示,现在它可以工作了。

标签: python-2.7 amazon-web-services lambda boto3


【解决方案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,现在它可以工作了。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2020-11-12
  • 2019-11-14
  • 2021-05-27
  • 2020-01-28
  • 1970-01-01
  • 2020-11-20
  • 1970-01-01
  • 2022-11-03
相关资源
最近更新 更多