Comment utiliser Boto3 la pagination
De FOND:
AWS opération à la liste des utilisateurs IAM retourne un max de 50 par défaut.
La lecture de la documentation (liens) ci-dessous, j'ai couru code suivant et a renvoyé un ensemble complet de données en définissant la "MaxItems" à 1000.
paginator = client.get_paginator('list_users')
response_iterator = paginator.paginate(
PaginationConfig={
'MaxItems': 1000,
'PageSize': 123})
for page in response_iterator:
u = page['Users']
for user in u:
print(user['UserName'])
http://boto3.readthedocs.io/en/latest/guide/paginators.html
https://boto3.readthedocs.io/en/latest/reference/services/iam.html#IAM.Paginator.ListUsers
QUESTION:
Si le "MaxItems" a été fixé à 10, par exemple, quelle serait la meilleure méthode pour faire une boucle dans les résultats? le
J'ai testé avec le suivant, mais il ne boucles de 2 itérations avant "IsTruncated' == False et des résultats dans "KeyError: 'Marqueur'". Pas sûr de savoir pourquoi cela se passe parce que je sais qu'il y a plus de 200 résultats.
marker = None
while True:
paginator = client.get_paginator('list_users')
response_iterator = paginator.paginate(
PaginationConfig={
'MaxItems': 10,
'StartingToken': marker})
#print(response_iterator)
for page in response_iterator:
u = page['Users']
for user in u:
print(user['UserName'])
print(page['IsTruncated'])
marker = page['Marker']
print(marker)
else:
break
Grâce.
PageSize
pour la paginationOriginalL'auteur user45097 | 2016-08-29
Vous devez vous connecter pour publier un commentaire.
(Réponse de réécriture)
**REMARQUE **, le paginator contient un bug qui ne correspond pas avec la documentation (ou vice versa).
MaxItems
ne pas retourner le Marqueur ou NextToken lorsque le total des éléments de dépasser MaxItems nombre. En effetPageSize
est celui qui contrôle le retour du Marqueur/NextToken indictator.Il n'est pas de votre faute, que votre code ne fonctionne pas.
MaxItems
dans le paginator semble devenir un "seuil" de l'indicateur. Ironiquement, leMaxItems
à l'intérieur d'origine boto3.iam.list_users fonctionne toujours comme mentionné.Si vous cochez boto3.iam.list_users, vous remarquerez que vous omettez
Marker
, sinon, vous devez mettre une valeur. Apparemment, paginator n'est PAS un wrapper pour tous boto3 classe list_* méthode.Vous pouvez suivre la question que j'ai déposé dans boto3 github. Selon le membre, vous pouvez appeler
build_full_result
après paginate(), qui montrent le désir de comportement.Pour chaque page renvoyée par "response_iterator = paginator.paginer" il y a un tas de données inclus dans le dict en dehors des "Utilisateurs" de la liste. Par exemple:
RequestId, HTTPSStatusCode, HTTPHeaders
et une chaîne de caractères appelée'Marker'
. Vous pouvez voir cela en de les déposer dansprint(page)
Je viens de réaliser l'erreur, list_user sont légèrement différents de ceux S3 list_object next_token choses . Je vais mettre à jour ma réponse.
Merci pour la réponse. Je vais suivre la question et de mise à jour. Des acclamations.
OriginalL'auteur mootmoot