我正在通过boto3组织从主AWS帐户获取所有子帐户。代码运行良好。我可以得到子帐户列表。但是如果您再次运行我的AWS Lambda函数,那么它将无法获取子帐户。
获取以下错误:
Error while getting AWS Accounts : An error occurred (TooManyRequestsException) when calling the ListAccounts operation: AWS Organizations can't complete your request because another request is already in progress. Try again later
20到30分钟后,我可以看到我的代码工作了一次又一次地引发上述异常。
我是由AWS网关AWS Lambda运行此代码的。
有什么想法吗?
代码:
import boto3
class Organizations(object):
"""AWS Organization"""
def __init__(self, access_key, secret_access_key, session_token=None):
self.client = boto3.client('organizations',
aws_access_key_id=access_key,
aws_secret_access_key=secret_access_key,
aws_session_token=session_token
)
def get_accounts(self, next_token=None, max_results=None):
"""Get Accounts List"""
if next_token and max_results:
result = self.client.list_accounts(NextToken=next_token,
MaxResults=max_results)
elif next_token:
result = self.client.list_accounts(NextToken=next_token)
elif max_results:
result = self.client.list_accounts(MaxResults=max_results)
else:
result = self.client.list_accounts()
return result
class AWSAccounts(object):
""" Return AWS Accounts information. """
def get_aws_accounts(self, access_key, secret_access_key, session_token):
""" Return List of AWS account Details."""
org_obj = Organizations(access_key=access_key,
secret_access_key=secret_access_key,
session_token=session_token)
aws_accounts = []
next_token = None
next_result = None
while True:
response = org_obj.get_accounts(next_token, next_result)
for account in response['Accounts']:
account_details = {"name": account["Name"],
"id": account["Id"],
"admin_role_name": self.account_role_name
}
aws_accounts.append(account_details)
if "NextToken" not in response:
break
next_token = response["NextToken"]
return aws_accounts
通过异常处理,我的代码正在成功运行。
捕获TooManyRequestsException
ClientError的异常exception,然后重试调用AWS列表\u帐户
API。
我们可以增加0.1秒的睡眠时间。
代码:
class AWSAccounts(object):
""" Return AWS Accounts information. """
def get_accounts(self, next_token=None, max_results=None):
"""Get Accounts List"""
# If Master AWS account contain more child accounts(150+) then
# Too-Many-Request Exception is raised by the AWS API(boto3).
# So to fix this issue, we are calling API again by Exception Handling.
result = None
while True:
try:
if next_token and max_results:
result = self.client.list_accounts(NextToken=next_token,
MaxResults=max_results)
elif next_token:
result = self.client.list_accounts(NextToken=next_token)
elif max_results:
result = self.client.list_accounts(MaxResults=max_results)
else:
result = self.client.list_accounts()
except botocore.exceptions.ClientError as err:
response = err.response
print("Failed to list accounts:", response)
if (response and response.get("Error", {}).get("Code") ==
"TooManyRequestsException"):
print("Continue for TooManyRequestsException exception.")
continue
break
return result
问题内容: 我正在开发一个项目,该项目需要解析一些受保护的网页中的数据。为了获得对这些页面的访问权限,我必须克服SAML身份验证形式(Shibboleth)。是否有人能够在Android(Java)中实现此标准?我已经读过这个线程:Android的SAML客户端实现? 但这并不能给我一个很好的解决方案。实际上,我需要 获取某些受保护网页的数据 以便对其进行解析,而不是让用户看到此类网页的内容。因此
问题内容: 有人知道iOS的Elasticsearch客户端库吗?如果它也是迅速写的,那将是一个好处。 elasticsearch的“客户端”部分显示了多个平台的多个库,但对于iOS没有任何显示,我觉得有人必须这样做吗? 干杯 问题答案: 我怀疑是否有人- 上次我检查时没有,并且有充分的理由。请记住,为了允许IOS客户端(或Android)使用客户端库连接到Elasticsearch,您必须打开集
我有一个连接到WebSocket服务器并从服务器接收消息的微服务。我想在这个应用程序中集成Sleuth,因为这是我的一组微服务的网关。但是当我连接到WebSocket服务器并开始接收消息时,我无法在日志中跟踪ID,spanid。我期待着这样的事情: 但我得到了: 我的代码如下: 我们的pom条目包括:
然后我使用: 这似乎无法为那些设置了该属性的客户机提供一个clusergroup。这对客户端节点不起作用吗?
问题内容: 我已经设置了Go rest api。并在登录时执行此操作: 为了检查会话,我有这样的东西: 如果我执行邮递员的请求,效果很好,但是当我从客户那里收到请求时,我会得到401。你们中的任何人是否经历过类似的事情?该商店是一个CookieStore。 我已经检查了ID,将sessionId变量替换为静态字符串。大猩猩会话使用大猩猩上下文注册一个新请求,当我这样做时,来自邮递员的请求不为空,但
在我的应用程序中,我为用户提供了一个选项,可以将其数据(一个db和一些音频文件)备份到应用程序文件夹中的Google Drive帐户。为此,用户必须在以下对话框中“为MyApp选择帐户”: 之后,我开始备份过程。 但是,如果用户点击该对话框之外的某个地方,它会消失并且不会建立连接-并且不会再次显示该对话框。 发生这种情况时,我如何提示系统再次向他/她显示该对话框?除此之外,我还尝试将GoogleA