Boto3 получает объем инстанса EC2

Я пытаюсь получить список идентификаторов томов экземпляра aws с помощью Boto 3, я получаю своего рода диспетчер коллекции, но я не знаю, как получить данные внутри.

import boto3
ec2 = boto3.resource('ec2', region_name='us-west-2')
instance = ec2.Instance('i-xxxxxx')
volumes = instance.volumes.all()
print volumes

Я получил такой ответ:

ec2.Instance.volumesCollection(ec2.Instance(id='i-xxxxxx'), ec2.Volume)

Как я использую ec2.Volume для получения идентификатора тома

Спасибо, Cfir.


person cfircoo    schedule 19.05.2016    source источник


Ответы (5)


Это просто итерация объектов, поэтому

for v in volumes:
    print(v.id)

если вы хотите получить список идентификаторов:

l = [v.id for v in volumes]
person polku    schedule 19.05.2016

Итератор возвращается ec2.Instance.volumesCollection

Вы можете извлечь идентификаторы томов с помощью такого кода

volume_id_list=[]
for item in instance.volumes.all():
  volume_id_list.append(item.id)

тогда volume_id_list [0] содержит первый диск, volume_id_list [1] - второй и т. д.

См. https://boto3.readthedocs.io/en/latest/reference/services/ec2.html#EC2.Instance.volumes.

person Vorsprung    schedule 19.05.2016

Используя клиент EC2:

ec2_client = boto3.client('ec2',
                    aws_access_key_id='XYZ',
                    aws_secret_access_key='XYZ',
                    region_name='us-east-1')
volumes = ec2_client.describe_instance_attribute(InstanceId='i-0b30bea4e05579def',
Attribute='blockDeviceMapping')
person Montaro    schedule 02.01.2017

например вы можете получить идентификатор и размер тома, просто перебирая его.

for volume in volumes:
    print (volume.id, volume.size)
person Maximilian Peters    schedule 19.05.2016
comment
Я получаю сообщение об ошибке при попытке перебрать тома - person Erik; 16.08.2017
comment
неважно .. я добавил вызов .all() и получил повторяемый объект, который вы цитировали - person Erik; 16.08.2017

Вы также можете использовать cli. Пример. Я пытаюсь получить список подключенных корневых томов.

aws ec2 describe-volumes --filters "Name=attachment.device,Values=*sda1" --query "Volumes[*].[VolumeId]"  --output text --profile=my_genius_aws_profile
person Impermanence    schedule 20.06.2020