对AWS(boto3)呼叫使用强度

时间:2018-06-22 19:21:53

标签: python-3.x amazon-web-services error-handling boto3

在使用boto3调用AWS时,我遇到间歇性的RateLimitExceeded错误。在下面的示例中,由于速率限制,调用instance.all()或i.vpc.tags可能会失败:

 for i in instance.all():
     tags = i.vpc.tags

通常,我在自己的函数上使用韧度作为装饰器,但显然此调用无法完成,因为它来自导入的库。如果不在for循环中,则可以使用重试功能,如下所示:

r = tenacity.Retrying(
    reraise=True, 
    wait=tenacity.wait_random_exponential(multiplier=1, max=60), 
    stop=tenacity.stop_after_delay(130))

r.call(call_wrapped_in_tenacity())

那么,有没有一种方法可以包装这两个对AWS的调用,而又不为每个调用建立新的功能,同时又保持重试能力呢?

1 个答案:

答案 0 :(得分:0)

如果创建自己的函数超出范围,那么这是我发现解决此问题的唯一方法。基本上,当您创建boto3客户端时,您可以向其传递对boto配置中您自己的设置的引用,如下所示:

from botocore.config import Config
config = Config(retries=dict(max_attempts=20))
ec2_client = boto3.client('ec2', config=config)