проблемы при создании снимка aws es для каждого индекса при использовании скрипта python - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь расширить / изменить скрипт Python для создания снимков awsasticsearch.

Я хочу сделать снимок каждого индекса в корзину S3 перед его удалением.Ниже приведен сценарий, который я до сих пор.

проблема: когда я выполняю это, это создает снимок со всеми индексами, где я хочу создать один снимок для одного индекса.

результат: каждый индекс должен иметь успешный моментальный снимок и после которого он должен быть удален.

import boto3
import requests
import json
from requests_aws4auth import AWS4Auth
from elasticsearch import Elasticsearch, RequestsHttpConnection
import curator

host = 'search-xx-xxxxxas-xxxxx-xxxx-xxxxxx.us-east-1.es.amazonaws.com' # For example, search-my-domain.region.es.amazonaws.com
region = 'us-east-1' # For example, us-west-1
service = 'es'
credentials = boto3.Session().get_credentials()
awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token)
TRUE = 'true'
FALSE = 'false'

# Build the Elasticsearch client.
es = Elasticsearch(
    hosts = [{'host': host, 'port': 443}],
    http_auth = awsauth,
    use_ssl = True,
    verify_certs = True,
    connection_class = RequestsHttpConnection
)

index_list = curator.IndexList(es)

# Filters by age, anything with a time stamp older than 30 days in the index name.
index_list.filter_by_age(source='name', direction='older', timestring='%Y.%m.%d', unit='days', unit_count=67)
print("Found %s indices to delete" % len(index_list.indices))

## Creating snapshots for the above.
for x in range(len(index_list.indices)):
    index = index_list.indices[x]
    print(type(index))
    url = 'https://'+host+'/_snapshot/qc-snapshots/'+ index
    payload_dict = { 
        "indices": index,
        "ignore_unavailable": True ,
        "include_global_state": False
        }
    payload = json.dumps(payload_dict)
    headers = {
    'Content-Type': "application/json",
    'Cache-Control': "no-cache"
    }

    print(url)
    print(payload)
    print(headers)
    r = requests.put(url, auth=awsauth, json=payload, headers=headers)
    print(r.status_code)
    print(r.text)
...