对于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