我遇到了一个小问题,我真的很难理解它是如何工作的。我正在编写一个工具,它基本上执行描述组织来收集我们的 AWS 组织中的所有帐户。根据文档here https://boto3.readthedocs.io/en/latest/reference/services/organizations.html#Organizations.Client.list_accounts它说它会响应一个 json 帐户,在我的例子中将有数百个帐户。因此,我编写了一些非常简单的代码来将角色切换到我们的主帐户并进行调用:
import boto3
import uuid
import pprint
iam_client = boto3.client('iam')
sts_client = boto3.client('sts')
org_client = boto3.client('organizations')
print("Starting in account: %s" % sts_client.get_caller_identity().get('Account'))
assumedRoleObject = sts_client.assume_role(
RoleArn="arn:aws:iam::123456xxx:role/MsCrossAccountAccessRole",
RoleSessionName="MasterPayer"
)
credentials = assumedRoleObject['Credentials']
org_client = boto3.client(
'organizations',
aws_access_key_id = credentials['AccessKeyId'],
aws_secret_access_key = credentials['SecretAccessKey'],
aws_session_token = credentials['SessionToken'],
)
getListAccounts = org_client.list_accounts(
NextToken='string'
)
但是当我执行代码时,出现以下错误:
“botocore.errorfactory.InvalidInputException:调用 ListAccounts 操作时发生错误 (InvalidInputException):您为 nextToken 指定了无效值。您必须从先前调用 API 的响应中获取该值。”
我真的很困惑这意味着什么。我看到了 NextToken,并且可以在 AWS 文档中找到许多对它的引用,但我不知道如何实际使用它。比如,我需要用它做什么?
不要从字面上理解 boto3 示例(它们不是实际示例)。这是它的工作原理:
1) 当您第一次拨打电话时list_accounts
你不需要NextToken
,这么简单
getListAccounts = org_client.list_accounts()
2) 这将返回一个 JSON 响应,大致如下所示(这是保存在您的getListAccounts
多变的):
{
"Accounts": [<lots of accounts information>],
"NextToken": <some token>
}
请注意,NextToken
仅当您拥有多个帐户时才会返回list_accounts
调用可以返回,通常是这样100
(boto3 文档没有说明默认情况下有多少个)。如果所有帐户都在一次调用中返回,则不会NextToken
在回应中!
3)因此,当且仅当第一次调用中未返回所有帐户时,您现在想要返回更多帐户,并且必须使用NextToken
为此:
getListAccountsMore = org_client.list_accounts(NextToken=getListAccounts['NextToken'])
4)重复直到没有NextToken
不再在响应中返回(然后您检索了所有帐户)。
这就是 AWS 开发工具包在许多情况下处理分页的方式。您将看到的用法NextToken
其他服务客户也是如此。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)