2016-01-08 20 views
6

के साथ एडब्लूएस लोचदार खोज का उपयोग करके भूमिका मुद्दा मेरे पास एडब्लूएस क्लाउड में एक लोचदार खोज उदाहरण है, जो ठीक काम करता है। लेकिन मुझे स्नैपशॉट्स स्टोर करने के लिए इसे S3 के साथ सेट अप करने की आवश्यकता है।
"Message": "settings.role_arn is needed for snapshot registration."एस 3

कोई भी विचार:

PUT _snapshot/my_s3_repository 
{ 
    "type": "s3", 
    "settings": { 
     "bucket": "my_bucket_name", 
     "region": "us-west" 
    } 
} 

लेकिन बदले में मैं निम्नलिखित मिल:

सबसे पहले मैं सेटअप करने के लिए अंत बिंदु (नकली json उदाहरण) के लिए निम्न S3 भंडार की जरूरत है, पोस्ट करके ? मैंने बिना किसी किस्मत के आईएएम में भूमिकाओं के साथ गड़बड़ करने की कोशिश की है। क्या मामले में यहां के लिए एडब्ल्यूएस मंच धागे से है मंच गायब हो जाता है से अधिक

+2

पर पुनर्स्थापित करें यह धागा ठीक से काम करने के लिए प्रक्रिया को समझाता है: https://forums.aws.amazon.com/thread.jspa?threadID=217287 – Val

+0

हाय मेरे पास एक ही समस्या है। क्या आपने इसे करने का प्रबंधन किया? यदि हां, तो क्या आप कुछ अंतर्दृष्टि प्रदान कर सकते हैं? – panipsilos

उत्तर

2

प्रतिलिपि बनाई जा रही:


स्नैपशॉट S3 खजाने के लिए पंजीकरण की प्रक्रिया एक भूमिका और हस्ताक्षरित अनुरोध की आवश्यकता है।

एस 3 एंडपॉइंट पंजीकृत करने के लिए हस्ताक्षरित अनुरोध बनाने के लिए आप एक पायथन स्क्रिप्ट का उपयोग कर सकते हैं। उदाहरण नीचे देखें।

सभी इस प्रक्रिया यहाँ वर्णित है: http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-managedomains.html लेकिन, संक्षेप में प्रस्तुत करने के लिए, आप निम्न चरणों का पालन कर सकते हैं:

1) एक IAM नीति बनाएं और भूमिका के लिए देते जोड़ें:

एक उदाहरण भूमिका

:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Sid": "", 
     "Effect": "Allow", 
     "Principal": { 
     "Service": "es.amazonaws.com" 
     }, 
     "Action": "sts:AssumeRole" 
    } 
    ] 
} 

इस तरह एक उदाहरण नीति पिछले भूमिका के साथ संलग्न किया जाना चाहिए: निम्नलिखित की तरह दिखता है

{ 
    "Version":"2012-10-17", 
    "Statement":[ 
     { 
      "Action":[ 
       "s3:ListBucket" 
      ], 
      "Effect":"Allow", 
      "Resource":[ 
       "arn:aws:s3:::es-index-backups" 
      ] 
     }, 
     { 
      "Action":[ 
       "s3:GetObject", 
       "s3:PutObject", 
       "s3:DeleteObject", 
       "iam:PassRole" 
      ], 
      "Effect":"Allow", 
      "Resource":[ 
       "arn:aws:s3:::es-index-backups/*" 
      ] 
     } 
    ] 
} 

2) एक स्नैपशॉट निर्देशिका

पंजीयन नई भूमिका के उपयोग के साथ एक IAM उपयोगकर्ता के रूप में, आप अमेज़न Elasticsearch सेवा के साथ स्नैपशॉट निर्देशिका रजिस्टर इससे पहले कि आप मैनुअल सूचकांक स्नैपशॉट लेना चाहिए। इस वन-टाइम ऑपरेशन की आवश्यकता है कि आप आईएएम भूमिका के साथ अपने एडब्ल्यूएस अनुरोध पर हस्ताक्षर करें जो अमेज़ॅन ईएस को अनुमति देता है।

सहेजें निम्न नमूना अजगर कोड और निम्न मान को संशोधित: क्षेत्र: एडब्ल्यूएस क्षेत्र है जहां आप स्नैपशॉट भंडार समाप्ति बिंदु बनाया: अपने अमेज़न ES डोमेन के लिए endpoint aws_access_key_id: IAM क्रेडेंशियल aws_secret_access_key: IAM क्रेडेंशियल पथ : स्नैपशॉट रिपोजिटरी का स्थान

नोट: पायथन क्लाइंट को उस कंप्यूटर पर बोटो पैकेज स्थापित करने की आवश्यकता है जहां आप अपना स्नैपशॉट रिपॉजिटरी पंजीकृत करेंगे। boto.connection आयात AWSAuthConnection

class ESConnection(AWSAuthConnection): 

    def __init__(self, region, **kwargs): 
     super(ESConnection, self).__init__(**kwargs) 
     self._set_auth_region_name(region) 
     self._set_auth_service_name("es") 

    def _required_auth_capability(self): 
     return ['hmac-v4'] 

if __name__ == "__main__": 

    client = ESConnection(
      region='us-east-1', 
      host='search-weblogs-etrt4mbbu254nsfupy6oiytuz4.us-east-1.es.a9.com', 
      aws_access_key_id='my-access-key-id', 
      aws_secret_access_key='my-access-key', is_secure=False) 

    print 'Registering Snapshot Repository' 
    resp = client.make_request(method='PUT', 
      path='/_snapshot/weblogs-index-backups', 
      data='{"type": "s3","settings": { "bucket": "es-index-backups","region": "us-east-1","role_arn": "arn:aws:iam::123456789012:role/MyElasticsearchRole"}}') 
    body = resp.read() 
    print body 

से एक बार S3 भंडार पंजीकृत किया गया है, तो आप मैन्युअल लेने के लिए और कर्ल का उपयोग कर स्नैपशॉट बहाल करने में सक्षम हो जाएगा।उदाहरण के रूप में:

मैन्युअल रूप से एक स्नैपशॉट लेने के लिए:

curl -XPUT 'http://<Elasticsearch_domain_endpoint>/_snapshot/snapshot_repository/snapshot_name' 

मैन्युअल एक स्नैपशॉट पुनर्स्थापित करने के लिए:

curl -XPOST 'http://search-weblogs-abcdefghijklmnojiu.us-east-1.a9.com/_snapshot/weblogs-index-backups/snapshot_1/_restore' 

ध्यान दें: आप एक अमेज़न ES क्लस्टर के लिए अपने सूचकांक का एक स्नैपशॉट पुनर्स्थापित नहीं कर सकता है कि पहले से ही एक ही नाम के साथ सूचकांक शामिल हैं। वर्तमान में, अमेज़ॅन ES Elasticsearch _close API का समर्थन नहीं करता है, इसलिए आपको निम्न विकल्पों में से एक का उपयोग करना होगा: उसी अमेज़ॅन ES डोमेन पर इंडेक्स हटाएं, फिर स्नैपशॉट को पुनर्स्थापित करें स्नैपशॉट को एक अलग अमेज़ॅन ES डोमेन

+0

हैलो, उपर्युक्त पायथन स्क्रिप्ट चलाते समय मुझे निम्न त्रुटि का सामना करना पड़ रहा है 'ImportError: नाम ESConnection आयात नहीं कर सकता'। मैंने 'पीपी' –

+0

का उपयोग कर साइनर स्थापित किया है आपको पीपी के माध्यम से बोटो इंस्टॉल करने की आवश्यकता है। क्या तुमने वह किया? – Doug