#python #pagination #boto3
#python #разбивка на страницы #boto3
Вопрос:
ec2_inventory = ssm.list_inventory_entries(
InstanceId=instance_id,
TypeName='AWS:Application',
NextToken=next_token)
try:
inventory_entry = ec2_inventory['Entries']
for entry in inventory_entry:
try:
application_name = entry['Name']
except:
application_name = ''
try:
application_version = entry['Version']
except:
application_version = ''
try:
application_type = entry['ApplicationType']
except:
application_type = ''
try:
installed_time = entry['InstalledTime']
except:
installed_time = ''
try:
architecture = entry['Architecture']
except:
architecture = ''
try:
application_publisher = entry['Publisher']
except:
application_publisher = ''
try:
release = entry['Release']
except:
release = ''
try:
application_url = entry['URL']
except:
application_url = ''
try:
package_id = entry['PackageId']
except:
package_id = ''
Этот метод list_inventory_entries
разбит на страницы для aws cli
, но Boto3
не поддерживает разбивку на страницы, и я не знаю, как получить следующую страницу. Ограничение страницы, похоже, равно 50. в cli
конце я получаю следующий токен, и метод имеет необязательный параметр NextToken
, но у меня пока не работает
Комментарии:
1. в то время как next_token не является None:
2. next_token = ec2_inventory.get(‘nextToken’, нет)
Ответ №1:
Согласно документации list_inventory_entries boto3, существует
- параметр maxResults, с помощью которого вы ограничиваете ответы
'NextToken': 'string'
в результате, который вы можете использовать в следующем вызове- Параметр nextToken (string), который является маркером для следующего набора возвращаемых элементов. Вы получили этот токен из предыдущего вызова и используете его в следующем вызове.
Комментарии:
1. maxResults используется для ограничения количества возвращаемых записей. Мне нужен полный набор. Я использую nextToken, но проблема заключается в том, что при первом вызове nextToken ни одна итерация не завершается с ошибкой. Можете ли вы указать, как выполнить итерацию, когда nextToken равен None. если вы видите мой предыдущий комментарий, я использую while для итерации, и после того, как все будет сделано, я сохраняю nextToken в nex_token
2. Чтобы прояснить ситуацию — пожалуйста, отредактируйте свой код и включите
while
иnext_token = ...
в код вопроса, а не в комментарии к вопросу. Пожалуйста, также удалите wholefor entry in inventory_entry:
, который является самой большой частью вашего кода, но не связан с проблемой,
Ответ №2:
Это код, который сработал
first_iteration = False
if next_token == None:
ec2_inventory = ssm.list_inventory_entries(InstanceId=instance_id, TypeName='AWS:Application')
next_token = "something"
while next_token is not None:
if first_iteration != False:
ec2_inventory = ssm.list_inventory_entries(InstanceId=instance_id, TypeName='AWS:Application', NextToken=next_token)
first_iteration = True
inventory_entry = ec2_inventory['Entries']
for entry in inventory_entry:
try:
application_name = entry['Name']
except:
application_name = ''
try:
next_token = ec2_inventory.get('NextToken')
except:
next_token = None