笔者刚开始只是注意到了EC2下面的 class EC2.Volume(id) - A resource representing an Amazon Elastic Compute Cloud (EC2) Volume:
可参考:https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html#volume
但是此方法,必须要提供一个Volume的id , 大体过程如下(只是简要说明,仅举出部分代码):
#!/usr/bin/evn python3
# Author:QQ:5201351
#
session=boto3.Session(profile_name=AWS_Account_XXX,region_name='cn-north-1') ec2 = session.resource('ec2')
EbsVolume=ec2.Volume(VolumeId_XXX) volume_id=EbsVolume.volume_id Size=EbsVolume.size kms_key_id=EbsVolume.kms_key_id
但是这样的面临两个问题,一是必须要先得到卷ID,这里我们可以能过EC2的信息得到,
二是通过for循环得到所以EBS卷的信息,按上面的方式,性能太慢,笔者这里一个AWS账号,425个EBS卷,执行下来,都得20秒+
于是笔者想到早期的实现版本,基于aws cli 的方式 , aws ec2 describe-volumes --output json --profile XXXX
那按道理说也应该有boto3的实现方法,于是又仔细找了一次,果然发现也是有的,与EC2一样,也是在EC2的client下面
session=boto3.Session(profile_name=AWS_Account,region_name='cn-north-1') client = session.client('ec2') EC2Response = client.describe_instances() EbsResponse = client.describe_volumes()
其中都可以只连接一次,就能得到所有的EC2的信息及所有Ebs的信息,这样可以减少与远端的连接次数,整个代码执行下来,所花时间更短,于是记录于此
尊重别人的劳动成果 转载请务必注明出处:https://www.cnblogs.com/5201351/p/17015415.html
标签:AWS,volume,client,ec2,EBS,id,EC2 From: https://www.cnblogs.com/5201351/p/17015415.html