बूट कर रहा है I EC2 उदाहरणों को सेट करने के लिए बूटस्ट्रैप स्क्रिप्ट बनाने का प्रयास कर रहा हूं। मैं बूट के दौरान एस 3 बाल्टी से स्वचालित रूप से स्रोत कोड डाउनलोड करना चाहता हूं। मैंने हाल ही में अपने ईसी 2 उदाहरणों में आईएएम भूमिका नियुक्त करने के बारे में पढ़ा है ताकि वे मेटाडेटा सर्वर से अस्थायी प्रमाण-पत्र प्राप्त कर सकें। इस तरह, मुझे अपनी छवि पर एडब्ल्यूएस क्रेडेंशियल स्टोर करने की ज़रूरत नहीं है या बूट के दौरान उन्हें पास नहीं करना है।एडब्ल्यूएस - boto.connect_s3() रिपोर्टिंग "कोई हैंडलर प्रमाणित करने के लिए तैयार नहीं था" जबकि EC2 इंस्टेंस
मैंने एक पायथन लिपि लिखा है जो बीओ का उपयोग करके एस 3 से कनेक्ट करके डाउनलोड करता है। मैंने उस स्क्रिप्ट को init.d config में जोड़ दिया। रिमोट एसएसएच सत्र में, जब मैं इसे मैन्युअल रूप से चलाता हूं, तो मेरी स्क्रिप्ट ठीक काम करती है, लेकिन किसी कारण से यह बूट होने के दौरान निष्पादित होने पर विफल हो जाती है।
मेरे कोड निम्नलिखित तरीके से Boto उपयोग करता है:
import boto
try:
conn = boto.connect_s3()
except:
# log error
exit(-1)
सिद्धांत रूप में, Boto 2.6 के साथ, कि कोड वर्तमान EC2 उदाहरण के IAM भूमिका के आधार पर अस्थायी सुरक्षा क्रेडेंशियल प्राप्त करने के लिए एडब्ल्यूएस मेटाडाटा सर्वर से संपर्क करना चाहिए ।
किसी कारण के लिए, जबकि बूटिंग, boto.connect_s3() एक boto.exception.NoAuthHandlerFound को जन्म देती है: "।। कोई हैंडलर आपके क्रेडेंशियल्स की जाँच करें प्रमाणित करने के लिए तैयार 1 संचालकों जाँच कर रहे थे [ 'HmacAuthV1Handler'] था।"
मुझे get_auth_handler फ़ंक्शन में त्रुटि को boto.auth module पर पता चला है (यह अपवाद केवल एक ही स्थान उठाया गया है)। जब HmacAuthV1 हैंडलर ऑब्जेक्ट बनाया जाता है, तो HmacKeys बेस क्लास कन्स्ट्रक्टर विफल रहता है यदि एक्सेस कुंजी आईडी या गुप्त कुंजी कोई नहीं है। दरअसल, मेरी लिपि में थोड़ी सी प्रयोग के बाद, मैंने पाया कि यदि मैं स्पष्ट रूप से boto.provider.Provider class का नाम = 'aws' और कोई प्रमाण-पत्र नहीं देता हूं, तो प्रदाता इंस्टेंस का access_key/secret_key फ़ील्ड दोनों ही नहीं रहते हैं (लेकिन केवल बूट के दौरान; यदि मैं मैन्युअल रूप से बाद में स्क्रिप्ट चलाता हूं तो क्रेडेंशियल्स प्रारंभ किए जाते हैं)। फिर भी मुझे इस तथ्य के बारे में पता है कि मेटाडेटा सर्वर अपराधी नहीं है (वास्तव में बूट के दौरान भी अपेक्षित प्रमाण-पत्र प्राप्त करता है)।
तो ... क्या गलत हो सकता है? क्या यह बोटो में कोई मुद्दा हो सकता है? एक विन्यास मुद्दा? या मैं बस कुछ गलत कर रहा हूँ? बिल्ली, क्या यह हो सकता है कि उबंटू उस तरह के संचालन के लिए "उचित स्थिति" में नहीं है, जबकि यह बूट हो रहा है?
--- संपादित करें ---
धन्यवाद garnaat करने के लिए नीचे दिए गए जवाब देने, मैंने पाया कि समस्या यह है कि अजगर पथ (sys.path) मेरे दूरस्थ SSH सत्र के दौरान की तुलना में बूट के दौरान पूरी तरह से अलग है।
जबकि बूटिंग:
['/home/bitnami',
'/usr/lib/python2.7',
'/usr/lib/python2.7/plat-linux2',
'/usr/lib/python2.7/lib-tk',
'/usr/lib/python2.7/lib-old',
'/usr/lib/python2.7/lib-dynload',
'/usr/local/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages']
और जब यह मेरे SSH सत्र से चल:
['/home/bitnami',
'/opt/bitnami/python/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg',
'/opt/bitnami/python/lib/python2.7/site-packages/MySQL_python-1.2.3c1-py2.7-linux-i686.egg',
'/opt/bitnami/python/lib/python2.7/site-packages/html5lib-0.90-py2.7.egg',
'/opt/bitnami/python/lib/python2.7/site-packages/boto-2.6.0-py2.7.egg',
'/opt/bitnami/python/lib/python2.7/site-packages/pip-1.2.1-py2.7.egg',
'/opt/bitnami/apps/django/lib/python2.7/site-packages',
'/home/bitnami/deploy',
'/opt/bitnami/python/lib/python27.zip',
'/opt/bitnami/python/lib/python2.7',
'/opt/bitnami/python/lib/python2.7/plat-linux2',
'/opt/bitnami/python/lib/python2.7/lib-tk',
'/opt/bitnami/python/lib/python2.7/lib-old',
'/opt/bitnami/python/lib/python2.7/lib-dynload',
'/opt/bitnami/python/lib/python2.7/site-packages',
'/opt/bitnami/python/lib/python2.7/site-packages/PIL']
(मैं अपने आधार छवि के रूप में 32-बिट BitNami DjangoStack 1.4.2-1 छवि का इस्तेमाल किया।)
मैं वास्तव में एक [बिटनामी DjangoStack छवि] (http://bitnami.org/stack/djangostack) का उपयोग कर रहा हूं और पाइप का उपयोग कर boto 2.6 स्थापित किया है। यह वास्तव में एक अलग उपयोगकर्ता के तहत बूट होने के साथ एक समस्या हो सकती है, और इस प्रकार आपने सुझाए गए गलत बोटो का उपयोग कर सकते हैं। मैं इसे देख लूंगा और आपको बता दूंगा। – mbargiel
बिंगो, आपको यह सही मिला! बूट के दौरान, यह बोटो 2.2.2 का उपयोग कर रहा है, 2.6 नहीं, और मेटाडाटा-आधारित क्रेडेंशियल्स समर्थन एक ऐसी सुविधा है जिसे लगभग 2.5 या उससे भी अधिक पेश किया गया था। – mbargiel