ThrottlingException:AWS api

时间:2015-05-07 14:38:23

标签: python amazon-web-services aws-cli

我试图通过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。怎么处理?并且会有多个用户同时调用此功能。 我正在考虑进行批处理和异步调用但是如何适应这种架构?

1 个答案:

答案 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