Почему существует разница в количестве конфигураций запуска, полученных из скрипта python и интерфейса командной строки AWS? - PullRequest
0 голосов
/ 16 сентября 2018

Python-скрипт, который возвращает список конфигураций запуска, выглядит следующим образом (для региона us-east-1):

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

По какой-то причине длина nlist равна 50, т.е. мы нашли только50 конфигураций запуска.Тот же запрос в CLI AWS дает 174 результата:

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

Почему такое большое отклонение?

1 Ответ

0 голосов
/ 16 сентября 2018

Поскольку 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 get_all_launch_configurations() под именами max_records и next_token, см. здесь .

Сначала позвоните с помощью NextToken="", и вы получите первые 50 (или до 100) конфигураций запуска. В возвращенных данных ищите значение NextToken и продолжайте повторять вызов, пока возвращенные данные не вернутся без NextToken.

Примерно так:

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 , поскольку это текущая и рекомендуемая версия.

Обновление - boto2 против boto3:

Похоже, boto2 не возвращает NextToken в списке возвращаемых значений. Используйте boto3 , это лучше и логичнее, правда:)

Вот настоящий скрипт, который работает:

#!/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'])

Я намеренно установил MaxRecords=1 для тестирования, увеличьте его до 50 или 100 в вашем реальном скрипте.

...