2016-03-19 17 views
2

Bir elasticsearch dizinimi S3 paketine bir klasöre yedeklemeye çalışıyorum.AWS Elastic search için manuel yedekleme nasıl kaydedilir?

from boto.connection import AWSAuthConnection 

sınıf 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'] 

== "ana" adı eğer:

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='POST', 
     path='/_snapshot/weblogs-index-backups/test_dir', 
     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 

Ben yolunu kaydetmek için aşağıdaki kodu kullanıyorum Verilen yol için hatayı alıyorum: uri [/ _snapshot/weblogs-ind için işleyici bulunamadı eski yedeklemeler/test_dir] ve yöntem [POST]

Herhangi bir öneri, lütfen.

Teşekkürler.

cevap

2

1) bir role ekleyin bir IAM politikası oluşturun ve ekleyin: bir örnek Rolü benziyor aşağıdadır:

:

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

bunun gibi bir örnek politikası önceki rolüne eklenmelidir 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 Elastik ile anlık dizini kaydetmeniz gerekir manuel dizin anlık görüntüleri almadan önce earch Servisi. 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

from boto.connection import 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 

, 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.Eğer aşağıdaki alternatiflerden birini kullanmanız gerekir Halen Amazon ES, Elasticsearch _close API desteklemez: Aynı Amazon ES etki alanında endekslerini Sil , ardından farklı Amazon ES etki alanına anlık Restore anlık geri

+0

Anlık görüntü kayıtlarını kaydedemiyorum. Rolü ve ilkeyi burada (belgelerle aynı) yaptım, ancak şu hatayı aldım: {"İleti": "Kullanıcı: arn: aws: iam :: : kullanıcı/, aşağıdakileri gerçekleştirmek için yetkiniz yok: es: Kaynakta ESHttpPost: " – Efren

+0

bu yüzden iam rolünüzle ilgili bir sorun var, elasticsearch politikası - iam politikasını kümenizle mi kullanıyorsunuz? veya betiğiniz, belki tüm komut dosyalarınız/politika detalilerinizle yeni bir soru yayınlayın, size yardımcı olmak çok daha kolay olacaktır. – Berlin

+0

Bunu buldum, ES erişim politikasıydı, IP'leri sınırlıyordu. Teşekkür ederim! – Efren

İlgili konular