博客园  :: 首页  :: 管理

关于AWS-EBS-volume信息的收集方法及性能对比

Posted on 2022-12-30 17:22  520_1351  阅读(43)  评论(0编辑  收藏  举报

笔者刚开始只是注意到了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