为什么从python脚本和AWS CLI接收到的启动配置数量有所不同?

时间:2018-09-15 22:12:22

标签: python boto aws-cli

返回启动配置列表的python脚本如下(对于us-east-1区域):

autoscaling_connection = boto.ec2.autoscale.connect_to_region(region)
nlist = autoscaling_connection.get_all_launch_configurations()

由于某种原因,nlist的长度为50,即我们发现只有50个启动配置。 AWS CLI中的相同查询会产生174个结果:

aws autoscaling describe-launch-configurations --region us-east-1 | grep LaunchConfigurationName | wc

为什么偏差这么大?

1 个答案:

答案 0 :(得分:2)

因为get_all_launch_configurations的默认限制是每个调用返回50条记录。 boto2的功能似乎没有特别的文档,但是describe_launch_configurations中的类似功能boto3提到:

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/autoscaling.html#AutoScaling.Client.describe_launch_configurations

  

参数

     

MaxRecords (整数)-与此一起返回的最大项目数   呼叫。默认值为50,最大值为100。

     

NextToken (字符串)-下一组项目的令牌   返回。 (您从上一个呼叫中收到了此令牌。)

boto2的{​​{1}}在名称get_all_launch_configurations()max_records下支持相同的参数,请参见here

首先使用next_token进行通话,您将获得前50个(或最多100个)启动配置。在返回的数据中查找NextToken=""的值,并继续重复调用,直到返回的数据不包含NextToken为止。

类似这样的东西:

NextToken

希望有帮助:)

顺便说一句,如果您要编写新脚本,请考虑使用 boto3 编写它,因为这是当前和推荐的版本。

更新-boto2与boto3:

看起来 boto2 在返回值列表中未返回data = conn.get_all_launch_configurations() process_lc(data['LaunchConfigurations']) while 'NextToken' in data: data = conn.get_all_launch_configurations(next_token=data['NextToken']) process_lc(data['LaunchConfigurations']) 。使用 boto3 ,确实更好,更合理:)

这是一个有效的实际脚本:

NextToken

我故意设置#!/usr/bin/env python3 import boto3 def process_lcs(launch_configs): for lc in launch_configs: print(lc['LaunchConfigurationARN']) client = boto3.client('autoscaling') response = client.describe_launch_configurations(MaxRecords=1) process_lcs(response['LaunchConfigurations']) while 'NextToken' in response: response = client.describe_launch_configurations(MaxRecords=1, NextToken=response['NextToken']) process_lcs(response['LaunchConfigurations']) 进行测试,并在实际脚本中将其提高到50或100。