首页 > 其他分享 >关于使用boto3方式获取AWS-所有EC2-机型及属性时所遇到的结果返回不全的坑点及使用分布机制的解决方法

关于使用boto3方式获取AWS-所有EC2-机型及属性时所遇到的结果返回不全的坑点及使用分布机制的解决方法

时间:2023-01-01 15:34:25浏览次数:58  
标签:时所 返回 机型 坑点 describe AWS boto3 client

对于aws如果我们想获取现在提供的所有的机型及相关的属性,我们可以使用aws cli命令如下:

[qq5201351@localhost ~]$ aws ec2 describe-instance-types --query InstanceTypes[].InstanceType

可以发现截止2023-01-01,一共有259个实例机型,不要--query后面的部分,可以查看到每个实例机型详细的属性,如cpu,内存等信息

但是笔者是准备使用boto3的方式获取aws所有实例机型相关的信息,于是有了如下的核心代码:

session=boto3.Session(profile_name=AWS_Account_XXX,region_name='cn-north-1')
client = session.client('ec2')

EC2Response = client.describe_instances()
EBSResponse = client.describe_volumes()
EC2InstanceTypeResponse=client.describe_instance_types()

print(EC2InstanceTypeResponse)

但是却发现只有返回100个结果,也就是返回的实例机型不全,关键这个最坑的是没有任何提示和报错,不仔细核心,可能还真以为EC2的实例机型就100种

因为在后续代码中发现有没有机型查询不到,才猜到可能不全,对于没有在结果中的实例,笔者通过API文档发现也可以通过如下的方式得到

EC2InstanceTypeResponse=client.describe_instance_types(InstanceTypes=['t3.small','r3.large'])

但是这样分别查询效率必然会低很多,笔者又发现还有一个参数MaxResults=xx,可以指定返回的条数,于是笔者又将此值指定到很大,如99999

但是又返回报错:

botocore.exceptions.ClientError: An error occurred (InvalidMaxResults) when calling the DescribeInstanceTypes operation: Value ( 99999 ) for parameter maxResults is invalid. Expecting a value from ( 5 ) to  ( 100 ).

从这里可以看出就算指定返回的结果值条数,指定的范围也只能是 5~100 

那么如何才能返回全部的结果呢,按理说官网在提供API编程方法时不可能没有考虑到这个bug呢、于是又查阅了大量的官网资料才发现

有些返回,当数据过多时,默认没有使用分布的机制,我们需要引入.get_paginator分布机制才能得到全部的结果,注意参数不可以加(),在写法上稍稍调整一下即可

session=boto3.Session(profile_name=AWS_Account_XXX,region_name='cn-north-1')
client = session.client('ec2')

EC2Response = client.describe_instances()
EBSResponse = client.describe_volumes()
EC2InstanceTypeResponse=client.get_paginator("describe_instance_types")


for EC2InstanceTypeResponsePage in EC2InstanceTypeResponse.paginate():
    for EC2InstanceTypeItem in EC2InstanceTypeResponsePage['InstanceTypes']:
        EC2InstanceType=EC2InstanceTypeItem['InstanceType']
        print(EC2InstanceType)

这时我们执行时,就可以看到能返回所有的结果,其中每页默认依然是100条,一共分3次就能全部返回了~

终于完美的解决了这个问题,想起来,这个确实是AWS boto3 API的一个巨大的坑点,在client.describe_instance_types()说明中也没有明确地说明解决方法

最后还得大量其他页面才知道有分机的这个机制~,于是记录于此,希望能帮助到其他被这个分布机制坑到的朋友~

关于分布机制及详细的介绍可以参考:https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html

 

尊重别人的劳动成果 转载请务必注明出处:https://www.cnblogs.com/5201351/p/17018113.html

 

标签:时所,返回,机型,坑点,describe,AWS,boto3,client
From: https://www.cnblogs.com/5201351/p/17018113.html

相关文章

  • 关于AWS-EBS-volume信息的收集方法及性能对比
    笔者刚开始只是注意到了EC2下面的classEC2.Volume(id)- AresourcerepresentinganAmazonElasticComputeCloud(EC2)Volume:可参考:https://boto3.amazonaws.com......
  • AWS ssm 连接实例
    awsssmstart-session\--profilexxRole\--regioncn-northwest-1\--targeti-08d68744282284345\--document-nameAWS-StartPortForwardingSession\--pa......
  • AWS使用EC2降低DeepRacer的训练成本:DeepRacer-for-cloud的实践操作
    文章目录​​前言​​​​一、技术介绍​​​​二、实现途径​​​​三、效果展示​​​​AWSDeepRacer-for-Cloud安装训练脚本如下​​​​遇到的问题​​​​四、总结​......
  • AWS 上结合Router53构建思科远程访问VPN高可用架构
    AWS上结合Router53构建思科远程访问VPN高可用架构B站视频链接:​​https://www.bilibili.com/video/BV1xR4y1D7JN/?spm_id_from=333.999.0.0​​微信公众号:自刘地​​​一、......
  • 实验3:AWS实验-EC2操作
    云计算技术与应用    石家庄铁道大学信息学院 实验3:AWS实验-EC2操作本次实验属于验证型实验,通过本次实验学生将掌握以下内容:1、EC2免费实例创建方法;2、EC2实例......
  • Benchmark JuiceFS at AWS 2
    DeployedJuiceFStoself-managedK3sclusterwithmountOptions-cache-size=0todisableanycache.Uset3a.medium todothetest.SequentialRead512M1Job......
  • 使用MiniO Client(mc)连接AWS S3
    客户端名称:minioclientminio中文官网地址:http://docs.minio.org.cn/docs/master/minio-client-complete-guideminio英文官网地址:https://min.io/docs/minio/linux/index.ht......
  • Benchmark JuiceFS on AWS
    TriedJuiceFSv1.0.2,with PostgreSQLdatabase, whichisrunningatanothert3a.mediuminstancerunswithinsameVPCbutanotheravalibilityzone.Usedat2.......
  • AWS AppSync 添加 自定义 坐标查询 V2
    res.vtl#set($items=[])#foreach($entryin$context.result.hits.hits)#if(!$foreach.hasNext)#set($nextToken=$util.base64Encode($util.toJso......
  • Amazon AWS S3 操作手册
    InstalltheSDKTherecommendedwaytousetheAWSSDKforJavainyourprojectistoconsumeitfromMaven.Importthe ​​aws-java-sdk-bom​​ andspecifyth......