私はAWS Elasticsearchのスナップショットを作成しています。これは、python botoを使用したバックアップ/復元の実装です。私はAWS S3をESスナップショットリポジトリとして登録することができました。ここに私の作成スナップショット機能のスニペットがあります。AWS Elasticsearch pythonの実装
import boto
import urllib
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']
def create_snapshots(profile, region_name, es_host,total_snapshots_to_keep):
.
.
.
url = "/_snapshot/es_repository/{}?".format(snapshot_name)
flag = urllib.urlencode({'wait_for_completion':'true'})
resp = client.make_request(method='PUT',
path=urllib.quote("{}{}".format(url,flag)),
data='{"indices": "' + audit_index_name + '", "ignore_unavailable": true, "include_global_state": false}')
主な問題は、私は
{u'statusのURL構築しようとしています上記のスニペットであるように思わ ':400、u'error':{u'root_causeを ':[ {u'reason ': U' [es_repository:v4_2017_03_27_snapshot WAIT_FOR_COMPLETION = trueを?] 無効なスナップショット名 [真v4_2017_03_27_snapshot WAIT_FOR_COMPLETION =?]、 次の文字を含めることはできません[\、/、*、」、<? 、>、|、、] '、u'type': u'invalid_snapshot_name_exception '}]、u'type': u'invalid_snapshot_name_exception」、u'reason ': U' [es_repository:?真v4_2017_03_27_snapshot WAIT_FOR_COMPLETION =] 無効なスナップショット名 [?真v4_2017_03_27_snapshot WAIT_FOR_COMPLETION =]は、\、/、* [ 次の文字を含めることはできません、 ?、」、<、>、|、、、] '}}
それは[v4_2017_03_27_snapshot WAIT_FOR_COMPLETION =
スナップショット名として完全に無効なスナップショット名を私の実際のsnapshot_nameとWAIT_FOR_COMPLETIONフラグを取っています? true]、を含めることはできません次の文字は、[\、/、*、」、<、>、|?、、、] '}}
私は、URLの構築に誤ってそれをやっているところを指摘私を助けてもらえelasticsearchのために?それともこれを達成するための良い方法がありますか?
はいを使用する必要があり、そのためだけに私は答えを必要としています。基本的な問題は、URL自体の制約です。私は「?」を配置しようとしました。異なる場所、つまり '/ _snapshot/es_repository/{}?'にマークを付けます。またはsnapshot_nameに格納するか、どこにも置かないでください。私がこの質問で示したものは、ユースケースの1つです。そして、私はURLを構築する際に助けが必要です。私は手動でcurl -XPUT 'localhost:9200/_snapshot/my_backup/snapshot_1?wait_for_completion = true&pretty'のように手動で行う場合 スクリプトを使用すると「?」というエラーが表示されます。 –