【问题标题】:Pagination in boto3 ec2 describe instanceboto3 ec2中的分页描述实例
【发布时间】:2019-10-22 04:32:45
【问题描述】:

我在 boto3 中遇到了分页问题,​​并且没有在 aws 帐户中获取所有实例。

仅获得 50% 以下的实例(大约 2000 个,而有 4000 个)

下面是我的代码

import boto3

ec2 = boto3.client('ec2')

paginator = ec2.get_paginator('describe_instances')
response = paginator.paginate().build_full_result()

ec2_instance = response['Reservations']


for instance in ec2_instance:
    print(instance['Instances'][0]['InstanceId'])

【问题讨论】:

    标签: python python-2.7 amazon-web-services boto3


    【解决方案1】:

    describe_instances() 的回复是:

    {
        'Reservations': [
            {
                'Groups': [
                    {
                        'GroupName': 'string',
                        'GroupId': 'string'
                    },
                ],
                'Instances': [
                    {
                        'AmiLaunchIndex': 123,
     ...
    

    注意响应是:

    • 字典
    • Reservations 是一个列表,其中包含:
      • Instances,这是一个列表

    因此,代码确实需要循环遍历所有的 Reservations 和实例。

    目前,您的代码正在循环通过 Reservation(错误地调用它们实例),然后仅从该 Reservation 中检索第一个 ([0]) 实例。

    您可能需要这样的代码:

    for reservation in response['Reservations']:
      for instance in reservation['Instances']:
        print(instance['InstanceId'])
    

    【讨论】:

      【解决方案2】:

      如果您使用resource 而不是client,则无需担心分页问题。

      import boto3
      ec2 = boto3.resource('ec2')
      
      response = ec2.instances.all()
      for item in response:
          print(item.id)
      

      代码会给你所有的结果。

      【讨论】:

        【解决方案3】:

        您可以这样做,而不是调用 build_full_result():

        import boto3
        
        pag = boto3.client('ec2').get_paginator('describe_instances')
        
        for page in pag.paginate():
            for res in page['Reservations']:
                for inst in res['Instances']:
                    print( inst['InstanceId'])
        

        调用 build_full_result() 可能会破坏分页的目的,即管理内存并避免超时。

        【讨论】:

          猜你喜欢
          • 2016-11-01
          • 2017-03-16
          • 2018-06-18
          • 2018-09-26
          • 2022-11-03
          • 1970-01-01
          • 2017-07-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多