Перечислите все тома EBS в учетной записи AWS - PullRequest
0 голосов
/ 16 февраля 2020

Я пытаюсь получить список всех томов EBS в учетной записи AWS. Я использую Python 3 и boto3 версии 1.10.34.

Я нашел этот пост с некоторыми предложениями, но ни один из них не работает.

Я настраиваю ec2_client как это: импорт boto3 * Я вернусь AttributeError: 'EC2' object has no attribute 'volumes'.

Если я попытаюсь volumes = ec2_client.get_all_volumes() Я вернусь AttributeError: 'EC2' object has no attribute 'get_all_volumes'.

Как я могу сделать это правильно?

1 Ответ

0 голосов
/ 16 февраля 2020

Я предлагаю вам использовать paginator, когда вам нужно описать " все " тома.
Если у вас более 1000 томов, describe_volumes() не будет описывать все тома, только первые 1000 .

Позвольте мне процитировать приведенную ниже справочную документацию.

Некоторые операции AWS возвращают результаты, которые являются неполными и требуют последующих запросов для получения всего набора результатов. Процесс отправки последующих запросов для продолжения, когда предыдущий запрос прерван, называется разбиением на страницы. Например, операция list_objects в Amazon S3 возвращает до 1000 объектов одновременно, и вы должны отправлять последующие запросы с соответствующим маркером, чтобы получить следующую страницу результатов. которые действуют как абстракция в процессе итерации по всему набору результатов усеченной операции 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
...