Tutorial ini menunjukkan cara menggunakan Cloud Scheduler dan Cloud Functions untuk memulai dan menghentikan instance Compute Engine secara otomatis sesuai jadwal rutin menggunakan label resource.
Tujuan
- Tulis dan deploy serangkaian fungsi dengan Cloud Functions yang akan memulai dan menghentikan instance Compute Engine.
- Buat kumpulan tugas dengan Cloud Scheduler yang menjadwalkan instance dengan label resource
dev
untuk dijalankan pada pukul 09.00-17.00, Senin-Jumat agar sesuai dengan jam kerja standar.
Biaya
Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:
- Cloud Scheduler
- Cloud Functions
- Pub/Sub
- Compute Engine
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Sebelum memulai
- Siapkan lingkungan Anda untuk Cloud Scheduler.
-
Aktifkan API Cloud Functions, Pub/Sub, and Compute Engine.
Arsitektur aplikasi
Solusi ini mencakup komponen Google Cloud berikut:
- instance Compute Engine yang ingin kami jalankan sesuai jadwal.
- Cloud Functions 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 region tertentu:
- Instance Compute Engine: didukung di region mana pun yang tercantum di Region dan zona.
- Cloud Functions: 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 HTTP, bukan Pub/Sub?
Sebaiknya sederhanakan arsitektur ini menggunakan Pemicu HTTP Cloud Functions, bukan Pemicu Pub/Sub.
Tutorial ini menggunakan Pub/Sub sebagai pemicu Cloud Functions 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 Cloud Functions, lihat ringkasan keamanan Cloud Functions. Untuk membandingkan antara pemicu HTTP dan Pub/Sub, lihat dokumentasi Pemicu Cloud Functions.
Menyiapkan instance Compute Engine
Konsol
- Buka halaman VM Instances di Konsol Google Cloud.
Buka halaman VM instances. - Klik Create instance.
- Tetapkan Name ke
dev-instance
. - Pada Label, klik Tambahkan label.
- Klik Tambahkan label.
- Masukkan
env
untuk Key dandev
untuk Value. - Untuk Region, pilih us-west1.
- Untuk Zone, pilih us-west1-b.
- Klik Save.
- 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 Cloud Functions
Membuat dan men-deploy fungsi
Konsol
Buat fungsi start.
- Buka halaman Cloud Functions di Konsol Google Cloud.
Buka halaman Cloud Functions. - Klik Buat fungsi.
- Untuk Lingkungan, pilih generasi ke-1.
- Setel Nama fungsi ke
startInstancePubSub
. - Biarkan Region tetap pada nilai defaultnya.
- Untuk Jenis pemicu, 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 Berikutnya 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 seharusnya berada di halaman Cloud Functions di Konsol Google Cloud.
- Klik Buat fungsi.
- Untuk Lingkungan, pilih generasi ke-1.
- Setel Nama fungsi ke
stopInstancePubSub
. - Biarkan Region tetap pada nilai defaultnya.
- Untuk Jenis pemicu, 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 Berikutnya 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
Membuat topik Pub/Sub.
gcloud pubsub topics create start-instance-event
gcloud pubsub topics create stop-instance-event
Mendapatkan kode
Download kodenya.
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Atau, Anda dapat mendownload sampel sebagai file ZIP dan mengekstraknya.
Buka direktori yang benar.
cd nodejs-docs-samples/functions/scheduleinstance/
Membuat fungsi start dan stop.
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) Memastikan fungsi berfungsi
Konsol
Menghentikan instance
- Buka halaman Cloud Functions di Konsol Google Cloud.
Buka halaman Cloud Functions. - Klik fungsi bernama
stopInstancePubSub
. - Anda akan melihat sejumlah tab: General, Trigger, Source, Permissions, dan Testing. Klik tab Testing.
Untuk Peristiwa pemicu, masukkan:
{"data":"eyJ6b25lIjoidXMtd2VzdDEtYiIsICJsYWJlbCI6ImVudj1kZXYifQo="}
Ini hanyalah string berenkode base64 untuk
{"zone":"us-west1-b", "label":"env=dev"}
Jika ingin mengenkode string sendiri, gunakan alat encoding base64 online apa pun.
Klik tombol Uji fungsi.
Setelah selesai berjalan, Anda akan melihat
Successfully stopped instance dev-instance
yang dicetak di bagian Output. Mungkin perlu waktu hingga 60 detik untuk menyelesaikan lari.Jika Anda melihat
error: 'Error: function failed to load.'
, cukup tunggu sekitar 10 detik hingga fungsi selesai di-deploy dan coba lagi.Jika Anda melihat
error: 'Error: function execution attempt timed out.'
, lanjutkan ke langkah berikutnya untuk melihat apakah instance perlu waktu yang lama untuk dimatikan.Jika selesai berjalan, tetapi tidak menampilkan apa-apa, mungkin juga waktunya habis. Lanjutkan ke langkah berikutnya untuk melihat apakah instance membutuhkan waktu yang lama untuk dimatikan.
Buka halaman VM Instances di Konsol Google Cloud.
Buka halaman VM instances.Pastikan instance yang bernama
dev-instance
memiliki kotak abu-abu di samping namanya, yang menunjukkan bahwa instance telah berhenti. Mungkin perlu waktu hingga 30 detik untuk menyelesaikan penonaktifan.- Jika tampaknya belum selesai, coba klik Refresh di bagian atas halaman.
Memulai instance
- Buka halaman Cloud Functions di Konsol Google Cloud.
Buka halaman Cloud Functions. - Klik fungsi bernama
startInstancePubSub
. - Anda akan melihat sejumlah tab: General, Trigger, Source, Permissions, dan Testing. Klik tab Testing.
Untuk Peristiwa pemicu, masukkan:
{"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
yang dicetak di bagian Output.Buka halaman VM Instances di Konsol Google Cloud.
Buka halaman VM instances.Pastikan instance yang bernama
dev-instance
memiliki tanda centang hijau di samping namanya, yang menunjukkan bahwa instance tersebut sedang berjalan. Diperlukan waktu hingga 30 detik untuk menyelesaikan startup.
gcloud
Menghentikan instance
Memanggil 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, gunakan alat apa pun. Berikut ini contoh penggunaan alat command line
base64
:echo '{"zone":"us-west1-b", "label":"env=dev"}' | base64
eyJ6b25lIjoidXMtd2VzdDEtYiIsICJsYWJlbCI6ImVudj1kZXYifQo=
Setelah fungsi selesai, Anda akan melihat tampilan berikut:
result: Successfully stopped instance dev-instance
Mungkin perlu waktu hingga 60 detik untuk menyelesaikan lari.
Jika sebaliknya Anda mendapatkan error:
error: 'Error: function failed to load.`
Tunggu sekitar 10 detik hingga fungsi selesai di-deploy dan coba lagi.
Jika sebaliknya Anda mendapatkan error:
error: `Error: function execution attempt timed out.`
Lanjutkan ke langkah berikutnya untuk melihat apakah instance perlu waktu yang lama untuk dimatikan.
Jika sebaliknya Anda tidak mendapatkan hasil, waktu fungsi tersebut mungkin habis. Lanjutkan ke langkah berikutnya untuk melihat apakah instance perlu waktu yang lama untuk dimatikan.
Pastikan instance memiliki status
TERMINATED
. Mungkin perlu waktu hingga 30 detik untuk menyelesaikan 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 tampilan berikut:
result: Successfully started instance dev-instance
- Sekali lagi, ini hanyalah string berenkode base64 untuk
Pastikan instance memiliki status
RUNNING
. Diperlukan waktu hingga 30 detik untuk menyelesaikan startup.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
Membuat tugas awal.
- Buka halaman Cloud Scheduler di Konsol Google Cloud.
Buka halaman Cloud Scheduler. - Klik Create a job.
- Biarkan region default.
- Tetapkan Name ke
startup-dev-instances
. - Untuk Frequency, masukkan
0 9 * * 1-5
.- Perintah ini akan dijalankan pada pukul 09.00 setiap hari Sen-Jum.
- Untuk Zona Waktu, pilih negara dan zona waktu yang Anda inginkan. Contoh
ini akan menggunakan
United States
danLos Angeles
. - Klik Lanjutkan.
- Untuk Jenis target, pilih
Pub/Sub
. - Pilih
start-instance-event
dari dropdown topik. - Untuk Message, masukkan info berikut:
{"zone":"us-west1-b","label":"env=dev"}
- Klik Create.
Membuat tugas perhentian.
- 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
.- Perintah ini akan dijalankan pada pukul 17.00 setiap hari Sen-Jum.
- Untuk Zona Waktu, pilih negara dan zona waktu yang Anda inginkan. Contoh
ini akan menggunakan
United States
danLos Angeles
. - Klik Lanjutkan.
- Untuk Jenis target, pilih
Pub/Sub
. - Pilih
stop-instance-event
dari dropdown topik. - Untuk Message, masukkan info berikut:
{"zone":"us-west1-b","label":"env=dev"}
- Klik Create.
gcloud
Membuat tugas awal.
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
Membuat tugas perhentian.
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 apakah tugas telah 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 VM instances. - Pastikan instance yang bernama
dev-instance
memiliki kotak abu-abu di samping namanya, yang menunjukkan bahwa instance telah berhenti. Mungkin perlu waktu hingga 30 detik untuk menyelesaikan 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 VM instances. - Pastikan instance yang bernama
dev-instance
memiliki tanda centang hijau di samping namanya, yang menunjukkan bahwa instance tersebut sedang berjalan. Diperlukan waktu hingga 30 detik untuk menyelesaikan proses memulai.
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 sampai perangkat selesai dinonaktifkan.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
. Diperlukan waktu hingga 30 detik untuk menyelesaikan startup.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 pekerjaan Anda.
Klik tombol Delete di bagian atas halaman dan konfirmasi penghapusan Anda.
Menghapus topik Pub/Sub
Buka halaman Pub/Sub di Konsol Google Cloud.
Klik kotak centang di samping topik.
Klik Hapus di bagian atas halaman dan konfirmasi penghapusan Anda.
Menghapus fungsi yang di-deploy melalui Cloud Functions
Buka halaman Cloud Functions di Konsol Google Cloud.
Klik kotak centang di samping fungsi Anda.
Klik tombol Delete di bagian atas halaman dan konfirmasi penghapusan Anda.
Menghapus instance Compute Engine
Untuk menghapus instance Compute Engine:
- Di konsol Google Cloud, buka halaman Instance VM.
- Pilih kotak centang untuk instance yang ingin Anda hapus.
- Untuk menghapus instance, klik Tindakan lainnya, klik Hapus, lalu ikuti petunjuknya.
Menghapus project
Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.
Untuk menghapus project:
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Langkah selanjutnya
- Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.