尝试在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)
任何建议都值得赞赏!
答案 0 :(得分:7)
我正在使用boto3==1.4.1
和botocore==1.4.64
并在本地和lambda上收到与您相同的错误。
AWS Lambda必须使用旧的botocore库。我尝试使用boto3==1.4.4
和botocore==1.5.75
并且它有效。
因此,决定上传我自己的zip包含最新的boto3和botocore(如上所述)并且它有效。
更新
这是我的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”错误。