Menjadwalkan instance Cloud SQL untuk dimulai atau dihentikan

Anda dapat menggunakan Cloud Scheduler untuk memulai dan menghentikan instance Cloud SQL berdasarkan jadwal rutin. Misalnya, Anda mungkin ingin instance Anda berjalan hanya selama jam tertentu.

Tutorial ini menunjukkan cara memulai dan menghentikan instance Cloud SQL untuk SQL Server secara otomatis dengan membangun arsitektur berbasis peristiwa menggunakan produk Google Cloud .

Tujuan

Dalam tutorial ini, Anda akan membuat tugas Cloud Scheduler yang menjadwalkan instance Cloud SQL dengan label resource env=dev untuk dijalankan selama jam tertentu. Anda hanya akan menjadwalkan satu instance. Namun, arsitektur yang dijelaskan dalam tutorial ini dapat digunakan untuk menghentikan dan memulai beberapa instance dengan label resource env=dev.

Untuk mencapai tujuan ini, selesaikan langkah-langkah berikut:

  1. Buat instance Cloud SQL untuk SQL Server dan tetapkan label resource tertentu untuk instance tersebut (env=dev).
  2. Buat dua topik Pub/Sub untuk bertindak sebagai sumber peristiwa bagi pemicu Eventarc Anda, dan sebagai broker pesan.
  3. Buat dan deploy dua fungsi Cloud Run berbasis peristiwa yang dipicu melalui topik Pub/Sub. Saat dipicu, fungsi akan menelusuri instance Cloud SQL di project Anda yang cocok dengan label yang diberikan di payload pesan Pub/Sub (env=dev).
  4. Buat dan deploy dua pemicu Eventarc. Peristiwa topik Pub/Sub dirutekan ke fungsi Anda sebagai permintaan HTTP, dan konten pesan peristiwa diteruskan sebagai data input ke fungsi.
  5. Buat dua cron job Cloud Scheduler untuk memublikasikan pesan yang berisi label target ke topik Pub/Sub pada waktu tertentu. Jadwalkan instance untuk dimulai pukul 09.00 dan dihentikan pukul 17.00, dari Senin hingga Jumat.

Diagram berikut memberikan ringkasan arsitektur berbasis peristiwa:

Memulai dan menghentikan instance Cloud SQL sesuai jadwal
Memulai dan menghentikan instance Cloud SQL sesuai jadwal (klik diagram untuk memperbesar).

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.

Pengguna Google Cloud baru mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, baca bagian Pembersihan.

Sebelum memulai

Batasan keamanan yang ditentukan oleh organisasi mungkin mencegah Anda menyelesaikan langkah-langkah berikut. Untuk mengetahui informasi pemecahan masalah, lihat Mengembangkan aplikasi di lingkungan Google Cloud yang terbatas.

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Instal Google Cloud CLI.

  3. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  4. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  5. Buat atau pilih Google Cloud project.

    Peran yang diperlukan untuk memilih atau membuat project

    • Pilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project mana pun yang telah diberi peran.
    • Membuat project: Untuk membuat project, Anda memerlukan peran Project Creator (roles/resourcemanager.projectCreator), yang berisi izin resourcemanager.projects.create. Pelajari cara memberikan peran.
    • Buat Google Cloud project:

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk Google Cloud project yang Anda buat.

    • Pilih project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama project Google Cloud Anda.

  6. Jika Anda menggunakan project yang sudah ada untuk panduan ini, pastikan Anda memiliki izin yang diperlukan untuk menyelesaikan panduan ini. Jika berhasil membuat project baru, berarti Anda sudah memiliki izin yang diperlukan.

  7. Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.

  8. Aktifkan Cloud Build, Cloud Functions, Cloud Pub/Sub, Cloud Run Admin, Cloud Scheduler, Cloud SQL Admin, dan Eventarc API:

    Peran yang diperlukan untuk mengaktifkan API

    Untuk mengaktifkan API, Anda memerlukan izin serviceusage.services.enable. Jika Anda membuat project, kemungkinan Anda sudah memiliki izin ini melalui peran Pemilik (roles/owner). Jika tidak, Anda bisa mendapatkan izin ini melalui peran Admin Penggunaan Layanan (roles/serviceusage.serviceUsageAdmin). Pelajari cara memberikan peran.

    gcloud services enable cloudbuild.googleapis.com cloudfunctions.googleapis.com pubsub.googleapis.com run.googleapis.com cloudscheduler.googleapis.com sqladmin.googleapis.com eventarc.googleapis.com
  9. Menyiapkan autentikasi:

    1. Pastikan Anda memiliki peran IAM Create Service Accounts (roles/iam.serviceAccountCreator) dan peran IAM Project IAM Admin (roles/resourcemanager.projectIamAdmin). Pelajari cara memberikan peran.
    2. Buat akun layanan:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Ganti SERVICE_ACCOUNT_NAME dengan nama untuk akun layanan.

    3. Memberikan peran ke akun layanan. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut: roles/cloudbuild.builds.builder, roles/cloudsql.editor, roles/run.invoker:

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE

      Ganti kode berikut:

      • SERVICE_ACCOUNT_NAME: nama dari akun layanan.
      • PROJECT_ID: project ID dimana Anda membuat akun layanan
      • ROLE: peran yang akan diberikan
  10. Instal Google Cloud CLI.

  11. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  12. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  13. Buat atau pilih Google Cloud project.

    Peran yang diperlukan untuk memilih atau membuat project

    • Pilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project mana pun yang telah diberi peran.
    • Membuat project: Untuk membuat project, Anda memerlukan peran Project Creator (roles/resourcemanager.projectCreator), yang berisi izin resourcemanager.projects.create. Pelajari cara memberikan peran.
    • Buat Google Cloud project:

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk Google Cloud project yang Anda buat.

    • Pilih project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama project Google Cloud Anda.

  14. Jika Anda menggunakan project yang sudah ada untuk panduan ini, pastikan Anda memiliki izin yang diperlukan untuk menyelesaikan panduan ini. Jika berhasil membuat project baru, berarti Anda sudah memiliki izin yang diperlukan.

  15. Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.

  16. Aktifkan Cloud Build, Cloud Functions, Cloud Pub/Sub, Cloud Run Admin, Cloud Scheduler, Cloud SQL Admin, dan Eventarc API:

    Peran yang diperlukan untuk mengaktifkan API

    Untuk mengaktifkan API, Anda memerlukan izin serviceusage.services.enable. Jika Anda membuat project, kemungkinan Anda sudah memiliki izin ini melalui peran Pemilik (roles/owner). Jika tidak, Anda bisa mendapatkan izin ini melalui peran Admin Penggunaan Layanan (roles/serviceusage.serviceUsageAdmin). Pelajari cara memberikan peran.

    gcloud services enable cloudbuild.googleapis.com cloudfunctions.googleapis.com pubsub.googleapis.com run.googleapis.com cloudscheduler.googleapis.com sqladmin.googleapis.com eventarc.googleapis.com
  17. Menyiapkan autentikasi:

    1. Pastikan Anda memiliki peran IAM Create Service Accounts (roles/iam.serviceAccountCreator) dan peran IAM Project IAM Admin (roles/resourcemanager.projectIamAdmin). Pelajari cara memberikan peran.
    2. Buat akun layanan:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Ganti SERVICE_ACCOUNT_NAME dengan nama untuk akun layanan.

    3. Memberikan peran ke akun layanan. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut: roles/cloudbuild.builds.builder, roles/cloudsql.editor, roles/run.invoker:

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE

      Ganti kode berikut:

      • SERVICE_ACCOUNT_NAME: nama dari akun layanan.
      • PROJECT_ID: project ID dimana Anda membuat akun layanan
      • ROLE: peran yang akan diberikan

Membuat instance Cloud SQL

Untuk membuat instance Cloud SQL untuk SQL Server dengan label resource env=dev, gunakan perintah gcloud beta sql instances create berikut:

gcloud beta sql instances create dev-instance \
    --database-version=SQLSERVER_2019_EXPRESS \
    --region=us-west1 \
    --tier=db-custom-2-3840 \
    --root-password=YourStrongPassword123! \
    --labels=env=dev

Mungkin diperlukan waktu beberapa menit untuk membuat instance. Untuk mengetahui informasi selengkapnya, baca Membuat instance.

Membuat topik Pub/Sub

Untuk membuat dua topik Pub/Sub yang berfungsi sebagai sumber peristiwa untuk pemicu Eventarc, gunakan perintah gcloud pubsub topics create:

gcloud pubsub topics create start-instance-event
gcloud pubsub topics create stop-instance-event

Untuk mengetahui informasi selengkapnya, lihat Membuat topik.

Membuat dan men-deploy Cloud Run Functions

Buat dan deploy dua fungsi Cloud Run (Node.js) yang dipicu oleh Eventarc melalui topik Pub/Sub. Saat dipicu, fungsi akan menelusuri instance Cloud SQL di project Anda yang cocok dengan label yang diberikan dalam payload pesan Pub/Sub (env=dev):

  • Fungsi start memperbarui activationPolicy instance menjadi ALWAYS, yang akan mengaktifkan instance.
  • Fungsi stop memperbarui activationPolicy menjadi NEVER, yang akan mematikan instance.

Untuk mengetahui informasi selengkapnya, lihat artikel Menulis fungsi Cloud Run dan Pemicu fungsi Cloud Run.

Membuat fungsi

Buat fungsi Cloud Run berbasis peristiwa yang secara otomatis membatalkan marshal peristiwa yang sesuai dengan spesifikasi CloudEvents. Spesifikasi standar industri ini menjelaskan data peristiwa dengan cara yang umum.

Kode sumber Anda harus menentukan titik entri fungsi, yaitu kode yang berjalan saat Cloud Run memanggil fungsi Anda. Anda menentukan titik entri ini saat men-deploy fungsi.

  1. Download kode.

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git

    Atau, Anda dapat mendownload contoh dalam file ZIP dan mengekstraknya.

  2. Buka direktori yang benar.

    cd nodejs-docs-samples/functions/scheduleinstance/

Men-deploy fungsi berbasis peristiwa

Untuk men-deploy fungsi di Cloud Run, gunakan perintah gcloud run deploy.

  1. Deploy fungsi yang memulai instance Cloud SQL:

    gcloud run deploy startinstance \
        --source . \
        --function startInstanceEvent \
        --base-image nodejs24 \
        --region=us-west1 \
        --build-service-account=projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
  2. Jika Anda diminta untuk membuat repositori di region yang ditentukan, ketik y.

  3. Pada perintah Allow unauthenticated invocations, ketik n.

  4. Deploy fungsi yang mematikan instance Cloud SQL:

    gcloud run deploy stopinstance \
        --source . \
        --function stopInstanceEvent \
        --base-image nodejs24 \
        --region=us-west1 \
        --build-service-account=projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
  5. Jika Anda diminta untuk membuat repositori di region yang ditentukan, ketik y.

  6. Pada perintah Allow unauthenticated invocations, ketik n.

Setelah deployment selesai, Google Cloud CLI akan menampilkan URL tempat layanan berjalan.

Membuat pemicu Eventarc

Untuk membuat pemicu Eventarc yang merutekan peristiwa dari Pub/Sub, gunakan perintah gcloud eventarc triggers create. Setiap pesan yang dipublikasikan ke topik Pub/Sub akan memicu fungsi yang sesuai dan konten pesan diteruskan sebagai data input.

  1. Buat pemicu yang memulai instance Cloud SQL:

    gcloud eventarc triggers create start-instance-trigger \
        --location=us-west1 \
        --destination-run-service=startinstance \
        --destination-run-region=us-west1 \
        --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
        --transport-topic=start-instance-event \
        --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
  2. Buat pemicu yang menghentikan instance Cloud SQL:

    gcloud eventarc triggers create stop-instance-trigger \
        --location=us-west1 \
        --destination-run-service=stopinstance \
        --destination-run-region=us-west1 \
        --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
        --transport-topic=stop-instance-event \
        --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

Diperlukan waktu hingga 2 menit agar pemicu baru menjadi aktif.

Opsional: Verifikasi bahwa fungsi berfungsi

Anda dapat memverifikasi bahwa fungsi Anda berfungsi dengan memublikasikan pesan secara langsung ke topik Pub/Sub. Mungkin perlu waktu beberapa menit untuk memperbarui instance Cloud SQL.

  1. Untuk menghentikan instance dengan label env=dev, gunakan perintah gcloud pubsub topics publish untuk memublikasikan pesan ke topik penghentian:

    gcloud pubsub topics publish stop-instance-event --message='{"label":"env=dev"}'
  2. Untuk mengonfirmasi bahwa instance telah berhenti, periksa kebijakan aktivasinya dengan menggunakan perintah gcloud sql instances describe:

    gcloud sql instances describe dev-instance --format="value(settings.activationPolicy)"

    Output-nya harus NEVER.

  3. Untuk memulai instance dengan label env=dev, publikasikan pesan ke topik start:

    gcloud pubsub topics publish start-instance-event --message='{"label":"env=dev"}'
  4. Pastikan instance telah dimulai dengan memeriksa kebijakan aktivasinya:

    gcloud sql instances describe dev-instance --format="value(settings.activationPolicy)"

    Output-nya harus ALWAYS.

Buat tugas Cloud Scheduler

Buat tugas Cloud Scheduler yang memublikasikan pesan ke topik Pub/Sub sesuai jadwal rutin.

  1. Untuk membuat tugas yang berjalan pada pukul 09.00, Senin hingga Jumat, dan yang memulai instance, gunakan perintah gcloud scheduler jobs create:

    gcloud scheduler jobs create pubsub startup-dev-instances \
        --schedule '0 9 * * 1-5' \
        --topic start-instance-event \
        --message-body '{"label":"env=dev"}' \
        --time-zone 'America/Los_Angeles' \
        --location us-east1
  2. Buat tugas yang berjalan pada pukul 17.00, Senin hingga Jumat, dan yang menghentikan instance:

    gcloud scheduler jobs create pubsub shutdown-dev-instances \
        --schedule '0 17 * * 1-5' \
        --topic stop-instance-event \
        --message-body '{"label":"env=dev"}' \
        --time-zone 'America/Los_Angeles' \
        --location us-east1

Karena beberapa konfigurasi awal, tugas pertama yang dibuat dalam project dapat memerlukan waktu beberapa menit untuk dijalankan.

Opsional: Pastikan tugas berfungsi

Anda dapat menjalankan tugas Cloud Scheduler secara manual untuk memverifikasi bahwa tugas tersebut berhasil memicu fungsi mulai dan berhenti. Mungkin perlu waktu beberapa menit untuk memperbarui instance Cloud SQL.

  1. Untuk menjalankan tugas dan menghentikan instance Cloud SQL, gunakan perintah gcloud scheduler jobs run:

    gcloud scheduler jobs run shutdown-dev-instances --location="us-east1"
  2. Pastikan kebijakan aktivasi dev-instance adalah NEVER:

    gcloud sql instances describe dev-instance --format="value(settings.activationPolicy)"
  3. Jalankan tugas untuk memulai instance:

    gcloud scheduler jobs run startup-dev-instances --location="us-east1"
  4. Pastikan kebijakan aktivasi dev-instance adalah ALWAYS:

    gcloud sql instances describe dev-instance --format="value(settings.activationPolicy)"

Pembersihan

Agar tidak dikenai biaya untuk resource yang digunakan dalam tutorial ini, bersihkan resource dengan menghapusnya.

  1. Hapus tugas Cloud Scheduler:
    gcloud scheduler jobs delete startup-dev-instances --location=us-east1 --quiet
    gcloud scheduler jobs delete shutdown-dev-instances --location=us-east1 --quiet
  2. Hapus pemicu Eventarc:
    gcloud eventarc triggers delete start-instance-trigger --location=us-west1 --quiet
    gcloud eventarc triggers delete stop-instance-trigger --location=us-west1 --quiet
  3. Hapus layanan Cloud Run:
    gcloud run services delete startinstance --region=us-west1 --quiet
    gcloud run services delete stopinstance --region=us-west1 --quiet
  4. Hapus topik Pub/Sub:
    gcloud pubsub topics delete start-instance-event
    gcloud pubsub topics delete stop-instance-event
  5. Hapus instance Cloud SQL:
    gcloud sql instances delete dev-instance --quiet
  6. Atau, Anda dapat menghapus project Google Cloud untuk menghindari tagihan. Menghapus project Google Cloud akan menghentikan penagihan untuk semua resource yang digunakan dalam project tersebut.

    Menghapus Google Cloud project:

    gcloud projects delete PROJECT_ID

Langkah berikutnya