2016-01-08 19 views
6

AWS bulutunda bir ElasticSearch örneğim var, bu da iyi çalışıyor. Ancak enstantane fotoğraflarını saklamak için S3 ile kurmam gerekiyor.
"Message": "settings.role_arn is needed for snapshot registration."S3 ile AWS ElasticSearch kullanarak rol sorunu

Herhangi fikirler:

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

Ama karşılığında ben şu olsun:

Önce son nokta (sahte json örnek) aşağıdaki yayınlayarak, kurulum için S3 deposuna ihtiyaç ? IAM'da hiçbir şansı olmayan rollerle uğraşmaya çalıştım. Forum ortadan kaybolur diye burada üzere AWS Forum iplikle olduğu üzerinde

+2

Bu iş parçacığı tam olarak çalışmayı sağlayan işlemi açıklar: https://forums.aws.amazon.com/thread.jspa?threadID=217287 – Val

+0

Merhaba Aynı sorunu yaşıyorum. Bunu yapmayı başardın mı? Eğer evet ise, bazı anlayışlar sağlayabilir misiniz? – panipsilos

cevap

2

Kopyalama:


anlık S3 depolar için kayıt süreci bir rolü ve imzalı istek gerektirir.

S3 bitiş noktasını kaydetmek için imzalı bir istek oluşturmak için bir python betiği kullanabilirsiniz. Aşağıdaki örneğe bakınız.

Bütün bu süreç burada açıklanmaktadır: http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-managedomains.html Ama özetlemek gerekirse, şu adımları izleyin:

1) IAM politikası oluşturun ve bir role ekleyin ekleyin:

bir örnek Rolü

: bunun gibi bir örnek politikası önceki rolüne eklenmelidir

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

: aşağıdaki gibi görünüyor Manuel indeks anlık almadan önce yeni rolüne erişimi olan bir IAM kullanıcı olarak bir anlık Directory

kaydedilmesi

{ 
    "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), Amazon Elasticsearch Servisi anlık dizini kaydetmeniz gerekir. Bu bir kerelik işlem, AWS isteğinizi Amazon ES'ye izin veren IAM rolü ile imzalamanızı gerektirir.

kaydet Aşağıdaki örnek Python kodunu ve aşağıdaki değerleri değiştirin: bölge: Anlık görüntü bitiş noktası oluşturdu AWS bölge: Amazon ES etki alanı için son nokta aws_access_key_id: IAM kimlik aws_secret_access_key: IAM kimlik yolu : Anlık görüntü havuzunun konumu Not: Python istemcisi, boto paketinin, anlık görüntü havuzunuzu kaydettireceğiniz bilgisayara yüklenmesini gerektirir. S3 deposu kaydedildikten sonra boto.connection ithalat 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 

dan , el alıp curl kullanarak anlık geri mümkün olacaktır.Örnek olarak:

el anlık görüntü almak için:

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

elle anlık geri yüklemek için:

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

Not: Amazon ES kümeye sizin endeksleri anlık geri yükleyemezsiniz zaten aynı ada sahip indeksler içerir. Şu anda, Amazon ES, Elasticsearch _close API'sini desteklememektedir, bu nedenle aşağıdaki alternatiflerden birini kullanmanız gerekir: Aynı Amazon ES etki alanındaki dizinleri silin, ardından anlık görüntüyü geri yükleyin

+0

Merhaba, Yukarıdaki python betiğini çalıştırırken aşağıdaki hatayla karşılaşıyorum 'ImportError: ESConnection ismini içe aktaramıyorum. Ben pip ' –

+0

kullanarak imzaladım pip ile boto yüklemeniz gerekir. Onu yaptınmı? – Doug

İlgili konular