【问题标题】:boto3 start/stop RDS instance with AWS Lambdaboto3 使用 AWS Lambda 启动/停止 RDS 实例
【发布时间】:2017-11-28 00:22:50
【问题描述】:

尝试在 AWS Lambda 上使用 boto3 启动和停止 RDS 实例时,我遇到了一个有趣的错误 - 'RDS' object has no attribute 'stop_db_instance': AttributeError

即使是最简单的代码也会抛出这个错误,例如

import boto3

def lambda_handler(event, context):    
    boto3.client('rds').stop_db_instance(DBInstanceIdentifier='myInstanceID')

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

感谢任何建议!

【问题讨论】:

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


    【解决方案1】:

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

    AWS Lambda 必须使用旧的 bo​​tocore 库。我尝试使用boto3==1.4.4botocore==1.5.75它成功了。

    因此,决定上传我自己的包含最新 boto3 和 botocore(如上所述)的 zip,它可以工作。

    Creating a Deployment Package

    更新

    这是我的 aws lambda 代码 sn-p -

     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 就可以了。

    谢谢

    【讨论】:

    • 就像你写的那样,就像一个魅力 - botocore 版本是问题!谢谢!
    【解决方案2】:

    我认为,您错过了首先在 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')
    

    【讨论】:

    • 此代码在 AWS Lamba 中运行,因此据我所知不需要会话。
    【解决方案3】:

    感谢您的解决方案!

    我正在使用带有 Docker 的 lambci/docker-lambda 来测试我的 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

    【讨论】:

      【解决方案4】:

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

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

      您是否仍然收到“RDS object has no attribute 'stop_db_instance': AttributeError”错误。

      【讨论】:

        猜你喜欢
        • 2015-08-26
        • 2020-01-22
        • 2021-07-13
        • 1970-01-01
        • 2021-05-27
        • 2016-08-20
        • 1970-01-01
        • 2023-03-07
        • 2019-08-03
        相关资源
        最近更新 更多