2016-03-19 10 views
2

フォルダ内のS3バケットにelasticsearchインデックスをバックアップしようとしています。AWS Elastic検索の手動バックアップを登録するにはどうすればよいですか?

from boto.connection import AWSAuthConnection 

クラス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'] 

== "メイン" 名前場合:

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 

私はパスを登録するには、次のコードを使用しています与えられたパスについて、私はエラーを受け取ります: uriのハンドラが見つかりません[/ _snapshot/weblogs-ind ex-backups/test_dir]とメソッド[POST]

お願いします。

ありがとうございました。

答えて

2

1)IAMポリシーを作成し、役割に添付追加: 例の役割は、次のようになります。

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

このような例ポリシーは、以前の役割に添付する必要があります。

新しい役割へのアクセス権を持つIAMユーザーとして、スナップショットディレクトリ

を登録

{ 
    "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エラスティックとスナップショットディレクトリを登録する必要がありますearch手動インデックススナップショットを作成する前にサービス。この1回限りの操作では、Amazon ESに権限を与えるIAMロールでAWSリクエストに署名する必要があります。

保存次のサンプルPythonコードと、次の値を変更します。 地域:スナップショットリポジトリに エンドポイントを作成したAWSの地域:あなたのアマゾンESドメインのエンドポイント aws_access_key_id:IAM資格 aws_secret_access_key:IAM資格 パス:スナップショットリポジトリの場所

注:Pythonクライアントでは、スナップショットリポジトリを登録するコンピュータにbotoパッケージをインストールする必要があります。

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 

S3リポジトリが登録されると、curlを使用してスナップショットを手動で取得して復元することができます。例として:

手動でスナップショットを取るために:

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

注:あなたはすでにアマゾンESクラスタにあなたのインデックスのスナップショットを復元することはできません手動でスナップショットを復元するには

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

を同じ名前のインデックスを含んでいます。現在、Amazon ESはElasticsearch _close APIをサポートしていないので、次のいずれかの方法を使用する必要があります。 同じAmazon ESドメイン上のインデックスを削除してからスナップショットを復元します

+0

スナップショットレポを登録できません。 {"メッセージ": "ユーザー:arn:aws:iam :: :user/には実行権限がありません:es:役割とポリシーはここで(ドキュメントと同じですが) ESHttpPost on resource:elasticsearch "} – Efren

+0

あなたのiamの役割には間違いがあります。elasticsearchポリシー - あなたのクラスタでiamポリシーを使用していますか?またはあなたのスクリプトは、おそらくすべてのあなたのスクリプト/ポリシーのdetalisで新しい質問を投稿する、それははるかに簡単になります。 – Berlin

+0

それを見つけました、ESアクセスポリシーは、IPを制限していました。ありがとうございました! – Efren

関連する問題