我试图通过aws cli探索新的aws服务工作区,它似乎能够满足1个请求/秒。当我尝试同时多次击中时,它会抛出ThrottlingException。由于工作空间不在boto包中,所以我通过子进程调用在python中使用cli。
def describe_workspaces():
process=subprocess.Popen(access_endpoint.split(), stdout=subprocess.PIPE)
output=process.communicate()[0]
因此,如果我调用此函数> = 1 / sec,我将有ThrottlingException。怎么处理?并且会有多个用户同时调用此功能。 我正在考虑进行批处理和异步调用但是如何适应这种架构?
答案 0 :(得分:0)
您可以使用Boto3(这是Python中的AWS开发工具包)来解决此问题,方法是添加ThrottlingException异常处理并按下面的代码片段所示重试:
import boto3
from botocore.exceptions import ClientError
def describe_workspaces(tries=1):
try:
return boto3.client('workspaces').describe_workspaces()
except ClientError as exception_obj:
if exception_obj.response['Error']['Code'] == 'ThrottlingException':
if tries <= 3:
print("Throttling Exception Occured.")
print("Retrying.....")
print("Attempt No.: " + str(tries))
time.sleep(3)
return describe_workspaces(tries + 1)
else:
print("Attempted 3 Times But No Success.")
print("Raising Exception.....")
raise
else:
raise
您可以在函数外部创建一个AWS API客户端,并可以根据需要修改逻辑。
您也可以通过AWS CLI处理ThrottlingException,但是如果您编写一些Bash / Shell脚本而不是Python脚本,则更有意义。对于Python,建议使用Boto3。
有关更多详细信息,请查看:AWS Workspaces APIs