0

我正在尝试获取 AWS 账户中所有 EBS 卷的列表。我正在使用 Python 3 和 boto3 版本 1.10.34。

我发现这篇文章有一些建议,但它们都不起作用。

ec2_client这样设置: import boto3 session = boto3.Session(profile_name=aws_account,region_name='us-east-1') ec2_client = session.client('ec2')

如果我尝试volumes = ec2_client.volumes.all()我会回来AttributeError: 'EC2' object has no attribute 'volumes'

如果我尝试volumes = ec2_client.get_all_volumes()我会回来AttributeError: 'EC2' object has no attribute 'get_all_volumes'

我怎样才能正确地做到这一点?

4

1 回答 1

1

我建议您paginator在需要描述“所有”卷时使用。
如果您有超过 1000 个卷,describe_volumes()则不会描述所有卷,仅描述前 1000 个。

让我引用下面的参考文档。

某些 AWS 操作返回的结果不完整,需要后续请求才能获得整个结果集。发送后续请求以在前一个请求中断的地方继续的过程称为分页。例如,Amazon S3 的 list_objects 操作一次最多返回 1000 个对象,您必须使用适当的标记发送后续请求才能检索下一页结果。

分页器是 boto3 的一个特性,它作为对截断 API 操作的整个结果集的迭代过程的抽象。

参考:https ://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html

请参阅下面的片段:

def get_all_volumes(session):
    volumes = []

    ec2 = session.client("ec2")
    # Get all Volumes using paginator
    paginator = ec2.get_paginator("describe_volumes")
    page_iterator = paginator.paginate()
    for page in page_iterator:
        volumes.extend(page["Volumes"])
    return volumes
于 2020-02-16T13:47:37.717 回答