Python 列出AWS帐户中的所有EBS卷

Python 列出AWS帐户中的所有EBS卷,python,amazon-web-services,aws-ebs,Python,Amazon Web Services,Aws Ebs,我正在尝试获取AWS帐户中所有EBS卷的列表。我使用的是Python 3和boto3版本1.10.34 我发现有一些建议,但都不管用 我将ec2_客户端设置为: 进口boto3 session=bot3.Sessionprofile\u name=aws\u账户,地区\u name='us-east-1' ec2_client=session.client'ec2' 如果我尝试volumes=ec2\u client.volumes.all,我将返回AttributeError:“ec2”对象没

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

我发现有一些建议,但都不管用

我将ec2_客户端设置为: 进口boto3 session=bot3.Sessionprofile\u name=aws\u账户,地区\u name='us-east-1' ec2_client=session.client'ec2'

如果我尝试volumes=ec2\u client.volumes.all,我将返回AttributeError:“ec2”对象没有属性“volumes”

如果我尝试volumes=ec2\u client.get\u all\u volumes,我将返回AttributeError:'ec2'对象没有属性'get\u all\u volumes'

如何正确执行此操作?

我建议您在需要描述所有卷时使用paginator。 如果您有1000多个卷,descripe_卷将不会描述所有卷,只描述前1000个卷

让我引用下面的参考文档

某些AWS操作返回的结果不完整,需要 后续请求以获得整个结果集。这个 发送后续请求以继续执行之前请求的过程 留下的请求称为分页。例如,列出对象 AmazonS3操作一次最多返回1000个对象,您可以 必须发送带有适当标记的后续请求,以便 检索下一页的结果

Paginators是boto3的一个特性,它作为对 对截断API的整个结果集进行迭代的过程 手术

参考:

请参阅下面的代码片段:

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

EC2客户端对象没有获取所有卷的方法请查看文档。应该有类似于描述ebs卷的内容。是的,谢谢。该方法实际上是描述体积。我找到了它,它工作了。谢谢你的演奏!:你的第一个电话在技术上应该是有效的,你还需要调查每个地区,因为它们都是独立的。