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:
- Buat instance Cloud SQL untuk SQL Server dan tetapkan label resource tertentu untuk instance tersebut (
env=dev). - Buat dua topik Pub/Sub untuk bertindak sebagai sumber peristiwa bagi pemicu Eventarc Anda, dan sebagai broker pesan.
- 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). - 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.
- 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:
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:
-
Cloud Run functions
Cloud Run functions operate as Cloud Run services and are billed accordingly.
- Cloud Scheduler
- Cloud SQL for SQL Server
-
Eventarc
Cloud Run uses Eventarc for event delivery. Pricing for Eventarc is not included in the Cloud Run pricing.
- Pub/Sub
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
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.
- 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.
-
Instal Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
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 izinresourcemanager.projects.create. Pelajari cara memberikan peran.
-
Buat Google Cloud project:
gcloud projects create PROJECT_ID
Ganti
PROJECT_IDdengan nama untuk Google Cloud project yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_IDdengan nama project Google Cloud Anda.
-
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.
-
Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.
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 -
Menyiapkan autentikasi:
-
Pastikan Anda memiliki peran IAM Create Service Accounts
(
roles/iam.serviceAccountCreator) dan peran IAM Project IAM Admin (roles/resourcemanager.projectIamAdmin). Pelajari cara memberikan peran. -
Buat akun layanan:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Ganti
SERVICE_ACCOUNT_NAMEdengan nama untuk akun layanan. -
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 layananROLE: peran yang akan diberikan
-
Pastikan Anda memiliki peran IAM Create Service Accounts
(
-
Instal Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
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 izinresourcemanager.projects.create. Pelajari cara memberikan peran.
-
Buat Google Cloud project:
gcloud projects create PROJECT_ID
Ganti
PROJECT_IDdengan nama untuk Google Cloud project yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_IDdengan nama project Google Cloud Anda.
-
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.
-
Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.
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 -
Menyiapkan autentikasi:
-
Pastikan Anda memiliki peran IAM Create Service Accounts
(
roles/iam.serviceAccountCreator) dan peran IAM Project IAM Admin (roles/resourcemanager.projectIamAdmin). Pelajari cara memberikan peran. -
Buat akun layanan:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Ganti
SERVICE_ACCOUNT_NAMEdengan nama untuk akun layanan. -
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 layananROLE: peran yang akan diberikan
-
Pastikan Anda memiliki peran IAM Create Service Accounts
(
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
activationPolicyinstance menjadiALWAYS, yang akan mengaktifkan instance. - Fungsi stop memperbarui
activationPolicymenjadiNEVER, 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.
Download kode.
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Atau, Anda dapat mendownload contoh dalam file ZIP dan mengekstraknya.
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.
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
Jika Anda diminta untuk membuat repositori di region yang ditentukan, ketik
y.Pada perintah
Allow unauthenticated invocations, ketikn.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
Jika Anda diminta untuk membuat repositori di region yang ditentukan, ketik
y.Pada perintah
Allow unauthenticated invocations, ketikn.
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.
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
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.
Untuk menghentikan instance dengan label
env=dev, gunakan perintahgcloud pubsub topics publishuntuk memublikasikan pesan ke topik penghentian:gcloud pubsub topics publish stop-instance-event --message='{"label":"env=dev"}'
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.Untuk memulai instance dengan label
env=dev, publikasikan pesan ke topik start:gcloud pubsub topics publish start-instance-event --message='{"label":"env=dev"}'
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.
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
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.
Untuk menjalankan tugas dan menghentikan instance Cloud SQL, gunakan perintah
gcloud scheduler jobs run:gcloud scheduler jobs run shutdown-dev-instances --location="us-east1"
Pastikan kebijakan aktivasi
dev-instanceadalahNEVER:gcloud sql instances describe dev-instance --format="value(settings.activationPolicy)"
Jalankan tugas untuk memulai instance:
gcloud scheduler jobs run startup-dev-instances --location="us-east1"
Pastikan kebijakan aktivasi
dev-instanceadalahALWAYS: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.
- 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
- 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
- Hapus layanan Cloud Run:
gcloud run services delete startinstance --region=us-west1 --quiet gcloud run services delete stopinstance --region=us-west1 --quiet
- Hapus topik Pub/Sub:
gcloud pubsub topics delete start-instance-event gcloud pubsub topics delete stop-instance-event
- Hapus instance Cloud SQL:
gcloud sql instances delete dev-instance --quiet
- 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
- Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.