boto3使用AWS Lambda启动/停止RDS实例

时间:2017-06-24 15:37:05

标签: python amazon-web-services aws-lambda boto3

尝试在AWS Lambda上使用boto3启动和停止RDS实例时,我收到一个有趣的错误 - Car myCar = new Car(); Car yourCar;

即使是最简单的代码也会引发此错误,例如

'RDS' object has no attribute 'stop_db_instance': AttributeError

我正在使用python3.6运行时,因此根据this页面上提供的信息,boto3 1.4.4应该可用(我假设已经有正确的方法 - https://boto3.readthedocs.io/en/latest/reference/services/rds.html#RDS.Client.stop_db_instance

任何建议都值得赞赏!

4 个答案:

答案 0 :(得分:7)

我正在使用boto3==1.4.1botocore==1.4.64并在本地和lambda上收到与您相同的错误。

AWS Lambda必须使用旧的botocore库。我尝试使用boto3==1.4.4botocore==1.5.75并且它有效。

因此,决定上传我自己的zip包含最新的boto3和botocore(如上所述)并且它有效。

Creating a Deployment Package

更新

这是我的aws lambda代码段 -

 import botocore
 import boto3

 def lambda_handler(event, context):
    print("Version is {}".format(botocore.__version__))
    boto3.client('rds').stop_db_instance(DBInstanceIdentifier='myInstanceID')

output:版本为1.5.52

和1.5.52负责在rds模块中没有stop_db_instance属性。因此,手动创建具有最新版本的zip将起到作用。

由于

答案 1 :(得分:0)

我认为,您首先缺少在boto3中创建会话。 理想情况下,您的代码应该看起来像

假设你有一个配置文件aws_profile,设置或者你可以在这里从boto3文档创建一个会话:http://boto3.readthedocs.io/en/latest/reference/core/session.html

session = boto3.Session(profile_name=aws_profile)
rds_client = session.client('rds')
rds_client.stop_db_instance(DBInstanceIdentifier='myInstanceID')

答案 2 :(得分:0)

感谢您提供此解决方案!

我正在使用lambci / docker-lambda和Docker来测试我的lambda函数,就像真正的lambda一样,botocore目前已经过时了。要将botocore添加到lambda项目中:

pip install botocore -t /your/project/dir

如果您正在使用Mac OSX并使用brew安装pip,则-t将无效。执行lambda_function.py所在的以下命令,你就可以了。

docker run -v "$PWD":/localdir python:2.7-alpine pip install botocore -t /localdir

答案 3 :(得分:-1)

您是否尝试过明确声明rds:

import boto3

rds = boto3.client('rds')
rds.stop_db_instance(DBInstanceIdentifier='myInstanceID')

你还得到“RDS对象没有属性'stop_db_instance':AttributeError”错误。