2016-01-08 13 views
6

AWSクラウドにElasticSearchインスタンスがあり、正常に動作しています。しかし、私はスナップショットを保存するためにそれを設定する必要があります。AWS ElasticSearch with S3を使用した役割の問題

私は、エンドポイント(モックJSON例)に以下を掲載することにより、S3リポジトリ設定する必要がある最初:

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

しかし、見返りに、私は次を得る:
"Message": "settings.role_arn is needed for snapshot registration."

任意のアイデア?私は運がないIAMで役割をぶち壊すことを試みました。 AWSフォーラムからここにスレッドされているものの上に

+2

このスレッドでは、動作させるプロセスを正確に説明しています。https://forums.aws.amazon.com/thread.jspa?threadID=217287 – Val

+0

こんにちは私は同じ問題があります。あなたはそれをすることができましたか?はいの場合は、いくつかの洞察を提供できますか? – panipsilos

答えて

2

コピーフォーラムが消える場合:


スナップショットS3のリポジトリの登録プロセスは、役割と署名リクエストが必要です。

S3エンドポイントを登録するための署名付きリクエストを作成するには、Pythonスクリプトを使用できます。下記の例を参照してください。

すべてこのプロセスは、ここで説明されています 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" 
    } 
    ] 
} 

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

手動インデックスのスナップショットを取る前に、新しい役割へのアクセス権を持つ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 Elasticsearchサービススナップショットディレクトリを登録する必要があります。この1回限りの操作では、Amazon ESに権限を与えるIAMロールでAWSリクエストに署名する必要があります。

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

注:Pythonクライアントでは、スナップショットリポジトリを登録するコンピュータにbotoパッケージをインストールする必要があります。 S3リポジトリが登録されると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 

から は、手動で取るとカールを使用してスナップショットを復元することができます。例として:

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

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

こんにちは、上記のPythonスクリプト 'ImportError:名前ESConnectionをインポートできません'を実行しているときに、次のエラーに直面しています。私は 'pip'を使って署名者をインストールしました –

+0

pipを使ってbotoをインストールする必要があります。あなたはそれをやりました? – Doug

関連する問題