Для того, чтобы скопировать все индексы с одного домена в другой воспользуемся утилитой elasticdump
Для утилиты elasticdump нужнен npm, если их нет, то устанавливаем nodejs и npm:
yum install -y gcc-c++ make curl -sL https://rpm.nodesource.com/setup_6.x | sudo -E bash - yum install nodejs
Устанавливаем elasticdump:
npm install elasticdump -g
Создадим скрипт, предварительно указав в переменных old_instance и new_instance URL своих ES доменов.
cat <<EOF >elastic_dump.sh #!/bin/bash old_instance="https://vpc-artem-old.eu-central-1.es.amazonaws.com" new_instance="https://vpc-artem-new.eu-central-1.es.amazonaws.com" es_indexes=$(curl -s "${old_instance}/_cat/indices" | awk '{ print $3 }') for index in $es_indexes; do elasticdump \ --input="${old_instance}/${index}" \ --output="${new_instance}/${index}" \ --type=mapping elasticdump \ --input="${old_instance}/${index}" \ --output="${new_instance}/${index}" \ --type=data done EOF
Делаем скрипт исполняемым и запускаем:
chmod +x elastic_dump.sh ./elastic_dump.sh
Если в качестве Elasticsearch у вас сервис AWS, то не должно быть авторизации в Elasticsearch на момент миграции, для этого можно разрешить доступ основываясь на SecurityGroup и VPC:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "es:*", "Resource": "arn:aws:es:eu-central-1:XXXXXXXXXXXX:domain/artem-old/*" } ] }
eu-central-1 — регион AWS
XXXXXXXXXXXX — ID укаунта AWS
artem-old — имя Elasticsearch домена