2016-09-11 5 views
-1

Ich erstelle eine Lambda-Funktion mit der Absicht, meine EC2-Instanzen mit ihren Snapshots zu sichern. Allerdings habe ich bemerkt, dass ich die Boto-Dokumentation gelesen habe, der Aufruf von ec2.describe_instances ist rate-limitiert mit MaxResults/NextToken. Wie kann ich die beiden kombinieren, um sicher durch die Liste 50 gleichzeitig zu iterieren? Unten ist mein unfertige:Handhabung EC2 Beschreibung Geschwindigkeitsbegrenzung in Boto3 Lambda?

import boto3 
import datetime 
import time 

ec2 = boto3.client('ec2') 

def lambda_handler(event, context): 
    try: 
     print("Creating snapshots on " + str(datetime.datetime.today()) + ".") 
     maxResults = 50 
     schedulers = ec2.describe_instances(Filters=[{'Name':'tag:GL-sub-purpose', 'Values':[Schedule]}], MaxResults=maxResults) 
     nextToken = schedulers['NextToken'] 
     totalSchedulers = len(schedulers) 
     while totalSchedulers == maxResults: 
     schedulers = ec2.describe_instances(Filters=[{'Name':'tag:GL-sub-purpose', 'Values':[Schedule]}], MaxResults=maxResults, NextToken=nextToken) 
     nextToken = result['NextToken'] 
     totalSchedulers = len(schedulers) 
     print("Performing backup on " + str(len(schedulers)) + " schedules.") 
     successful = [] 
     failed  = [] 
     for s in schedulers: 
      #[...] More operations here, done 50 at a time. 

Ich bin nicht wirklich sicher, ob ich die MaxResults/Nexttoken Parameter richtig oder effizient hier bin mit. Ist dies der beste Weg, mein gewünschtes Ergebnis zu erreichen/bin ich auf dem richtigen Weg?

Antwort

2

Durchlaufen Sie einfach, bis NextToken nicht zurückgegeben wird. Hier ist ein Beispielcode, um einen Batch von Instanzen zu durchlaufen. Ändern Sie es nach Ihren Bedürfnissen.

import boto3 

ec2 = boto3.client('ec2') 
insts = ec2.describe_instances(MaxResults=50) 
while True: 
    # 
    # Process Instances (insts) 
    # 
    if 'NextToken' not in insts: break 
    next_token = insts['NextToken'] 
    insts = ec2.describe_instances(MaxResults=50, NextToken=next_token) 
Verwandte Themen