Проблема
Необходимо зарегистрировать и подключить 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-bucket"
]
},
{
"Action":[
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject",
"iam:PassRole"
],
"Effect":"Allow",
"Resource":[
"arn:aws:s3:::destination-elk-bucket/*"
]
}
]
}
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-bucket',
data='{"type": "s3","settings": { "bucket": "destination-elk-bucket", "region": "eu-west-1", "role_arn": "arn:aws:iam::823153882971:role/destination-elk-bucket"}}',
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-bucket/snapshot_1/_restore'
Примечание. Вы не можете восстановить моментальный снимок ваших индексов в кластере Amazon ES, который уже содержит индексы с одинаковыми именами. В настоящее время Amazon ES не поддерживает API Elasticsearch _close, поэтому вы должны использовать одну из следующих альтернатив: Удалите индексы на одном домене Amazon ES, затем восстановите снимок Восстановить снимок в другой домен Amazon ES
Only registered users can comment.