用awsretry.backoff()装饰您的aws boto3调用。这将允许您的调用绕过aws最终的一致性错误。
gd-awsretr的Python项目详细描述
awsretry是一个python装饰器,可用于包装boto3函数调用。 这个函数是为了解决一些常见问题而构建的 使用AWS API时。
- 查询API请求率
- 最终一致性模型。
遇到时将重试的异常
- 超出请求限制
- 不可用
- 服务不可用
- 内部故障
- 内部错误
- ^ W+。未找到
此列表可以扩展。(http://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html)
快速启动
安装锥度。
$ pip install awsretry
我假设你知道如何设置BOTO3凭据,如果不知道,你可以阅读 这里的说明http://boto3.readthedocs.io/en/latest/guide/configuration.html
awsretry.backoff接受的关键字参数
- 尝试次数=放弃前尝试的次数。默认值为10
- 延迟=两次重试之间的初始延迟(秒)。默认值=3
- 退避=退避乘数,例如2的值将使每次重试的延迟加倍。默认值=1.1
- added_exceptions=要重试的其他异常,超出默认值。默认值=list()
示例
编写一个实现awsretry.backoff()的快速函数
#!/usr/bin/env pythonimportbotocoreimportboto3fromawsretryimportAWSRetry@AWSRetry.backoff()defget_instances():client=boto3.client('ec2')try:instances=client.describe_instances()returninstancesexceptbotocore.exceptions.ClientErrorase:raiseeinstances=get_instances()
编写一个将覆盖默认参数的快速函数。
#!/usr/bin/env pythonimportbotocoreimportboto3fromawsretryimportAWSRetry@AWSRetry.backoff(tries=20,delay=2,backoff=1.5,added_exceptions=['ConcurrentTagAccess'])defcreate_tags():client=boto3.client('ec2')try:resources=['1-12345678891234']tags=[{'Key':'service','Value':'web-app'}]instances=client.create_tags(Resources=resources,Tags=tags)exceptbotocore.exceptions.ClientErrorase:raiseecreate_tags()
开发
假设您安装了python和virtualenv,请设置 环境并安装所需的依赖项,而不是 上面定义的pip install awsretry:
$ git clone https://github.com/linuxdynasty/awsretry.git
$ cd awsretry
$ virtualenv venv
...
$ . venv/bin/activate
$ pip install -r requirements.txt
$ pip install -e .
运行测试
您可以使用实现nosetest的tox来运行测试,或者运行它们 直接用鼻子测试。
$ tox $ tox tests/test_awsretry.py $ tox -e py27,py36 tests/ $ nosetest