2017-03-07 51 views
0

我正在使用boto3来列出所有快照。 但是,当我使用函数ec2.snapshots.all(),然后尝试迭代for,它不工作。函数ec2.snapshots.all不迭代boto3 lambda

 
from __future__ import print_function 
from boto3 import resource 

REGION = "us-east-1" 

def lambda_handler(event, context): 
    ec2 = resource("ec2", region_name=REGION) 
    all_snapshots = ec2.snapshots.all() 
    for snapshot in all_snapshots: 
     print("SnapshotIteration") 

结果是下一个:

 
{ 
    "errorMessage": "2017-03-07T00:08:56.583Z 3faed105-02ca-11e7-b637-cfb921e4e3cc Task timed out after 3.00 seconds" 
} 
+1

你有几张快照?我想这太多了。你想做什么? – helloV

+0

我同意@helloV - 在命令行上运行“aws ec2 describe-snapshots”需要多长时间?我们有不少,大约需要15秒才能回来。为什么你的超时只有3秒? – stdunbar

+0

我不知道函数返回了所有的公共快照。我通过将超时时间增加到30秒进行了测试,但显然还不够。我应用了一个过滤器,指示我的所有者id,如John Rotenstein所示,现在它可以工作。 –

回答

0

我怀疑这是列出所有公开可用的快照,它可以是相当多的。最好将其限制为您所有者的快照。

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 
) 

这可能会有帮助。

+0

我不知道该函数返回所有公共快照。我应用了一个过滤器,指示我的拥有者ID,现在它可以工作。非常感谢你。 –