首页 文章

处理Boto3 Lambda中的EC2描述速率限制?

提问于
浏览
-1

我正在创建一个Lambda函数,目的是用他们的快照备份我的EC2实例 . 但是,我注意到阅读boto文档时,使用MaxResults / NextToken对ec2.describe_instances的调用是受限制的 . 如何将这两者结合起来,一次安全地遍历列表50?以下是我正在进行的工作:

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.

我不确定我是否正确或有效地使用MaxResults / NextToken参数 . 这是实现我想要的结果的最好方法吗?我是在正确的轨道上吗?

1 回答

  • 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)
    

相关问题