Tutorial ini menunjukkan cara menggunakan fungsi Cloud Scheduler dan Cloud Run untuk memulai dan menghentikan instance Compute Engine secara otomatis sesuai jadwal reguler menggunakan label resource.
Tujuan
- Menulis dan men-deploy serangkaian fungsi dengan fungsi Cloud Run yang memulai dan menghentikan instance Compute Engine.
- Buat kumpulan tugas dengan Cloud Scheduler yang menjadwalkan instance
dengan label resource
dev
untuk berjalan pukul 09.00-17.00, Senin-Jumat agar sesuai dengan jam buka standar.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloud yang dapat ditagih berikut:
- Cloud Scheduler
- Cloud Run functions
- Pub/Sub
- Compute Engine
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Sebelum memulai
- Siapkan lingkungan Anda untuk Cloud Scheduler.
-
Enable the Cloud Run functions, Pub/Sub, and Compute Engine APIs.
Arsitektur aplikasi
Solusi ini mencakup komponen Google Cloud berikut:
- Instance Compute Engine yang ingin kita jalankan sesuai jadwal.
- Fungsi Cloud Run untuk memulai dan menghentikan instance yang ingin kita jadwalkan.
- Pesan Pub/Sub yang dikirim dan diterima untuk setiap peristiwa mulai dan berhenti.
- Tugas Cloud Scheduler untuk melakukan panggilan pada jadwal yang ditetapkan untuk memulai dan menghentikan instance.
Persyaratan lokasi
Beberapa komponen hanya didukung di wilayah tertentu:
- Instance Compute Engine: didukung di semua region yang tercantum di Region dan zona.
- Fungsi Cloud Run: didukung di region yang tercantum di Lokasi.
- Pesan Pub/Sub: didukung secara global karena Pub/Sub adalah layanan global.
- Tugas Cloud Scheduler dengan target Pub/Sub: didukung di lokasi Google Cloud mana pun.
Mengapa tidak menggunakan HTTP, bukan Pub/Sub?
Anda dapat menyederhanakan arsitektur ini dengan menggunakan Pemicu HTTP fungsi Cloud Run, bukan Pemicu Pub/Sub.
Tutorial ini menggunakan Pub/Sub sebagai pemicu fungsi Cloud Run karena metode ini sebelumnya lebih aman daripada menggunakan HTTP. Namun, HTTP juga merupakan pilihan yang valid dan kini dapat diamankan dengan mewajibkan autentikasi.
Untuk mempelajari cara mengamankan fungsi Cloud Run, lihat ringkasan keamanan fungsi Cloud Run. Untuk perbandingan antara pemicu HTTP dan Pub/Sub, lihat dokumentasi pemicu fungsi Cloud Run.
Menyiapkan instance Compute Engine
Konsol
- Buka halaman VM Instances di Konsol Google Cloud.
Buka halaman instance VM. - Klik Create instance.
- Tetapkan Name ke
dev-instance
. - Di bagian Labels, klik Add labels.
- Klik Tambahkan label.
- Masukkan
env
untuk Kunci dandev
untuk Nilai. - Untuk Region, pilih us-west1.
- Untuk Zone, pilih us-west1-b.
- Klik Simpan.
- Klik Create di bagian bawah halaman.
gcloud
gcloud compute instances create dev-instance \ --network default \ --zone us-west1-b \ --labels=env=dev
Men-deploy fungsi yang dipicu oleh Pub/Sub melalui fungsi Cloud Run
Membuat dan men-deploy fungsi
Konsol
Buat fungsi awal.
- Buka halaman fungsi Cloud Run di konsol Google Cloud.
Buka halaman fungsi Cloud Run. - Klik Buat fungsi.
- Untuk Environment, pilih 1st gen.
- Tetapkan Function name ke
startInstancePubSub
. - Biarkan Region tetap pada nilai defaultnya.
- Untuk Trigger type, pilih Cloud Pub/Sub.
- Untuk Select a Cloud Pub/Sub topic, klik Create a topic.
- Dialog Create topic akan muncul.
- Di bagian Topic ID, masukkan
start-instance-event
. - Klik Create untuk menyelesaikan dialog.
- Di bagian Topic ID, masukkan
- Klik Simpan di bagian bawah kotak Pemicu.
- Klik Next di bagian bawah halaman.
- Untuk Runtime, pilih Node.js 16 atau yang lebih baru.
- Untuk Entry point, masukkan
startInstancePubSub
. - Di sisi kiri editor kode, pilih index.js.
Ganti kode awal dengan kode berikut:
Di sisi kiri editor kode, pilih package.json.
Ganti kode awal dengan kode berikut:
Klik Deploy di bagian bawah halaman.
Buat fungsi berhenti.
- Anda akan berada di halaman Cloud Run functions di konsol Google Cloud.
- Klik Buat fungsi.
- Untuk Environment, pilih 1st gen.
- Tetapkan Function name ke
stopInstancePubSub
. - Biarkan Region tetap pada nilai defaultnya.
- Untuk Trigger type, pilih Cloud Pub/Sub.
- Untuk Select a Cloud Pub/Sub topic, klik Create a topic.
- Dialog Create topic akan muncul.
- Di bagian Topic ID, masukkan
stop-instance-event
. - Klik Create untuk menyelesaikan dialog.
- Di bagian Topic ID, masukkan
- Klik Simpan di bagian bawah kotak Pemicu.
- Klik Next di bagian bawah halaman.
- Untuk Runtime, pilih Node.js 16 atau yang lebih baru.
- Untuk Entry point, masukkan
stopInstancePubSub
. - Di sisi kiri editor kode, pilih index.js.
Ganti kode awal dengan kode berikut:
Di sisi kiri editor kode, pilih package.json.
Ganti kode awal dengan kode berikut:
Klik Deploy di bagian bawah halaman.
gcloud
Buat topik Pub/Sub.
gcloud pubsub topics create start-instance-event
gcloud pubsub topics create stop-instance-event
Mendapatkan kode
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/
Buat fungsi mulai dan berhenti.
Anda harus berada di direktori
nodejs-docs-samples/functions/scheduleinstance/
.
gcloud functions deploy startInstancePubSub \ --trigger-topic start-instance-event \ --runtime nodejs18 \ --allow-unauthenticated
gcloud functions deploy stopInstancePubSub \ --trigger-topic stop-instance-event \ --runtime nodejs18 \ --allow-unauthenticated
(Opsional) Memverifikasi fungsi berfungsi
Konsol
Menghentikan instance
- Buka halaman fungsi Cloud Run di konsol Google Cloud.
Buka halaman fungsi Cloud Run. - Klik fungsi bernama
stopInstancePubSub
. - Anda akan melihat sejumlah tab: Umum, Pemicu, Sumber, Izin, dan Pengujian. Klik tab Pengujian.
Untuk Peristiwa pemicu, masukkan hal berikut:
{"data":"eyJ6b25lIjoidXMtd2VzdDEtYiIsICJsYWJlbCI6ImVudj1kZXYifQo="}
Ini hanyalah string berenkode base64 untuk
{"zone":"us-west1-b", "label":"env=dev"}
Jika Anda ingin mengenkode string Anda sendiri, jangan ragu untuk menggunakan alat encoding base64 online.
Klik tombol Uji fungsi.
Setelah selesai berjalan, Anda akan melihat
Successfully stopped instance dev-instance
dicetak di bagian Output. Mungkin diperlukan waktu hingga 60 detik untuk menyelesaikan proses.Jika Anda melihat
error: 'Error: function failed to load.'
, cukup tunggu 10 detik atau lebih hingga fungsi selesai di-deploy, lalu coba lagi.Jika Anda melihat
error: 'Error: function execution attempt timed out.'
, cukup lanjutkan ke langkah berikutnya untuk melihat apakah instance hanya memerlukan waktu lama untuk dimatikan.Jika selesai berjalan, tetapi tidak menampilkan apa pun, mungkin juga telah habis waktunya. Lanjutkan ke langkah berikutnya untuk melihat apakah instance hanya memerlukan waktu lama untuk dimatikan.
Buka halaman VM Instances di Konsol Google Cloud.
Buka halaman instance VM.Pastikan instance bernama
dev-instance
memiliki kotak abu-abu di samping namanya, yang menunjukkan bahwa instance telah dihentikan. Mungkin perlu waktu hingga 30 detik untuk menyelesaikan proses penonaktifan.- Jika sepertinya tidak selesai, coba klik Muat ulang di bagian atas halaman.
Memulai instance
- Buka halaman fungsi Cloud Run di konsol Google Cloud.
Buka halaman fungsi Cloud Run. - Klik fungsi bernama
startInstancePubSub
. - Anda akan melihat sejumlah tab: Umum, Pemicu, Sumber, Izin, dan Pengujian. Klik tab Pengujian.
Untuk Peristiwa pemicu, masukkan hal berikut:
{"data":"eyJ6b25lIjoidXMtd2VzdDEtYiIsICJsYWJlbCI6ImVudj1kZXYifQo="}
- Sekali lagi, ini hanyalah string berenkode base64 untuk
{"zone":"us-west1-b", "label":"env=dev"}
- Sekali lagi, ini hanyalah string berenkode base64 untuk
Klik tombol Uji fungsi.
Setelah selesai berjalan, Anda akan melihat
Successfully started instance dev-instance
dicetak di bagian Output.Buka halaman VM Instances di Konsol Google Cloud.
Buka halaman instance VM.Pastikan instance bernama
dev-instance
memiliki tanda centang hijau di samping namanya, yang menunjukkan bahwa instance tersebut sedang berjalan. Mungkin perlu waktu hingga 30 detik untuk menyelesaikan proses mulai.
gcloud
Menghentikan instance
Panggil fungsi untuk menghentikan instance.
gcloud functions call stopInstancePubSub \ --data '{"data":"eyJ6b25lIjoidXMtd2VzdDEtYiIsICJsYWJlbCI6ImVudj1kZXYifQo="}'
Ini hanyalah string berenkode base64 untuk
{"zone":"us-west1-b", "label":"env=dev"}
Jika Anda ingin mengenkode string Anda sendiri, silakan gunakan alat apa pun. Berikut adalah contoh penggunaan alat command line
base64
:echo '{"zone":"us-west1-b", "label":"env=dev"}' | base64
eyJ6b25lIjoidXMtd2VzdDEtYiIsICJsYWJlbCI6ImVudj1kZXYifQo=
Setelah fungsi selesai, Anda akan melihat hal berikut:
result: Successfully stopped instance dev-instance
Mungkin diperlukan waktu hingga 60 detik untuk menyelesaikan proses.
Jika Anda mendapatkan error:
error: 'Error: function failed to load.`
Cukup tunggu sekitar 10 detik hingga fungsi selesai di-deploy, lalu coba lagi.
Jika Anda mendapatkan error:
error: `Error: function execution attempt timed out.`
Lanjutkan ke langkah berikutnya untuk melihat apakah instance hanya memerlukan waktu lama untuk dinonaktifkan.
Jika Anda tidak mendapatkan hasil, fungsi mungkin baru saja habis waktunya. Lanjutkan ke langkah berikutnya untuk melihat apakah instance hanya memerlukan waktu lama untuk dinonaktifkan.
Pastikan instance memiliki status
TERMINATED
. Mungkin perlu waktu hingga 30 detik untuk menyelesaikan proses penonaktifan.gcloud compute instances describe dev-instance \ --zone us-west1-b \ | grep status
status: TERMINATED
Memulai instance
Panggil fungsi untuk memulai instance.
gcloud functions call startInstancePubSub \ --data '{"data":"eyJ6b25lIjoidXMtd2VzdDEtYiIsICJsYWJlbCI6ImVudj1kZXYifQo="}'
- Sekali lagi, ini hanyalah string berenkode base64 untuk
{"zone":"us-west1-b", "label":"env=dev"}
Setelah fungsi selesai, Anda akan melihat hal berikut:
result: Successfully started instance dev-instance
- Sekali lagi, ini hanyalah string berenkode base64 untuk
Pastikan instance memiliki status
RUNNING
. Mungkin perlu waktu hingga 30 detik untuk menyelesaikan proses mulai.gcloud compute instances describe dev-instance \ --zone us-west1-b \ | grep status
status: RUNNING
Menyiapkan tugas Cloud Scheduler untuk memanggil Pub/Sub
Membuat tugas
Konsol
Buat tugas mulai.
- Buka halaman Cloud Scheduler di konsol Google Cloud.
Buka halaman Cloud Scheduler. - Klik Buat tugas.
- Biarkan region default.
- Tetapkan Name ke
startup-dev-instances
. - Untuk Frequency, masukkan
0 9 * * 1-5
.- Tugas ini akan dijalankan pada pukul 09.00 setiap hari Senin-Jumat.
- Untuk Zona waktu, pilih negara dan zona waktu yang diinginkan. Contoh
ini akan menggunakan
United States
danLos Angeles
. - Klik Lanjutkan.
- Untuk Target type, pilih
Pub/Sub
. - Pilih
start-instance-event
dari dropdown topik. - Untuk Pesan, masukkan hal berikut:
{"zone":"us-west1-b","label":"env=dev"}
- Klik Create.
Buat tugas berhenti.
- Anda akan berada di halaman Cloud Scheduler di konsol Google Cloud.
- Klik Create Job.
- Biarkan region default, lalu klik Next di bagian bawah halaman.
- Tetapkan Name ke
shutdown-dev-instances
. - Untuk Frequency, masukkan
0 17 * * 1-5
.- Tugas ini akan dijalankan pada pukul 17.00 setiap hari Senin-Jumat.
- Untuk Zona waktu, pilih negara dan zona waktu yang diinginkan. Contoh
ini akan menggunakan
United States
danLos Angeles
. - Klik Lanjutkan.
- Untuk Target type, pilih
Pub/Sub
. - Pilih
stop-instance-event
dari dropdown topik. - Untuk Pesan, masukkan hal berikut:
{"zone":"us-west1-b","label":"env=dev"}
- Klik Create.
gcloud
Buat tugas mulai.
gcloud scheduler jobs create pubsub startup-dev-instances \ --schedule '0 9 * * 1-5' \ --topic start-instance-event \ --message-body '{"zone":"us-west1-b", "label":"env=dev"}' \ --time-zone 'America/Los_Angeles' \ --location us-central1
Buat tugas berhenti.
gcloud scheduler jobs create pubsub shutdown-dev-instances \ --schedule '0 17 * * 1-5' \ --topic stop-instance-event \ --message-body '{"zone":"us-west1-b", "label":"env=dev"}' \ --time-zone 'America/Los_Angeles' \ --location us-central1
(Opsional) Memverifikasi bahwa tugas berfungsi
Konsol
Menghentikan instance
- Buka halaman Cloud Scheduler di konsol Google Cloud.
Buka halaman Cloud Scheduler. - Untuk tugas bernama
shutdown-dev-instances
, klik tombol Jalankan sekarang di sisi paling kanan halaman. - Buka halaman VM Instances di Konsol Google Cloud.
Buka halaman instance VM. - Pastikan instance bernama
dev-instance
memiliki kotak abu-abu di samping namanya, yang menunjukkan bahwa instance telah dihentikan. Mungkin perlu waktu hingga 30 detik untuk menyelesaikan proses penonaktifan.
Memulai instance
- Buka halaman Cloud Scheduler di konsol Google Cloud.
Buka halaman Cloud Scheduler. - Untuk tugas bernama
startup-dev-instances
, klik tombol Jalankan sekarang di sisi paling kanan halaman. - Buka halaman VM Instances di Konsol Google Cloud.
Buka halaman instance VM. - Pastikan instance bernama
dev-instance
memiliki tanda centang hijau di samping namanya, yang menunjukkan bahwa instance tersebut sedang berjalan. Mungkin perlu waktu hingga 30 detik untuk menyelesaikan proses mulai.
gcloud
Menghentikan instance
Jalankan tugas penjadwal untuk menghentikan instance.
gcloud beta scheduler jobs run shutdown-dev-instances
Pastikan instance memiliki status
TERMINATED
. Mungkin perlu waktu hingga 30 detik untuk menyelesaikan proses penonaktifan.gcloud compute instances describe dev-instance \ --zone us-west1-b \ | grep status
status: TERMINATED
Memulai instance
Jalankan tugas penjadwal untuk memulai instance.
gcloud beta scheduler jobs run startup-dev-instances
Pastikan instance memiliki status
RUNNING
. Mungkin perlu waktu hingga 30 detik untuk menyelesaikan proses mulai.gcloud compute instances describe dev-instance \ --zone us-west1-b \ | grep status
status: RUNNING
Pembersihan
Setelah menyelesaikan tutorial, Anda dapat membersihkan resource yang dibuat agar resource tersebut berhenti menggunakan kuota dan dikenai biaya. Bagian berikut menjelaskan cara menghapus atau menonaktifkan resource ini.
Menghapus tugas Cloud Scheduler
Buka halaman Cloud Scheduler di konsol Google Cloud.
Klik kotak centang di samping tugas Anda.
Klik tombol Hapus di bagian atas halaman dan konfirmasi penghapusan.
Menghapus topik Pub/Sub
Buka halaman Pub/Sub di konsol Google Cloud.
Klik kotak centang di samping topik Anda.
Klik Hapus di bagian atas halaman dan konfirmasi penghapusan.
Menghapus fungsi yang di-deploy melalui fungsi Cloud Run
Buka halaman fungsi Cloud Run di konsol Google Cloud.
Klik kotak centang di samping fungsi Anda.
Klik tombol Hapus di bagian atas halaman dan konfirmasi penghapusan.
Menghapus instance Compute Engine
Untuk menghapus instance Compute Engine:
- In the Google Cloud console, go to the VM instances page.
- Select the checkbox for the instance that you want to delete.
- To delete the instance, click More actions, click Delete, and then follow the instructions.
Menghapus project
Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.
Untuk menghapus project:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Langkah berikutnya
- Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.