
Для того, чтобы скопировать все индексы с одного домена в другой воспользуемся утилитой 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 домена