笔者刚开始只是注意到了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的信息,这样可以减少与远端的连接次数,整个代码执行下来,所花时间更短,仅2~3秒,于是记录于此
尊重别人的劳动成果 转载请务必注明出处:https://www.cnblogs.com/5201351/p/17015415.html
作者:一名卑微的IT民工
出处:https://www.cnblogs.com/5201351
本博客所有文章仅用于学习、研究和交流目的,欢迎非商业性质转载。
由于博主的水平不高,文章没有高度、深度和广度,只是凑字数,不足和错误之处在所难免,希望大家能够批评指出。
博主是利用读书、参考、引用、复制和粘贴等多种方式打造成自己的文章,请原谅博主成为一个卑微的IT民工!