How to use bot3 pagination

BACKGROUND:

The AWS operation to display IAM users returns a maximum of 50 by default.

Counting the documents (links) below, I executed the following code and returned the full data set, setting "MaxItems" to 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:

If, for example, "MaxItems" was set to 10, what is the best method to execute the results? Further

I tested the following, but it only loops 2 iterations until “IsTruncated” == False and leads to “KeyError:“ Marker. ”I don’t know why this happens because I know that there are more than 200 results.

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

THANKS.

+4
1

( ) ** **, , ( ). MaxItems NextToken, MaxItems. , PageSize - , Marker/NextToken.

import sys
import boto3
iam = boto3.client("iam")
marker = None
while True:
    paginator = iam.get_paginator('list_users')
    response_iterator = paginator.paginate( 
        PaginationConfig={
            'PageSize': 10,
            'StartingToken': marker})
    for page in response_iterator:
        print("Next Page : {} ".format(page['IsTruncated']))
        u = page['Users']
        for user in u:
            print(user['UserName'])
    try:
        marker = page['Marker']
        print(marker)
    except KeyError:
        sys.exit()

, . MaxItems paginator "" . , MaxItems boto3.iam.list_users , .

boto3.iam.list_users, , Marker, . -, paginator boto3 class list_ *.

import sys
import boto3
iam = boto3.client("iam")
marker = None
while True:
    if marker:
        response_iterator = iam.list_users(
            MaxItems=10,
            Marker=marker
        )
    else:
        response_iterator = iam.list_users(
            MaxItems=10
        )
    print("Next Page : {} ".format(response_iterator['IsTruncated']))
    for user in response_iterator['Users']:
        print(user['UserName'])

    try:
        marker = response_iterator['Marker']
        print(marker)
    except KeyError:
        sys.exit()

, boto3 github. , build_full_result paginate(), .

+3

Source: https://habr.com/ru/post/1652813/


All Articles