J'écris l'implémentation de sauvegarde/restauration d'instantanés AWS Elasticsearch à l'aide de python boto. J'ai pu enregistrer AWS S3 en tant que référentiel d'instantanés ES. Voici l'extrait de ma fonction créer des instantanés.Implémentation 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}')
problème principal semble être en extrait ci-dessus où je suis en train de construire une URL pour
{u'status ': 400, u'error': {u'root_cause ': [ {u'reason ': u [es_repository: v4_2017_03_27_snapshot wait_for_completion = true]? nom de l'instantané non valide [? v4_2017_03_27_snapshot wait_for_completion = true], ne doit pas contenir les caractères suivants [\, /, *,, », < ,>, |,,,] ', u'type': u'invalid_snapshot_name_exception '}], tapez': u'invalid_snapshot_name_exception », u'reason ': u [es_repository: v4_2017_03_27_snapshot wait_for_completion = true] nom de l'instantané non valide [? V4_2017_03_27_snapshot wait_for_completion = true], ne doit pas contenir les caractères suivants [\, /, *, ?, », <,>, |?,,,] '}}
Il prend mon drapeau réelle snapshot_name et wait_for_completion entièrement comme nom de l'instantané
nom de l'instantané non valide [v4_2017_03_27_snapshot wait_for_completion = vrai], ne doit pas contenir les caractères suivants [\, /, *, « , <,>, |?,,,] '}}
Pourriez-vous s'il vous plaît me aider à remarquer endroit où je fais tort dans la construction url pour elasticsearch? Ou y a-t-il un meilleur moyen d'y parvenir?
Oui, pour cela seulement je besoin d'une réponse. Le problème de base réside dans la restriction de l'URL elle-même. J'ai essayé de placer '?' marquer à différents endroits, c'est-à-dire '/ _snapshot/es_repository/{}?' ou dans snapshot_name ou ne pas le placer n'importe où. Un que j'ai montré dans cette question est l'un des cas d'utilisation et j'ai besoin d'aide pour construire l'url. Si je le fais manuellement comme curl -XPUT 'localhost: 9200/_snapshot/mon_backup/snapshot_1? Wait_for_completion = true & pretty' Et si vous utilisez le script, il échoue à se plaindre '?'. –