1 回答

TA貢獻(xiàn)1863條經(jīng)驗(yàn) 獲得超2個(gè)贊
“我想獲取任何給定 EC2 實(shí)例的 EBS 卷及其大小的列表?!?/p>
這是使用該resource方法的代碼:
import boto3
ec2_resource = boto3.resource('ec2')
for instance in ec2_resource.instances.all():
for volume in instance.volumes.all():
print(instance.id, volume.id, volume.volume_type, volume.size)
并使用client方法:
import boto3
ec2_client = boto3.client('ec2')
response = ec2_client.describe_instances()
for reservation in response['Reservations']:
for instance in reservation['Instances']:
volumes = ec2_client.describe_volumes(
Filters=[{'Name':'attachment.instance-id','Values':[instance['InstanceId']]}]
)
for disk in volumes['Volumes']:
print(instance['InstanceId'], disk['VolumeId'], disk['VolumeType'], disk['Size'])
但是,這會(huì)導(dǎo)致多次 API 調(diào)用(每個(gè)實(shí)例DescribeInstances()一次調(diào)用)。DescribeVolumes()
此版本僅使用一次調(diào)用DescribeVolumes()并按 InstanceId 排序:
import boto3
ec2_resource = boto3.resource('ec2')
volumes = [(v.attachments[0]['InstanceId'], v.id, v.size)
for v in ec2_resource.volumes.filter(Filters=[{'Name':'attachment.status','Values':['attached']}])]
for volume in sorted(volumes):
print(volume[0], volume[1], volume[2])
下面是使用該方法的等效代碼client:
import boto3
ec2_client = boto3.client('ec2')
response = ec2_client.describe_volumes(Filters=[{'Name':'attachment.status','Values':['attached']}])
volumes = [(v['Attachments'][0]['InstanceId'], v['VolumeId'], v['Size']) for v in response['Volumes']]
for volume in sorted(volumes):
print(volume[0], volume[1], volume[2])
除了根據(jù)本網(wǎng)站服務(wù)條款授予的許可之外,本文的內(nèi)容還根據(jù) MIT-0 獲得許可。
添加回答
舉報(bào)