2016-09-11 16 views
-1

私は自分のスナップショットでEC2インスタンスをバックアップする目的でラムダ関数を作成しています。しかし、私はecotodescribe_instancesへの呼び出しがMaxResults/NextTokenでレート制限されていることをbotoのドキュメントを読むことに気付きました。一度にリスト50を安全に反復するために、これらの2つをどのように組み合わせることができますか?私が正しくまたは効率的にここMaxResults /は、NextTokenパラメータを使用している場合、私は本当にわからないんだけどEC2の処理レート制限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. 

:以下は、進行中の私の仕事です。これは私の望む結果を達成するための最良の方法ですか、私は正しい道ですか?

答えて

2

NextTokenまでの繰り返しは返されません。インスタンスのバッチを反復処理するためのサンプルコードを示します。ニーズに合わせて変更してください。

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)