DevOps / Linux

Elasticsearch register snapshot storage in s3

21.01.2020

Проблема

Необходимо зарегистрировать и подключить 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

0 0 vote
Article Rating
0

Добавить комментарий

0 Комментарий
Inline Feedbacks
View all comments