2017-06-24 34 views
5

साथ आरडीएस उदाहरण रोक boto3 शुरू करने और एडब्ल्यूएस लैम्ब्डा पर boto3 साथ आरडीएस उदाहरणों बंद करो, मैं एक दिलचस्प त्रुटि हो रही है की कोशिश कर रहा है - '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 जो मैं पहले से ही मान उचित तरीके है) ! त्रुटि:

import boto3 

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

आप अभी भी "AttributeError आरडीएस वस्तु कोई विशेषता 'stop_db_instance' है" मिलता है:

उत्तर

7

मैं boto3==1.4.1 और botocore==1.4.64 का उपयोग कर रहा था और स्थानीय रूप से और लैम्ब्डा दोनों के समान त्रुटि प्राप्त कर रहा था।

एडब्ल्यूएस लैम्ब्डा पुरानी बॉटोकोर लाइब्रेरी का उपयोग करना चाहिए। मैंने boto3==1.4.4 और botocore==1.5.75 का उपयोग करने का प्रयास किया और यह काम किया।

इसलिए, मैंने अपने स्वयं के ज़िप को नवीनतम boto3 और botocore (ऊपर वर्णित) अपलोड करने का निर्णय लिया और यह काम करता है।

Creating a Deployment Package

अद्यतन

यहाँ मेरी एडब्ल्यूएस लैम्ब्डा कोड स्निपेट है -

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 है नहीं के लिए जिम्मेदार है आरडीएस मॉड्यूल में stop_db_instance विशेषता है। तो, मैन्युअल रूप से नवीनतम संस्करण वाले ज़िप बनाने से चाल चल जाएगी।

धन्यवाद

+0

वर्क्स एक आकर्षण की तरह, जैसा कि आप ने लिखा है - botocore संस्करण समस्या थी !. धन्यवाद! –

-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') 
+0

यह कोड एडब्ल्यूएस लांबा में चलता है, इसलिए मैं जो कह सकता हूं उससे सत्र की आवश्यकता नहीं है। –

0

इस समाधान के लिए धन्यवाद!

मैं अपने लैम्ब्डा कार्यों का परीक्षण करने के लिए लैम्बसी/डॉकर-लैम्ब्डा का उपयोग कर रहा हूं, और वास्तविक लैम्ब्डा की तरह, बोटोकोर वर्तमान में पुराना है। अपने लैम्ब्डा परियोजना के लिए botocore जोड़ने के लिए:

pip install botocore -t /your/project/dir

मामले में आप पर मैक OSX काम कर रहे हैं और काढ़ा का उपयोग कर पिप स्थापित, -t काम नहीं करेगा। निम्न आदेश निष्पादित करें जहां आपका lambda_function.py स्थित है, और आप जाने के लिए अच्छे हैं।

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

संबंधित मुद्दे