Migrasi data ke Amazon Elasticsearch Service
Saya mencoba menjelaskan langkah-langkah apa yang harus dilakukan untuk melakukan migrasi data dari self-managed Elasticsearch cluster
ke Amazon Elasticsearch Service.
Langkah-langkah ini berdasarkan pengalaman pribadi melakukan migrasi dengan acuan panduan dokumentasi-dokumentasi dari AWS. Kamu bisa membaca dokumentasi Migrating to Amazon Elasticsearch Service dan tidak melanjutkan membaca langkah-langkah yang saya pakai.
Pastinya kamu harus membuat atau memiliki snapshot yang akan dimigrasi, dan diupload ke AWS S3
, jika belum silahkan baca bagian Take and Upload the Snapshot.
1: Berikan izin⌗
Kamu harus membuat sebuah IAM Role
yang memiliki policy
untuk memberikan izin Elasticsearch cluster ini untuk menggunakan snapshot yang sudah disiapkan didalam AWS S3
.
1.1: Buat sebuah IAM Role
⌗
Pada bagian Select type of trusted entity
pilih AWS Service
. Kemudian pada bagian Choose a use case
pilih saja EC2
jika Elasticsearch tidak kamu temukan, karena nanti bisa kamu gubah.
1.2: Attach permissions policies⌗
Buat sebuah policy jika belum mempunyai, dengan isi sebagai berikut:
{
"Version": "2012-10-17",
"Statement": [{
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::migration-bucket"
]
},
{
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::migration-bucket/*"
]
}
]
}
migration-bucket
yang tertera diatas bisa kamu ganti tergantung namaAWS S3
bucket tempat menyimpan snapshot yang akan di-restore.
Lanjutkan dengan memberi nama untuk policy ini, contohnya AmazonS3ElasticsearchBackupAccess
, dan konfirmasi membuat policy-nya.
Kembali ke halaman membuat IAM Role
sebelumnya, klik tombol refresh sebelah kanan, dan cari nama policy yang tadi kamu buat, kemudian pilih dan lanjutkan.
1.3: Review⌗
Lanjutkan dengan memberi nama untuk role ini, contohnya AmazonESSnapshotRole
, dan konfirmasi membuat role-nya.
1.4: Trust relationships⌗
Jika sebelumnya kamu memilih EC2
sebagai trusted entity dari AWS Service untuk role ini, maka kamu perlu menggubah Trust relationships
dari role yang tadi dibuat, dengan masuk ke halaman detil role, pilih tab Trust relationships
, klik tombol Edit trust relationship
, kemudian ganti isinya sebagai berikut:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "es.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
Kemudian lanjutkan update.
1.5: Berikan izin sebuah user atau role⌗
Izin untuk user atau role ini harus dibuat supaya Elasticsearch cluster dapat mengakses AWS S3
memanfaatkan IAM Role
yang tadi kamu buat.
Izin ini saya perkirakan hanya untuk user atau role yang tidak mempunyai akses penuh terhadap semua Action
dan Resource
didalam akun AWS kamu. Jika mempunyai user atau role tersebut, saya perkirakan kamu dapat melewati bagian ini.
Jika tidak, maka buat sebuah Policy
, contoh nama AmazonESSnapshotPassRole
, dengan permission sebagai berikut:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:iam::123456789012:role/AmazonESSnapshotRole"
}
]
}
Kemudian Add permissions
dan pilih policy tadi terhadap sebuah user, atau role jika kamu sudah memahami pemakaian IAM Role
.
1.6: Konfigurasi di Kibana⌗
Saya perkirakan jika kamu mengaktifkan
Fine–grained access control
, maka diperlukan konfigurasi di Kibana. Silahkancoba
lewati bagian ini jika kamu tidak mengaktifkan.
Masuk ke Kibana
menggunakan kredensial master user
yang kamu tentukan saat membuat Elasticsearch cluster ini. Kamu bisa menemukan URL Kibana di halaman Overview
.
Di Kibana, pilih Security
, Role Mappings
, dan Add
. Untuk Role
, pilih manage_snapshots
. ARN untuk user masuk ke bagian users
, dan ARN untuk role masuk ke bagian Backend roles
. Langkah ini untuk memberikan izin Fine–grained access control
menggunakan snapshot.
Gunakan ARN user yang memiliki akses terhadap AWS S3
dimana snapshot yang akan dipakai tersimpan. Kemudian gunakan ARN role AmazonESSnapshotRole
.
2: Restore snapshot⌗
Sebelum memulai restore, kamu harus membuat sebuah konfigurasi repository didalam Elasticsearch cluster.
2.1: Mendaftarkan migration repository⌗
Untuk membuat sebuah konfigurasi repository, kamu harus menggunakan IAM
kredensial yang memiliki akses terhadap Elasticsearch cluster, karena didalam konfigurasi itu mempunyai property role_arn
.
Jika Elasticsearch cluster berada didalam sebuah VPC
, maka kamu hanya dapat mengaksesnya melalui AWS services yang berada didalam VPC
yang sama, contohnya sebuah Instance EC2
.
Jadi silahkan tentukan melalui apa tergantung posisi Elasticsearch cluster kamu, didalam sebuah VPC
atau tidak.
Untuk mendaftarkan repository, karena harus menggunakan IAM
kredensial, maka kamu bisa menggunakan alat yang lebih mudah, yaitu:
- Postman jika tidak didalam
VPC
, gunakanIAM
kredensial didalam bagian Authorization, atau; - awscurl, jika didalam
VPC
, dengan perintah sebagai berikut:
awscurl -X PUT --service es --region us-west-1 \
--access_key <ganti_dengan_access_key_kamu> \
--secret_key <ganti_dengan_secret_key_kamu> \
https://<ganti_dengan_elasticsearch_domain_endpoint_kamu>/_snapshot/migration-repository \
-H 'Content-Type: application/json' \
-d '{
"type": "s3",
"settings": {
"bucket": "migration-bucket",
"base_path": "<ganti_dengan_folder_aws_s3_snapshot_kamu_disimpan_atau_hapus_property_ini_jika_tidak_memakai_folder>",
"region": "us-west-1",
"compress": true,
"role_arn": "arn:aws:iam::123456789012:role/AmazonESSnapshotRole"
}
}'
Value dari
--region
ganti dengan lokasi dimana Elasticsearch cluster dan AWS S3 kamu berada.
2.2: Memilih snapshot⌗
Jika repository diatas berhasil dibuat, maka kamu bisa melihat daftar snapshot yang tersedia, bisa tetap menggunakan Postman atau curl
.
Jika kamu mengaktifkan Fine–grained access control
, maka otentikasi master user
harus digunakan pada bagian ini untuk mengakses Elasticsearch cluster, tergantung apakah memakai IAM ARN
, atau Create master user
yaitu terdapat username dan password.
Jika memakai username dan password, maka kamu bisa menggunakan HTTP basic authentication
.
curl -XGET -u "<username>:<password>" \
https://<ganti_dengan_elasticsearch_domain_endpoint_kamu>/_snapshot/migration-repository/_all?pretty=true
Kamu akan melihat daftar seperti dibawah ini (bagian tertentu saya hapus)
[{
"snapshot" : "snap_6.3.2_20201120000501",
"uuid" : "apki4AP-Se12dua6AmqBAg",
"version_id" : 6030299,
"version" : "6.3.2",
"indices" : [ ... ],
"include_global_state" : true,
"state" : "SUCCESS",
"shards" : {
"total" : 20,
"failed" : 0,
"successful" : 20
}
}, {
"snapshot" : "snap_6.3.2_20201120010501",
"uuid" : "uFtWFjHhSpOUzhFB13BQoRw",
"version_id" : 6030299,
"version" : "6.3.2",
"indices" : [ ... ],
"include_global_state" : true,
"state" : "SUCCESS",
"shards" : {
"total" : 20,
"failed" : 0,
"successful" : 20
}
}]
2.3: Restore snapshot⌗
Masih memakai penjelasan poin diatas mengenai otentikasi. Kamu tentukan snapshot mana yang akan di-restore
curl -XPOST -u "<username>:<password>" \
https://<ganti_dengan_elasticsearch_domain_endpoint_kamu>/_snapshot/migration-repository/snap_6.3.2_20201120000501/_restore?wait_for_completion=true \
-H 'Content-Type: application/json' \
-d '{
"indices": "...",
"include_global_state": false
}'
2.4: Periksa hasil restore⌗
curl -XGET -u "<username>:<password>" \
https://<ganti_dengan_elasticsearch_domain_endpoint_kamu>/_cat/indices?v