All Products
Search
Document Center

Elasticsearch:Migrasi indeks Amazon OpenSearch ke Alibaba Cloud Elasticsearch

Last Updated:Aug 19, 2026

Topik ini menjelaskan cara memigrasikan data indeks dari Amazon Web Services (AWS) ES ke Alibaba Cloud Elasticsearch menggunakan pendekatan berbasis snapshot: buat snapshot data AWS ES di AWS S3, transfer data snapshot ke Alibaba Cloud OSS, lalu pulihkan indeks di kluster Alibaba Cloud Elasticsearch.

Cara kerja

Migrasi ini memanfaatkan mekanisme snapshot Elasticsearch yang tidak bergantung pada penyedia cloud tertentu: buat snapshot pada kluster AWS ES sumber dan simpan di bucket AWS S3, transfer data snapshot ke Alibaba Cloud OSS, lalu pulihkan indeks dari OSS pada kluster Alibaba Cloud Elasticsearch tujuan. Transfer lintas-cloud untuk data snapshot juga dapat dilakukan menggunakan alat Migration Implementation, yang juga berlaku untuk data snapshot ES yang disimpan di Tencent Cloud COS. Operasi pemulihan menggunakan fitur Manual Backup and Restoration ES.

Snapshot ES hanya dapat dipulihkan ke kluster yang menjalankan versi yang sama atau lebih baru, dengan batasan hingga tingkat versi patch. Untuk informasi selengkapnya, lihat Snapshot compatibility. Misalnya, jika kluster AWS ES sumber menjalankan versi 7.10.2 dan Anda memilih versi 7.10.0 untuk kluster Alibaba Cloud Elasticsearch tujuan, operasi pemulihan akan gagal dan mengembalikan the snapshot was created with Elasticsearch version [7.10.2] which is higher than the version of this node [7.10.0]. Dalam kasus ini, pilih versi yang lebih baru, seperti 7.16.2.

Architecture for migrating from AWS to Alibaba Cloud ES

Migrasi terdiri dari empat fase yang berkorespondensi satu-satu dengan empat langkah dalam topik ini:

  • Persiapkan resource: domain AWS, bucket AWS S3, serta role dan kebijakan IAM di sisi sumber, dan kluster Alibaba Cloud Elasticsearch serta bucket OSS di sisi tujuan.

  • Daftarkan repositori snapshot yang mengarah ke bucket S3 di AWS ES.

  • Migrasikan snapshot lengkap pertama: buat snapshot, transfer ke OSS, daftarkan repositori OSS di Alibaba Cloud Elasticsearch, lalu pulihkan indeks.

  • Migrasikan snapshot inkremental dan alihkan lalu lintas: hentikan penulisan di kluster sumber, buat snapshot inkremental, transfer ke OSS, pulihkan snapshot dan verifikasi jumlah dokumen, lalu alihkan lalu lintas layanan.

Langkah 1: Persiapkan resource yang diperlukan untuk migrasi

Hanya snapshot manual yang disimpan di bucket AWS S3 milik Anda sendiri yang dapat dimigrasikan. Snapshot yang dibuat otomatis oleh AWS setiap hari disimpan selama 14 hari, tidak dapat dimigrasikan ke domain lain, dan hanya dapat digunakan untuk memulihkan domain saat ini. Snapshot manual dikenai biaya sesuai tarif standar AWS S3. Lakukan persiapan berikut sebelum memulai migrasi.

Persiapkan resource AWS sumber

  • Buat domain AWS. Amazon OpenSearch Service telah menghentikan dukungan untuk versi Elasticsearch lama seperti 7.1.0.0. Gunakan salah satu versi yang tersedia di Konsol. Topik ini menggunakan Elasticsearch 7.10.2 sebagai contoh. Anda dapat menggunakan wilayah mana pun; topik ini menggunakan us-east-1. Untuk informasi selengkapnya, lihat Creating and managing Amazon OpenSearch Service domains.

    Catatan

    Jika kontrol akses detail halus diaktifkan untuk domain dan tipe pengguna master adalah IAM, atau jika kebijakan akses domain hanya mengizinkan principal IAM (misalnya, es:ESHttp* hanya diberikan kepada pengguna root akun), Anda tidak dapat login ke Konsol Kibana domain melalui browser. Permintaan akan mengembalikan error 403 User: anonymous is not authorized to perform: es:ESHttpGet. Dalam kasus ini, jalankan semua perintah sisi AWS dalam topik ini sebagai permintaan yang ditandatangani dengan AWS Signature Version 4 (SigV4). Misalnya, gunakan kembali client Python yang dijelaskan di Langkah 2.

  • Buat bucket AWS S3 untuk menyimpan snapshot manual, dan catat Amazon Resource Name (ARN) bucket tersebut. ARN digunakan di dua tempat: pernyataan Resource dalam kebijakan IAM, dan client Python yang mendaftarkan repositori snapshot.

    Contoh ARN ditunjukkan berikut ini.

    arn:aws:s3:::eric-es-index-backups
  • Persiapkan indeks yang ingin dimigrasikan di AWS ES. Topik ini menggunakan indeks bernama movies.

Buat role IAM dan kebijakan IAM

Role IAM memberi otorisasi kepada AWS ES untuk mengakses bucket S3, sedangkan kebijakan IAM membatasi aksi yang dapat dilakukan oleh role tersebut. Anda harus membuat keduanya dan melampirkan kebijakan ke role tersebut.

  • Buat role IAM untuk memberi otorisasi kepada AWS ES. Role ini diperlukan saat mendaftarkan repositori snapshot, dan hanya pengguna IAM yang memiliki izin untuk mengasumsikan role ini yang dapat mendaftarkan repositori.

    Pernyataan Service dalam hubungan kepercayaan role harus diatur ke es.amazonaws.com, seperti pada contoh berikut.

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "",
          "Effect": "Allow",
          "Principal": {
            "Service": "es.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }

    Di Konsol IAM, pilih Roles di panel navigasi kiri, temukan role yang dituju, klik tab Trust relationships, lalu klik Edit trust relationship untuk melihat dan mengedit kebijakan kepercayaan.

    Catatan

    AWS ES tidak tersedia dalam daftar drop-down Select role type saat Anda membuat role untuk layanan AWS di Konsol IAM. Pilih AWS EC2, buat role tersebut, lalu ubah ec2.amazonaws.com menjadi es.amazonaws.com.

  • Buat kebijakan IAM dan lampirkan ke role IAM di atas untuk membatasi aksi yang dapat dilakukan role tersebut pada bucket S3.

    Pernyataan Resource dalam kebijakan harus menentukan ARN bucket S3 tempat snapshot disimpan. Contoh berikut menentukan bucket eric-es-index-backups.

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Action": [
                    "s3:ListBucket"
                ],
                "Effect": "Allow",
                "Resource": [
                    "arn:aws:s3:::eric-es-index-backups"
                ]
            },
            {
                "Action": [
                    "s3:GetObject",
                    "s3:PutObject",
                    "s3:DeleteObject"
                ],
                "Effect": "Allow",
                "Resource": [
                    "arn:aws:s3:::eric-es-index-backups/*"
                ]
            }
        ]
    }

    Setelah kebijakan dibuat, Anda dapat memverifikasinya di Konsol IAM: pilih Policies di panel navigasi kiri, klik nama kebijakan untuk membuka halaman detail, lalu konfirmasi pada tampilan JSON di tab Permissions bahwa isi kebijakan sesuai dengan contoh di atas. Policy summary menunjukkan bahwa kebijakan memberikan akses Terbatas: List, Read, Write ke S3.

    Kemudian, klik Roles di panel navigasi kiri, pilih role yang dituju, lalu konfirmasi di tab Permissions bahwa kebijakan telah dilampirkan.

Persiapkan resource Alibaba Cloud tujuan

  • Buat kluster Alibaba Cloud Elasticsearch di wilayah China (Hangzhou). Versi kluster harus tidak lebih lama dari versi patch tepat dari kluster AWS ES sumber. Jika kluster sumber menjalankan versi 7.10.2, pilih 7.16.2. Untuk informasi selengkapnya, lihat Create an Alibaba Cloud Elasticsearch cluster.

  • Buat bucket OSS untuk menerima data snapshot yang ditransfer dari AWS S3. Bucket yang digunakan dalam topik ini berada di wilayah China (Hangzhou), menggunakan kelas penyimpanan Standard dan ACL private, serta mempertahankan nilai default untuk semua parameter lainnya. Untuk informasi selengkapnya, lihat Create buckets.

Langkah 2: Daftarkan repositori snapshot di AWS ES

Anda hanya dapat membuat snapshot manual setelah mendaftarkan repositori snapshot yang mengarah ke bucket S3 di AWS ES. Permintaan pendaftaran harus ditandatangani dengan AWS Signature Version 4 (SigV4) oleh pengguna atau role yang ditentukan dalam hubungan kepercayaan role IAM yang dibuat di Langkah 1: Persiapkan resource yang diperlukan untuk migrasi. Perintah curl tidak mendukung penandatanganan permintaan AWS, jadi gunakan client Python berikut untuk mendaftarkan repositori.

Persiapkan skrip pendaftaran

  1. Unduh file register_snapshot_repository.py.

  2. Ubah nilai parameter yang ditandai oleh komentar dalam skrip, lalu simpan skrip sebagai snapshot.py.

    Tabel berikut menjelaskan parameter-parameter tersebut.

    Parameter

    Deskripsi

    region

    Wilayah AWS tempat repositori snapshot dibuat.

    host

    Titik akhir domain AWS ES.

    aws_access_key_id

    ID kredensial IAM.

    aws_secret_access_key

    Kunci kredensial IAM.

    service

    Identifier layanan AWS yang digunakan untuk penandatanganan. Untuk Amazon OpenSearch Service, termasuk versi Elasticsearch-nya, nilainya selalu es.

    url

    URL permintaan yang mendaftarkan repositori snapshot, dalam format https://{host}/_snapshot/{repository-name}. Nama repositori harus sama dengan nama yang Anda gunakan saat membuat dan memulihkan snapshot.

    payload

    Harus mencakup nama dan ARN bucket S3 yang Anda buat untuk role IAM di Langkah 1: Persiapkan resource yang diperlukan untuk migrasi.

    Penting
    • Kami menyarankan Anda menambahkan "base_path": "<custom-prefix>" ke settings agar file snapshot kluster ini disimpan di bawah awalan yang ditentukan dan tidak berbagi path dengan snapshot kluster lain dalam bucket S3 yang sama. Untuk informasi selengkapnya, lihat penjelasan tentang keunikan repositori di bagian FAQ. Catat awalan tersebut: nilai base_path yang Anda tentukan saat mendaftarkan repositori OSS di Alibaba Cloud Elasticsearch harus sama dengan awalan aktual data snapshot di OSS.

    • Untuk mengaktifkan enkripsi sisi server dengan kunci yang dikelola S3 untuk repositori snapshot, tambahkan "server_side_encryption": true ke JSON settings.

    • Jika bucket S3 berada di wilayah ap-southeast-1, gunakan "endpoint": "s3.amazonaws.com" alih-alih "region": "ap-southeast-1".

Instal dependensi dan jalankan pendaftaran

  1. Instal dependensi yang dibutuhkan oleh client Python contoh.

    Client Python contoh mengirim permintaan menggunakan requests dan menandatangani permintaan menggunakan requests-aws4auth. Instal kedua dependensi tersebut pada mesin tempat pendaftaran dijalankan, dalam lingkungan Python 3.

    pip install requests requests_aws4auth
  2. Jalankan client Python untuk mendaftarkan repositori snapshot. Jika pendaftaran berhasil, kode status HTTP 200 dan {"acknowledged" : true} akan dikembalikan.

    python snapshot.py

Verifikasi hasil pendaftaran

  1. Login ke Konsol Kibana domain AWS ES dan jalankan perintah berikut di halaman Dev Tools > Console untuk melihat hasilnya. Jika kontrol akses detail halus diaktifkan untuk domain, atau jika kebijakan akses hanya mengizinkan principal IAM dan Anda tidak dapat login ke Kibana, jalankan perintah yang sama sebagai permintaan bertanda tangan. Misalnya, gunakan kembali client Python di atas dan ubah metode permintaan menjadi GET.

    GET _snapshot

    Tanggapan mengembalikan konfigurasi repositori snapshot yang terdaftar. Repositori yang dibuat sistem secara otomatis bernama cs-automated. Jika enkripsi saat diam diaktifkan untuk domain, repositori tersebut bernama cs-automated-enc.

    {
      "eric-snapshot-repository": {
        "type": "s3",
        "settings": {
          "bucket": "eric-es-index-backups",
          "base_path": "eric-aws",
          "region": "us-east-1",
          "role_arn": "arn:aws:iam::xxx:role/eric-iam-role-es"
        }
      },
      "cs-automated-enc": {
        "type": "s3"
      }
    }

Langkah 3: Migrasikan snapshot lengkap pertama

Langkah ini memigrasikan semua data yang ada di kluster sumber ke kluster tujuan: buat snapshot lengkap di AWS ES, transfer data snapshot ke Alibaba Cloud OSS, lalu daftarkan repositori OSS di Alibaba Cloud Elasticsearch dan pulihkan indeks.

Buat snapshot lengkap di AWS ES

Catatan

Jalankan perintah sisi AWS berikut di halaman Dev Tools Konsol Kibana domain AWS ES. Jika Anda tidak dapat login ke Konsol Kibana domain melalui browser, jalankan perintah yang sama sebagai permintaan yang ditandatangani dengan SigV4.

  • Buat snapshot bernama snapshot_movies_1 untuk indeks movies di repositori eric-snapshot-repository.

    PUT _snapshot/eric-snapshot-repository/snapshot_movies_1
    {
    "indices": "movies"
    }
  • Periksa status snapshot. Jika state bernilai SUCCESS, snapshot telah dibuat.

    GET _snapshot/eric-snapshot-repository/snapshot_movies_1
    {
      "snapshots": [
        {
          "snapshot": "snapshot_movies_1",
          "uuid": "BlgKLvgoSpSgwBnbD4hIWg",
          "version_id": 7100299,
          "version": "7.10.2",
          "indices": [
            "movies"
          ],
          "data_streams": [],
          "include_global_state": true,
          "state": "SUCCESS",
          "start_time": "2018-02-28T03:00:44.591Z",
          "start_time_in_millis": 1519786844591,
          "end_time": "2018-02-28T03:00:46.236Z",
          "end_time_in_millis": 1519786846236,
          "duration_in_millis": 1645,
          "failures": [],
          "shards": {
            "total": 5,
            "failed": 0,
            "successful": 5
          }
        }
      ]
    }
  • Konfirmasi di Konsol AWS S3 bahwa file snapshot telah dihasilkan.

    Setelah snapshot dibuat, bucket S3 eric-es-index-backups berisi file snapshot yang dihasilkan, termasuk folder indices, index-0, index.latest, meta-BlgKLvgoSpSgwBhbD4hTWg.dat, dan snap-BlgKLvgoSpSgwBhbD4hTWg.dat.

Transfer data snapshot ke Alibaba Cloud OSS

Transfer data snapshot dari AWS S3 ke Alibaba Cloud OSS. Untuk informasi selengkapnya, lihat Migrate applications from Amazon S3 to OSS.

Setelah transfer selesai, konfirmasi di Konsol OSS bahwa data snapshot sudah berada di tempatnya.

Bucket OSS berisi file snapshot berikut: indices/ (folder), index-0, index.latest, meta-BlgKLvgoSpSgwBhbD4hTWg.dat, dan snap-BlgKLvgoSpSgwBhbD4hTWg.dat.

Daftarkan repositori snapshot OSS di Alibaba Cloud Elasticsearch

  1. Buat repositori snapshot.

    Saat melakukan migrasi snapshot Elasticsearch, Anda harus memastikan bahwa setiap kluster Elasticsearch menggunakan repositori atau path snapshot khusus. Jika beberapa kluster berbagi repositori yang sama, pemulihan data dapat gagal dan data dapat hilang.

    Login ke Konsol Kibana kluster Alibaba Cloud Elasticsearch tujuan (Log on to the Kibana console) dan jalankan perintah berikut di halaman Dev Tools > Console untuk membuat repositori snapshot dengan nama yang sama. Nilai base_path harus sama dengan awalan aktual data snapshot setelah data ditransfer ke OSS. Jika tidak ada konfigurasi base_path untuk repositori di sisi AWS dan file snapshot berada di direktori root bucket, jangan konfigurasi base_path di sini juga.

    PUT _snapshot/eric-snapshot-repository
    {
    "type": "oss",
    "settings": {
                "base_path": "my/snapshot/directory",
                "endpoint": "http://oss-cn-hangzhou-internal.aliyuncs.com",
                "access_key_id": "your AccessKeyID",
                "secret_access_key": "your AccessKeySecret",
                "bucket": "eric-oss-aws-es-snapshot-s3",
                "compress": true
          }
    }
  2. Periksa status snapshot bernama snapshot_movies_1.

    GET _snapshot/eric-snapshot-repository/snapshot_movies_1

    Jika state dalam tanggapan bernilai SUCCESS, Alibaba Cloud Elasticsearch dapat membaca snapshot dari repositori OSS. Jika snapshot_missing_exception dikembalikan, periksa apakah base_path sama dengan awalan aktual data snapshot di OSS.

    Catatan

    Catat waktu mulai dan waktu selesai snapshot ini. Nilai-nilai tersebut diperlukan saat Anda memigrasikan data snapshot inkremental. Contoh:

    • "start_time_in_millis": 1519786844591

    • "end_time_in_millis": 1519786846236

Pulihkan indeks dan verifikasi data

Jalankan perintah berikut di Konsol Kibana kluster Alibaba Cloud Elasticsearch untuk memulihkan snapshot.

POST _snapshot/eric-snapshot-repository/snapshot_movies_1/_restore
{
    "indices": "movies"
}

Jalankan perintah berikut untuk memeriksa ketersediaan indeks movies.

GET movies/_recovery

Setelah pemulihan selesai, jumlah dokumen dalam indeks movies sama dengan jumlah di domain AWS ES.

Anda juga dapat memverifikasi data di Konsol Kibana kluster Alibaba Cloud Elasticsearch: di halaman Discover, pilih indeks movies. Dalam contoh ini, tiga dokumen dikembalikan setelah pemulihan (The Manchurian Candidate, Mars Attacks!, dan U.S. Marshals), yang sama dengan kluster sumber.

Langkah 4: Migrasikan snapshot inkremental dan alihkan lalu lintas

Setelah snapshot lengkap pertama dimigrasikan, data yang ditulis ke kluster sumber selama itu harus dikejar menggunakan snapshot inkremental. Sebelum alih bencana resmi, hentikan semua layanan yang dapat memodifikasi indeks di kluster sumber, lalu lakukan langkah ini untuk memastikan snapshot inkremental terakhir berisi semua data. Contoh berikut menulis 2 dokumen tambahan ke kluster sumber.

Buat snapshot inkremental di AWS ES

  1. Tulis data inkremental ke indeks movies di AWS ES.

    Dalam contoh ini, 2 dokumen ditulis. Setelah operasi penulisan, indeks movies berisi 5 dokumen dengan nilai _id dari 1 hingga 5. Jalankan GET movies/_count untuk memeriksa jumlah dokumen saat ini, yang digunakan untuk perbandingan dengan kluster tujuan.

  2. Buat snapshot inkremental.

    Jalankan perintah berikut untuk membuat snapshot secara manual. Untuk informasi selengkapnya, lihat Create a full snapshot in AWS ES.

    PUT _snapshot/eric-snapshot-repository/snapshot_movies_2
    {
    "indices": "movies"
    }

    Setelah snapshot dibuat, jalankan perintah berikut untuk memeriksa status snapshot.

    GET _snapshot/eric-snapshot-repository/snapshot_movies_2

    Lihat file snapshot baru di Konsol AWS S3.

    Bucket S3 mencantumkan semua file repositori snapshot. File baru yang sesuai dengan snapshot_movies_2 adalah snap-CWhlF7ShQZaKQlJasPE70A.dat, index.latest, index-1, dan meta-CWhlF7ShQZaKQlJasPE70A.dat.

Transfer data snapshot inkremental ke Alibaba Cloud OSS

Transfer data snapshot inkremental dari AWS S3 ke Alibaba Cloud OSS menggunakan ossimport. Bucket S3 sudah berisi file snapshot pertama. Kami menyarankan Anda mengatur isSkipExistFile ke true dalam file konfigurasi local_job.cfg untuk mentransfer hanya file snapshot baru.

isSkipExistFile adalah parameter boolean. Nilai default false menunjukkan bahwa objek yang sudah ada akan ditimpa. Jika nilainya true, objek yang sudah dimigrasikan akan dilewati berdasarkan nilai size dan LastModifiedTime objek tersebut. Parameter ini tidak berlaku ketika jobType bernilai audit.

Setelah transfer selesai, file snapshot baru muncul di OSS.

Penting

Setelah file inkremental ditransfer ke OSS, Alibaba Cloud Elasticsearch terus menggunakan konten repositori yang di-cache. Akibatnya, GET _snapshot/eric-snapshot-repository/_all mungkin masih hanya mengembalikan snapshot pertama. Di Konsol Kibana kluster Alibaba Cloud Elasticsearch, daftarkan ulang repositori OSS dengan nama yang sama: jalankan DELETE _snapshot/eric-snapshot-repository terlebih dahulu, lalu buat ulang repositori menggunakan perintah PUT yang dijelaskan di Langkah 3. Konfirmasi bahwa snapshot baru terlihat, lalu pulihkan snapshot inkremental tersebut.

File baru adalah index-1, index.latest, meta-CWhIF7ShQZaKQUasPE70A.dat, dan snap-CWhIF7ShQZaKQUasPE70A.dat.

Pulihkan snapshot inkremental dan alihkan lalu lintas layanan

Perintah untuk memulihkan snapshot inkremental sama dengan perintah di Langkah 3: Migrasikan snapshot lengkap pertama. Namun, Anda harus menutup indeks movies sebelum pemulihan dan membuka kembali indeks movies setelah pemulihan.

  • Tutup indeks movies.

    POST /movies/_close
  • Periksa status indeks movies dan pastikan statusnya berubah menjadi close. Anda tidak dapat menggunakan GET movies/_stats untuk mengkueri indeks yang ditutup karena permintaan akan mengembalikan index_closed_exception. Jalankan perintah berikut sebagai gantinya.

    GET _cat/indices/movies?v
  • Pulihkan snapshot inkremental.

    POST _snapshot/eric-snapshot-repository/snapshot_movies_2/_restore
    {
        "indices": "movies"
    }
  • Buka indeks movies.

    POST /movies/_open

Setelah pemulihan selesai, jalankan GET movies/_count untuk memverifikasi jumlah dokumen. Dalam contoh ini, kluster tujuan mengembalikan 5, yang sama dengan kluster AWS ES sumber. Anda kemudian dapat mengalihkan lalu lintas layanan ke kluster Alibaba Cloud Elasticsearch.

FAQ

Mengapa keunikan repositori diperlukan?

Jika beberapa kluster Elasticsearch, termasuk kluster sumber dan tujuan, menggunakan repositori snapshot yang sama secara bersamaan, masalah berikut akan terjadi:

  1. Konflik metadata: Beberapa kluster yang beroperasi pada repositori yang sama dapat menimpa atau merusak file metadata, sehingga snapshot tidak dapat diidentifikasi dengan benar.

  2. Penimpaan data: Snapshot dari kluster berbeda dapat saling menimpa file data, menyebabkan kehilangan atau kerusakan data.

  3. Kegagalan pemulihan: Elasticsearch tidak dapat menentukan data mana yang dimiliki oleh kluster mana, menyebabkan operasi pemulihan gagal atau memulihkan data yang salah.

Oleh karena itu, gunakan repositori snapshot khusus untuk setiap kluster Elasticsearch, atau gunakan base_path untuk memisahkan path dalam bucket yang sama. Jika beberapa kluster harus mengakses repositori yang sama, berikan izin tulis hanya ke satu kluster dan daftarkan repositori dengan "readonly": true pada kluster lain sehingga mereka melampirkan repositori dalam mode read-only.

Mengapa terjadi error saat Alibaba Cloud Elasticsearch memulihkan data indeks dari snapshot di OSS?

Penyebabnya mungkin karena path OSS data snapshot berisi nama direktori kosong yang diakhiri dengan garis miring (/) atau berisi karakter khusus lainnya. Misalnya, level abnormal bernama "/" ditampilkan di Konsol OSS.

Alibaba Cloud Elasticsearch tidak mendukung karakter semacam itu dalam path file snapshot. Untuk mengatasi masalah ini, gunakan ossbrowser untuk memindahkan data snapshot OSS ke folder dengan nama normal.

Referensi