2017-03-07 3 views
0

Ich verwende Boto3, um alle Snapshots aufzulisten. Aber wenn ich die Funktion ec2.snapshots.all() verwende, und versuche dann mit einem for zu iterieren, funktioniert es nicht.Funktion ec2.snapshots.all nicht iterieren 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") 

Das Ergebnis ist die nächste:

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

Wie viele Schnappschüsse haben Sie? Ich denke, es ist viel zu viel. Was versuchst du zu machen? – helloV

+0

Ich stimme @helloV zu - wie lange dauert es, um "aws ec2 describe-snapshots" in der Befehlszeile für Sie auszuführen? Wir haben ziemlich viele und es hat ungefähr 15 Sekunden gedauert, bis das wieder kam. Warum ist Ihr Timeout nur 3 Sekunden? – stdunbar

+0

Ich wusste nicht, dass die Funktion alle öffentlichen Snapshots zurückgegeben hat. Ich hatte getestet, indem ich das Timeout auf 30 Sekunden erhöhte, aber offensichtlich nicht genug. Ich habe einen Filter angewendet, der meine Besitzer-ID angibt, wie von John Rotenstein angegeben, und jetzt funktioniert es. –

Antwort

0

Ich vermute, es ist die Auflistung aller öffentlich verfügbaren Snapshots, die ziemlich viel sein kann. Es ist besser, es auf Snapshots zu beschränken, für die Sie der Besitzer sind.

Die describe-snapshots()-Funktion benötigt einen OwnerIds-Parameter, der den Rückgabewert in den Scope-Down-Bereich bringen kann.

Hier ist ein Beispiel aus dem boto3 snapshot documentation das zeigt, wie auf dem snapshots Iterator einen Filter verwenden:

snapshot_iterator = ec2.snapshots.filter(
    DryRun=True|False, 
    SnapshotIds=[ 
     'string', 
    ], 
    OwnerIds=[ 
     'string', 
    ], 
    RestorableByUserIds=[ 
     'string', 
    ], 
    Filters=[ 
     { 
      'Name': 'string', 
      'Values': [ 
       'string', 
      ] 
     }, 
    ], 
    NextToken='string', 
    MaxResults=123 
) 

, die helfen könnten.

+0

Ich wusste nicht, dass die Funktion alle öffentlichen Snapshots zurückgegeben hat. Ich habe einen Filter angewendet, der meine Besitzer-ID anzeigt und jetzt funktioniert es. Vielen Dank. –

Verwandte Themen