Проблема
Необходимо зарегистрировать и подключить S3 хранилище для снапшотов Elasticsearch
Решение
Процесс регистрации для снимков S3-репозиториев требует роли и подписанного запроса.
Чтобы создать подписанный запрос для регистрации конечной точки S3, вы можете использовать python script. Пример ниже.
Весь этот процесс описан здесь: 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" } ] }
Пример такой политики, как этот, должен быть привязан к предыдущей роли:
{ "Version":"2012-10-17", "Statement":[ { "Action":[ "s3:ListBucket" ], "Effect":"Allow", "Resource":[ "arn:aws:s3:::destination-elk-bukket" ] }, { "Action":[ "s3:GetObject", "s3:PutObject", "s3:DeleteObject", "iam:PassRole" ], "Effect":"Allow", "Resource":[ "arn:aws:s3:::destination-elk-bukket/*" ] } ] }
2) Регистрация каталога моментальных снимков
Как пользователь IAM с доступом к новой роли, вы должны зарегистрировать каталог моментальных снимков с помощью службы Amazon Elasticsearch, прежде чем вы будете делать ручные индексные снимки. Эта одноразовая операция требует, чтобы вы подписали свой запрос AWS с ролью IAM, которая предоставляет разрешения Amazon ES.
Сохраните следующий пример кода Python и измените следующие значения: region: регион AWS, в котором вы создали репозиторий снимков Конечная точка: конечная точка для вашего домена Amazon ES aws_access_key_id: учетные данные IAM aws_secret_access_key: учетные данные IAM путь: расположение хранилища снимков
Примечание. Клиент Python требует, чтобы пакет boto был установлен на компьютере, где вы зарегистрируете репозиторий снимков. от boto.connection import AWSAuthConnection init.py
#!/usr/bin/env python3 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='eu-west-1', host='YOUR_AWS_ELK_HOSTNAME.es.amazonaws.com', aws_access_key_id='YOUR_AWS_KEY', aws_secret_access_key='YOUR_AWS_ACCESS', is_secure=False) print 'Registering Snapshot Repository' resp = client.make_request(method='POST', path='/_snapshot/destination-elk-bukket', data='{"type": "s3","settings": { "bucket": "destination-elk-bukket", "region": "eu-west-1", "role_arn": "arn:aws:iam::823153882971:role/destination-elk-bukket"}}', headers={'Content-Type': 'application/json'}) body = resp.read() print body
После регистрации репозитория S3 вы сможете вручную выполнять и восстанавливать моментальные снимки с помощью curl. В качестве примера:
Чтобы сделать снимок вручную:
curl -XPUT 'http://<Elasticsearch_domain_endpoint>/_snapshot/snapshot_repository/snapshot_name'
Чтобы вручную восстановить моментальный снимок:
curl -XPOST 'http://YOUR_AWS_ELK_HOSTNAME.es.amazonaws.com/_snapshot/destination-elk-bukket/snapshot_1/_restore'
Примечание. Вы не можете восстановить моментальный снимок ваших индексов в кластере Amazon ES, который уже содержит индексы с одинаковыми именами. В настоящее время Amazon ES не поддерживает API Elasticsearch _close, поэтому вы должны использовать одну из следующих альтернатив: Удалите индексы на одном домене Amazon ES, затем восстановите снимок Восстановить снимок в другой домен Amazon ES
Only registered users can comment.