Я пытаюсь получить список томов EBS в EC2 с помощью python.
Вот мой код:
import boto3
import objectpath
aws_account = 'company-lab'
region = 'us-east-1'
session = boto3.Session(profile_name=aws_account, region_name=region)
ec2 = session.client("ec2")
instance_list = ec2.describe_instances()
for reservation in instance_list["Reservations"]:
for instance in reservation.get("Instances", []):
tree = objectpath.Tree(instance)
block_devices = set(tree.execute('$..BlockDeviceMappings[\'Ebs\'][\'VolumeId\']'))
block_devices = list(block_devices)
for volume_id in block_devices:
volume = ec2.Volume(volume_id)
Когда я пытаюсь это сделать, я получаю следующую ошибку:
Traceback (most recent call last):
File "<stdin>", line 7, in <module>
File "C:\Users\tdun0002\AppData\Local\Programs\Python\Python38-32\lib\site-packages\botocore\client.py", line 573, in __getattr__
raise AttributeError(
AttributeError: 'EC2' object has no attribute 'Volume'
Я пытаюсь использовать boto3 EC2 Volume атрибут. Я хотел бы получить список томов EBS и их размеров для любого конкретного экземпляра EC2. Как я могу это сделать?
ec2.Volume(volume_id)
использует метод resource, а не метод client. Это немного сбивает с толку, но в основном клиент EC2 эквивалентен необработанным вызовам API, сделанным к AWS, в то время как ресурс EC2 - это более питонический способ представления ресурсов boto3. Как правило, лучше придерживаться одного метода, чем переключаться между ними. - person John Rotenstein   schedule 29.09.2020