2017-06-24 20 views
5

Trong khi cố gắng để bắt đầu và ngừng RDS hợp với boto3 trên AWS Lambda, tôi nhận được một lỗi thú vị - 'RDS' object has no attribute 'stop_db_instance': AttributeErrorboto3 bắt đầu/dừng RDS dụ với AWS Lambda

Ngay cả các mã đơn giản ném lỗi này, ví dụ

import boto3 

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

Tôi đang sử dụng thời gian chạy python3.6, vì vậy theo thông tin có sẵn trên trang this, boto3 1.4.4 nên có sẵn (mà tôi giả định đã có phương pháp thích hợp - https://boto3.readthedocs.io/en/latest/reference/services/rds.html#RDS.Client.stop_db_instance)

Bất kỳ đề nghị được đánh giá cao !

Trả lời

7

Tôi đã sử dụng boto3==1.4.1botocore==1.4.64 và nhận lỗi tương tự như của bạn cả cục bộ lẫn trên lambda.

AWS Lambda phải đang sử dụng thư viện botocore cũ. Tôi đã thử sử dụng boto3==1.4.4botocore==1.5.75 và nó đã hoạt động.

Do đó, hãy quyết định tải lên mã zip của riêng tôi chứa boto3 và botocore mới nhất (đã đề cập ở trên) và nó hoạt động.

Creating a Deployment Package

CẬP NHẬT

Dưới đây là AWS đang lambda đoạn của tôi -

import botocore 
import boto3 

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

output: Phiên bản 1.5.52

và 1.5.52 có trách nhiệm không có thuộc tính stop_db_instance trong mô-đun rds. Vì vậy, bằng tay tạo zip có phiên bản mới nhất sẽ làm các trick.

Cảm ơn

+0

Làm việc như một nét duyên dáng, như bạn đã viết - phiên bản botocore là vấn đề !. Cảm ơn bạn! –

-1

Bạn đã cố gắng tuyên bố một cách rõ ràng rds:

import boto3 

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

Bạn vẫn nhận được "đối tượng RDS không có thuộc tính 'stop_db_instance': AttributeError" lỗi.

0

Tôi nghĩ, bạn đang thiếu tạo phiên trong boto3 trước tiên. Vì vậy, lý tưởng mã của bạn sẽ trông như thế

Giả sử bạn có một hồ sơ aws_profile, đặt hoặc khác bạn có thể tạo ra một phiên làm việc từ boto3 tài liệu ở đây: 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') 
+0

Mã này chạy trong AWS Lamba, vì vậy phiên không bắt buộc từ những gì tôi có thể nói. –

0

Cảm ơn cho giải pháp này!

Tôi đang sử dụng lambci/docker-lambda với Docker để kiểm tra các hàm lambda của tôi và giống như lambda thực, botocore hiện đã lỗi thời. Để thêm botocore cho dự án lambda của bạn:

pip install botocore -t /your/project/dir

Trong trường hợp bạn đang làm việc trên Mac OSX và cài đặt pip sử dụng bia, các -t sẽ không hoạt động. Thực hiện lệnh sau, nơi lambda_function.py của bạn nằm, và bạn tốt để đi.

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

Các vấn đề liên quan