gpt4 book ai didi

python-3.x - 如何使用 Boto3 分页

转载 作者:行者123 更新时间:2023-12-04 13:57:55 24 4
gpt4 key购买 nike

背景:
默认情况下,列出 IAM 用户的 AWS 操作最多返回 50 个。
阅读下面的文档(链接),我运行了以下代码并通过将“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
问题:
例如,如果“ MaxItems ”设置为 10,那么循环遍历结果的最佳方法是什么?
我用以下方法进行了测试,但它只在 'IsTruncated' == False 之前循环了 2 次迭代并导致“KeyError:'Marker'”。不知道为什么会这样,因为我知道有 200 多个结果。
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

最佳答案

(答案改写)
**注意**,分页器包含与文档不符的错误(反之亦然)。 MaxItems当总项目数超过 MaxItems 数时,不返回 Marker 或 NextToken。确实 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 = response_iterator['Marker']
print(marker)
except KeyError:
sys.exit()
您的代码不起作用不是您的错误。 MaxItems在分页器中似乎成了一个“阈值”指标。具有讽刺意味的是, MaxItems在原来的 boto3.iam.list_users 里面仍然如前所述工作。
如果您检查 boto3.iam.list_users,您会注意到您忽略了 Marker , 否则你必须输入一个值。显然, 分页器不是包装器对于所有 boto3 类 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()
您可以关注 the issue I filed in boto3 github .据成员(member)介绍,可以调用 build_full_result在 paginate() 之后,这将显示欲望行为。

关于python-3.x - 如何使用 Boto3 分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39201093/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com