2017-03-07 77 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,現在它可以工作。非常感謝你。 –