Membuat clone instance

Halaman ini menjelaskan cloning, dan membuat clone instance.

Ringkasan

Meng-clone instance Cloud SQL akan membuat instance baru yang merupakan salinan dari instance sumber. Instance baru sepenuhnya independen dari instance sumber.

Pertanyaan umum (FAQ)

Pertanyaan Jawaban
Apakah cloning dapat memengaruhi performa? Tidak. Cloning tidak memiliki dampak performa pada instance sumber.
Apakah cadangan disalin ke instance baru? Tidak. Instance baru akan membuat cadangan otomatis baru. Cadangan manual tidak disalin dari instance sumber.
Apakah instance baru memiliki alamat IP atau alamat yang sama? Tidak. Instance baru memiliki alamat IP atau alamat baru.
Apakah instance baru memiliki setelan konfigurasi yang sama? Ya. Instance baru memiliki setelan yang sama seperti flag database, opsi konektivitas, jenis mesin, serta setelan penyimpanan dan memori.
Apakah replika disalin ke instance baru? Tidak. Anda perlu membuat replika baru untuk instance baru.
Bisakah Anda meng-clone replika? Tidak. Anda tidak dapat meng-clone replika.
Bisakah Anda membuat clone dari waktu sebelumnya? Ya. Pemulihan point-in-time menggunakan cloning untuk memulihkan instance dari waktu sebelumnya. Proses ini membantu memulihkan database Anda dari peristiwa penghancuran.
Apakah setelan pemeliharaan instance sumber otomatis disalin ke instance clone? Tidak. Anda perlu mengonfigurasi setelan pemeliharaan untuk instance clone.
Dapatkah Anda membuat clone instance saat zona untuk instance tersebut tidak tersedia? Ya. Jika meng-clone instance zonal, Anda dapat menentukan zona utama yang berbeda untuk instance tersebut. Jika meng-clone instance ketersediaan tinggi (regional), Anda dapat menentukan zona utama dan sekunder yang berbeda untuk instance tersebut.
Dapatkah Anda membuat clone database ke project lain? Tidak. Anda tidak dapat membuat clone database ke project lain.
Dapatkah Anda membuat clone instance yang pernah di-clone sebelumnya? Ya. Anda dapat membuat clone instance yang telah di-clone dari instance lain.
Apakah pengguna database disalin ke instance baru? Ya, pengguna database disalin ke instance baru. Sandi untuk pengguna tersebut juga akan disalin sehingga tidak perlu dibuat ulang.

Membuat clone instance

Anda dapat meng-clone instance Cloud SQL menggunakan konsol Google Cloud, gcloud CLI, Terraform, atau API.

Konsol

  1. Di konsol Google Cloud, buka halaman Instance Cloud SQL.

    Buka Instance Cloud SQL

  2. Temukan baris instance yang akan di-clone.
  3. Di kolom Tindakan, klik menu Tindakan Lainnya.
  4. Klik Buat clone.
  5. Pada halaman Buat clone, update instance ID jika perlu, dan klik Buat clone, sehingga Clone status instance saat ini dipilih.

    Anda akan dikembalikan ke halaman listingan instance saat clone melakukan inisialisasi.

gcloud

Untuk meng-clone instance, gunakan perintah gcloud sql instances clone:

gcloud sql instances clone SOURCE_INSTANCE_NAME DESTINATION_INSTANCE_NAME \
--project PROJECT_ID \
--preferred-zone ZONE_NAME \
--preferred-secondary-zone SECONDARY_ZONE_NAME

Lakukan penggantian berikut:

  • SOURCE_INSTANCE_NAME: nama instance Cloud SQL yang akan di-clone.
  • DESTINATION_INSTANCE_NAME: nama instance yang di-clone.
  • PROJECT_ID: ID atau nomor project project Google Cloud yang berisi instance sumber dan tujuan.
  • ZONE_NAME: Opsional. Nama zona utama untuk instance tujuan. Gunakan ini jika Anda ingin instance tujuan berada di zona utama yang berbeda dengan instance Cloud SQL yang Anda clone. Untuk instance regional, zona ini menggantikan zona utama, tetapi zona sekunder tetap sama dengan instance sumber.
  • SECONDARY_ZONE_NAME: Opsional. Nama zona sekunder untuk instance tujuan. Gunakan ini untuk menentukan zona sekunder yang berbeda untuk instance Cloud SQL regional yang ingin Anda clone.

Jika Anda menggunakan parameter --preferred-zone dan --preferred-secondary-zone, kondisi berikut akan berlaku:

  • Zona utama dan sekunder harus berupa zona yang valid.
  • Kedua zona harus berada di region yang sama dengan instance sumber.
  • Zona utama dan sekunder harus berbeda.
  • Untuk instance zonal, Anda tidak dapat menggunakan parameter --preferred-secondary-zone. Jika Anda melakukannya, proses untuk meng-clone instance akan gagal.
  • Jika Anda tidak menentukan nilai untuk parameter --preferred-zone atau --preferred-secondary-zone, instance yang di-clone akan memiliki zona primer dan sekunder yang sama dengan instance sumber.

Untuk menjalankan perintah gcloud sql instances clone, Anda harus memiliki izin cloudsql.instances.clone. Untuk mengetahui informasi selengkapnya tentang izin yang diperlukan guna menjalankan perintah gcloud CLI, lihat Izin Cloud SQL.

Terraform

Untuk meng-clone instance, gunakan resource Terraform

resource "google_sql_database_instance" "clone" {
  name             = "postgres-instance-clone-name"
  region           = "us-central1"
  database_version = "POSTGRES_12"
  clone {
    source_instance_name = google_sql_database_instance.source.id
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

Menerapkan perubahan

Untuk menerapkan konfigurasi Terraform di project Google Cloud, selesaikan langkah-langkah di bagian berikut.

Menyiapkan Cloud Shell

  1. Luncurkan Cloud Shell.
  2. Tetapkan project Google Cloud default tempat Anda ingin menerapkan konfigurasi Terraform.

    Anda hanya perlu menjalankan perintah ini sekali per project, dan dapat dijalankan di direktori mana pun.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Variabel lingkungan akan diganti jika Anda menetapkan nilai eksplisit dalam file konfigurasi Terraform.

Menyiapkan direktori

Setiap file konfigurasi Terraform harus memiliki direktorinya sendiri (juga disebut modul root).

  1. Di Cloud Shell, buat direktori dan file baru di dalam direktori tersebut. Nama file harus memiliki ekstensi .tf—misalnya main.tf. Dalam tutorial ini, file ini disebut sebagai main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Jika mengikuti tutorial, Anda dapat menyalin kode contoh di setiap bagian atau langkah.

    Salin kode contoh ke dalam main.tf yang baru dibuat.

    Atau, salin kode dari GitHub. Tindakan ini direkomendasikan jika cuplikan Terraform adalah bagian dari solusi menyeluruh.

  3. Tinjau dan ubah contoh parameter untuk diterapkan pada lingkungan Anda.
  4. Simpan perubahan Anda.
  5. Lakukan inisialisasi Terraform. Anda hanya perlu melakukan ini sekali per direktori.
    terraform init

    Secara opsional, untuk menggunakan versi penyedia Google terbaru, sertakan opsi -upgrade:

    terraform init -upgrade

Menerapkan perubahan

  1. Tinjau konfigurasi dan pastikan resource yang akan dibuat atau diupdate oleh Terraform sesuai yang Anda inginkan:
    terraform plan

    Koreksi konfigurasi jika diperlukan.

  2. Terapkan konfigurasi Terraform dengan menjalankan perintah berikut dan memasukkan yes pada prompt:
    terraform apply

    Tunggu hingga Terraform menampilkan pesan "Apply complete!".

  3. Buka project Google Cloud Anda untuk melihat hasilnya. Di Konsol Google Cloud, buka resource Anda di UI untuk memastikan bahwa Terraform telah membuat atau mengupdatenya.

Menghapus perubahan

Untuk menghapus perubahan Anda, lakukan langkah-langkah berikut:

  1. Untuk menonaktifkan perlindungan penghapusan, di file konfigurasi Terraform Anda, tetapkan argumen deletion_protection ke false.
    deletion_protection =  "false"
  2. Terapkan konfigurasi Terraform dengan menjalankan perintah berikut dan memasukkan yes pada prompt:
    terraform apply
  1. Hapus resource yang sebelumnya diterapkan dengan konfigurasi Terraform Anda dengan menjalankan perintah berikut dan memasukkan yes pada prompt:

    terraform destroy

REST v1

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: ID atau nomor project project Google Cloud yang berisi instance sumber dan tujuan.
  • SOURCE_INSTANCE_NAME: nama instance Cloud SQL yang akan di-clone.
  • DESTINATION_INSTANCE_NAME: nama instance yang di-clone.
  • ZONE_NAME: Opsional. Nama zona utama untuk instance tujuan. Gunakan ini jika Anda ingin instance tujuan berada di zona utama yang berbeda dengan instance Cloud SQL yang Anda clone. Untuk instance regional, zona ini menggantikan zona utama, tetapi zona sekunder tetap sama dengan instance sumber.
  • SECONDARY_ZONE_NAME: Opsional. Nama zona sekunder untuk instance tujuan. Gunakan ini untuk menentukan zona sekunder yang berbeda untuk instance Cloud SQL regional yang ingin Anda clone.

Metode HTTP dan URL:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/SOURCE_INSTANCE_NAME/clone

Meminta isi JSON:

{
  "cloneContext":
  {
    "destinationInstanceName": "DESTINATION_INSTANCE_NAME",
    "preferredZone": "ZONE_NAME",
    "preferredSecondaryZone": "SECONDARY_ZONE_NAME"
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan menerima respons JSON yang mirip dengan yang berikut ini:

Jika Anda menggunakan parameter preferredZone dan preferredSecondaryZone, kondisi berikut akan berlaku:

  • Zona utama dan sekunder harus berupa zona yang valid.
  • Kedua zona harus berada di region yang sama dengan instance sumber.
  • Zona utama dan sekunder harus berbeda.
  • Untuk instance zonal, Anda tidak dapat menggunakan parameter preferredSecondaryZone. Jika Anda melakukannya, proses untuk meng-clone instance akan gagal.
  • Jika Anda tidak menentukan nilai untuk parameter preferredZone atau preferredSecondaryZone, instance yang di-clone akan memiliki zona primer dan sekunder yang sama dengan instance sumber.

Untuk menggunakan metode API instances.clone, Anda harus memiliki izin cloudsql.instances.clone. Untuk mengetahui informasi selengkapnya tentang izin yang diperlukan untuk menggunakan metode API, lihat Izin Cloud SQL.

REST v1beta4

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: ID atau nomor project project Google Cloud yang berisi instance sumber dan tujuan.
  • SOURCE_INSTANCE_NAME: nama instance Cloud SQL yang akan di-clone.
  • DESTINATION_INSTANCE_NAME: nama instance yang di-clone.
  • ZONE_NAME: Opsional. Nama zona utama untuk instance tujuan. Gunakan ini jika Anda ingin instance tujuan berada di zona utama yang berbeda dengan instance Cloud SQL yang Anda clone. Untuk instance regional, zona ini menggantikan zona utama, tetapi zona sekunder tetap sama dengan instance sumber.
  • SECONDARY_ZONE_NAME: Opsional. Nama zona sekunder untuk instance tujuan. Gunakan ini untuk menentukan zona sekunder yang berbeda untuk instance Cloud SQL regional yang ingin Anda clone.

Metode HTTP dan URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/SOURCE_INSTANCE_NAME/clone

Meminta isi JSON:

{
  "cloneContext":
  {
    "destinationInstanceName": "DESTINATION_INSTANCE_NAME",
    "preferredZone": "ZONE_NAME",
    "preferredSecondaryZone": "SECONDARY_ZONE_NAME"
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan menerima respons JSON yang mirip dengan yang berikut ini:

Jika Anda menggunakan parameter preferredZone dan preferredSecondaryZone, kondisi berikut akan berlaku:

  • Zona utama dan sekunder harus berupa zona yang valid.
  • Kedua zona harus berada di region yang sama dengan instance sumber.
  • Zona utama dan sekunder harus berbeda.
  • Untuk instance zonal, Anda tidak dapat menggunakan parameter preferredSecondaryZone. Jika Anda melakukannya, proses untuk meng-clone instance akan gagal.
  • Jika Anda tidak menentukan nilai untuk parameter preferredZone atau preferredSecondaryZone, instance yang di-clone akan memiliki zona primer dan sekunder yang sama dengan instance sumber.

Untuk menggunakan metode API instances.clone, Anda harus memiliki izin cloudsql.instances.clone. Untuk mengetahui informasi selengkapnya tentang izin yang diperlukan untuk menggunakan metode API, lihat Izin Cloud SQL.

Meng-clone instance yang menggunakan alamat IP internal

Jika instance Cloud SQL Anda menggunakan alamat IP internal, Anda dapat secara opsional menentukan sebuah rentang IP yang dialokasikan untuk alamat IP baru clone tersebut. Contoh, google-managed-services-default.

gcloud

Meng-clone instance, yang secara opsional menentukan rentang IP yang dialokasikan yang ingin digunakan:

gcloud sql instances clone SOURCE_INSTANCE_NAME TARGET_INSTANCE_NAME \
--allocated-ip-range-name ALLOCATED_IP_RANGE_NAME

Pengguna atau akun layanan yang menjalankan perintah gcloud sql instances clone harus memiliki izin cloudsql.instances.clone. Untuk mengetahui informasi selengkapnya tentang izin yang diperlukan guna menjalankan perintah gcloud CLI, lihat Izin Cloud SQL.

REST v1

Meng-clone instance, yang secara opsional menentukan rentang IP yang dialokasikan yang ingin digunakan:

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • project-id: project ID
  • source-instance-id: ID instance sumber
  • target-instance-id: ID instance target
  • allocated-ip-range-name: nama rentang IP yang dialokasikan

Metode HTTP dan URL:

POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/source-instance-id/clone

Meminta isi JSON:

{
  "cloneContext":
  {
    "destinationInstanceName": "target-instance-id",
    "allocatedIpRange": "allocated-ip-range-name"
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan menerima respons JSON yang mirip dengan yang berikut ini:

Pengguna atau akun layanan yang menggunakan metode API instances.clone harus memiliki izin cloudsql.instances.clone. Untuk mengetahui informasi selengkapnya tentang izin yang diperlukan untuk menggunakan metode API, lihat Izin Cloud SQL.

REST v1beta4

Meng-clone instance, yang secara opsional menentukan rentang IP yang dialokasikan yang ingin digunakan:

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • project-id: project ID
  • source-instance-id: ID instance sumber
  • target-instance-id: ID instance target
  • allocated-ip-range-name: nama rentang IP yang dialokasikan

Metode HTTP dan URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/source-instance-id/clone

Meminta isi JSON:

{
  "cloneContext":
  {
    "destinationInstanceName": "target-instance-id",
    "allocatedIpRange": "allocated-ip-range-name"
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan menerima respons JSON yang mirip dengan yang berikut ini:

Pengguna atau akun layanan yang menggunakan metode API instances.clone harus memiliki izin cloudsql.instances.clone. Untuk informasi selengkapnya tentang izin yang diperlukan untuk menggunakan metode API, lihat Izin Cloud SQL.

Jika Anda tidak menentukan rentang IP yang dialokasikan, perilaku berikut akan diterapkan:

  • Jika instance sumber dibuat dengan rentang yang ditentukan, instance yang di-clone akan dibuat dalam rentang yang sama.
  • Jika instance sumber tidak dibuat dengan rentang yang ditentukan, instance yang di-clone akan dibuat dalam rentang acak.

Memecahkan masalah

Masalah Pemecahan masalah
Cloning gagal dengan error constraints/sql.restrictAuthorizedNetworks. Operasi cloning diblokir oleh konfigurasi Authorized Networks. Authorized Networks dikonfigurasi untuk alamat IP publik di bagian Konektivitas pada konsol Google Cloud, dan cloning tidak diizinkan karena pertimbangan keamanan.

Hapus semua entri Authorized Networks dari instance Cloud SQL jika memungkinkan. Atau, buat replika tanpa entri Authorized Networks apapun.

Pesan error: Failed to create subnetwork. Couldn't find free blocks in allocated IP ranges. Please allocate new ranges for this service provider. Help Token: [help-token-id].

Anda mencoba menggunakan Konsol Google Cloud untuk meng-clone instance dengan alamat IP pribadi, tetapi Anda tidak menentukan rentang IP yang dialokasikan yang ingin digunakan dan instance sumber tidak dibuat dengan rentang yang ditentukan. Akibatnya, instance yang di-clone dibuat dalam rentang acak.

Gunakan gcloud untuk meng-clone instance dan memberikan nilai untuk parameter
--allocated-ip-range-name. Untuk informasi selengkapnya, lihat Meng-clone instance dengan IP pribadi.