Panduan ini menjelaskan cara menjalankan blue/green deployment tanpa periode nonaktif pada Grup Instance yang Dikelola Compute Engine (MIG) menggunakan Cloud Build dan Terraform.
Dengan Cloud Build, Anda dapat mengotomatiskan berbagai proses developer, termasuk membangun dan men-deploy aplikasi ke berbagai runtime Google Cloud, seperti Compute Engine, Google Kubernetes Engine, GKE Enterprise, dan Cloud Functions.
Compute Engine MIG memungkinkan Anda untuk mengoperasikan aplikasi di beberapa Virtual Machine (VM) yang identik. Anda dapat membuat workload Anda skalabel dan sangat tersedia dengan memanfaatkan layanan MIG otomatis, termasuk: penskalaan otomatis, autohealing, deployment regional (beberapa zona), dan update otomatis. Dengan menggunakan model continuous deployment blue/green, Anda akan mempelajari cara mentransfer traffic pengguna secara bertahap dari satu MIG (biru) ke MIG lainnya (hijau), yang keduanya berjalan dalam tahap produksi.
Ringkasan desain
Diagram berikut menunjukkan model blue/green deployment yang digunakan oleh contoh kode yang dijelaskan dalam dokumen ini:
Pada level tinggi, model ini mencakup komponen berikut:
- Dua pool VM Compute Engine: Biru dan Hijau.
- Tiga load balancer HTTP(S) eksternal:
- Load balancer Blue/Green, yang mengarahkan traffic dari pengguna akhir ke instance VM yang berada dalam cluster Biru atau Hijau.
- Load balancer Blue yang mengarahkan traffic dari engineer dan developer QA ke kumpulan instance Blue VM.
- Load balancer Green yang mengarahkan traffic dari engineer dan developer pada QA ke kumpulan instance Green.
- Dua kumpulan pengguna:
- Pengguna akhir yang memiliki akses ke load balancer Biru/Hijau, yang mengarahkan mereka ke kumpulan instance Biru atau Hijau.
- Engineer dan developer QA yang memerlukan akses ke kedua kumpulan untuk tujuan pengembangan dan pengujian. Mereka dapat mengakses load balancer Biru dan Green, yang mengarahkannya ke kumpulan Instance Blue dan kumpulan instance Green.
Kumpulan VM Biru dan Hijau diimplementasikan sebagai MIG Compute Engine, dan alamat IP eksternal dirutekan ke VM di MIG menggunakan load balancer HTTP(S) eksternal. Contoh kode yang dijelaskan dalam dokumen ini menggunakan Terraform untuk mengonfigurasi infrastruktur ini.
Diagram berikut mengilustrasikan operasi developer yang terjadi dalam deployment:
Dalam diagram di atas, panah merah mewakili alur bootstrap yang terjadi saat Anda menyiapkan infrastruktur deployment untuk pertama kalinya, dan panah biru mewakili alur GitOps yang terjadi selama setiap deployment.
Untuk menyiapkan infrastruktur ini, Anda harus menjalankan skrip penyiapan yang memulai proses bootstrap dan menyiapkan komponen untuk alur GitOps.
Skrip penyiapan menjalankan pipeline Cloud Build yang menjalankan operasi berikut:
- Membuat repositori di Cloud Source Repositories bernama
copy-of-gcp-mig-simple
dan menyalin kode sumber dari repositori contoh GitHub ke repositori di Cloud Source Repositories. - Membuat dua pemicu Cloud Build yang bernama
apply
dandestroy
.
Pemicu apply
dilampirkan ke file Terraform bernama main.tfvars
di Cloud Source Repositories. File ini berisi variabel Terraform yang merepresentasikan load balancer biru dan hijau.
Untuk menyiapkan deployment, perbarui variabel dalam file main.tfvars
.
Pemicu apply
menjalankan pipeline Cloud Build yang menjalankan tf_apply
dan melakukan operasi berikut:
- Membuat dua MIG Compute Engine (satu untuk warna hijau dan satu untuk biru), empat instance VM Compute Engine (dua untuk MIG hijau dan dua untuk MIG biru), tiga load balancer (biru, hijau, dan splitter), serta tiga alamat IP publik.
- Mencetak alamat IP yang dapat Anda gunakan untuk melihat aplikasi yang di-deploy dengan instance biru dan hijau.
Pemicu pemusnahan dipicu secara manual untuk menghapus semua resource yang dibuat oleh pemicu yang diterapkan.
Tujuan
Gunakan Cloud Build dan Terraform untuk menyiapkan load balancing HTTP(S) eksternal dengan backend grup instance VM Compute Engine.
Lakukan blue/green deployment pada instance VM.
Biaya
Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:
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, lihat Pembersihan.
Sebelum memulai
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Buat atau pilih project Google Cloud.
-
Membuat project Google Cloud:
gcloud projects create PROJECT_ID
Ganti
PROJECT_ID
dengan nama untuk project Google Cloud 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.
-
-
Make sure that billing is enabled for your Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Buat atau pilih project Google Cloud.
-
Membuat project Google Cloud:
gcloud projects create PROJECT_ID
Ganti
PROJECT_ID
dengan nama untuk project Google Cloud 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.
-
-
Make sure that billing is enabled for your Google Cloud project.
Melakukan Percobaan
Jalankan skrip penyiapan dari repositori contoh kode Google:
bash <(curl https://raw.githubusercontent.com/GoogleCloudPlatform/cloud-build-samples/main/mig-blue-green/setup.sh)
Saat skrip penyiapan meminta izin pengguna, masukkan yes.
Skrip selesai berjalan dalam beberapa detik.
Di konsol Google Cloud, buka halaman Build history Cloud Build:
Klik build terbaru.
Anda akan melihat halaman Build details, yang menampilkan pipeline Cloud Build dengan tiga langkah build: langkah build pertama membuat repositori di Cloud Source Repositories, langkah kedua meng-clone konten repositori contoh di GitHub ke Cloud Source Repositories, dan langkah ketiga menambahkan dua pemicu build.
Open Cloud Source Repositories:
Dari daftar repositori, klik
copy-of-gcp-mig-simple
.Pada tab History di bagian bawah halaman, Anda akan melihat satu commit dengan deskripsi
A copy of https://github.com/GoogleCloudPlatform/cloud-build-samples.git
yang dibuat oleh Cloud Build untuk membuat repositori bernamacopy-of-gcp-mig-simple
.Buka halaman Pemicu Cloud Build:
Untuk memulai proses deployment, perbarui file
infra/main.tfvars
:Di jendela terminal, buat dan buka folder bernama
deploy-compute-engine
:mkdir ~/deploy-compute-engine cd ~/deploy-compute-engine
Clone repo
copy-of-gcp-mig-simple
:gcloud source repos clone copy-of-mig-blue-green
Buka direktori yang di-clone:
cd ./copy-of-mig-blue-green
Update
infra/main.tfvars
untuk mengganti warna biru dengan hijau:sed -i'' -e 's/blue/green/g' infra/main.tfvars
Tambahkan file yang diperbarui:
git add .
Commit file:
git commit -m "Promote green"
Kirim file:
git push
Melakukan perubahan pada
infra/main.tfvars
akan memicu eksekusi pemicuapply
, yang memulai deployment.
Open Cloud Source Repositories:
Dari daftar repositori, klik
copy-of-gcp-mig-simple
.Anda akan melihat commit dengan deskripsi
Promote green
di tab History di bagian bawah halaman.Untuk melihat eksekusi pemicu
apply
, buka halaman Build history di Google Cloud Console:Buka halaman Build details dengan mengklik build pertama.
Anda akan melihat pipeline pemicu
apply
dengan dua langkah build. Langkah build pertama yang dijalankan Terraform berlaku untuk membuat Compute Engine dan resource load balancing untuk deployment. Langkah build kedua mencetak alamat IP tempat Anda dapat melihat aplikasi berjalan.Buka alamat IP yang sesuai dengan MIG hijau di browser. Anda akan melihat screenshot yang mirip dengan screenshot berikut yang menunjukkan deployment tersebut:
Buka halaman Instance group Compute Engine untuk melihat grup instance Biru dan Hijau:
Buka halaman VM instances untuk melihat empat instance VM:
Buka halaman External IP addresses untuk melihat ketiga load balancer:
Anda akan melihat dua pemicu build bernama apply
dan destroy
. Pemicu apply
dilampirkan ke file infra/main.tfvars
di cabang main
. Pemicu ini
dieksekusi setiap kali file diperbarui. Pemicu destroy
adalah pemicu
manual.
Memahami kode
Kode sumber untuk contoh kode ini mencakup:
- Kode sumber yang terkait dengan skrip penyiapan.
- Kode sumber yang terkait dengan pipeline Cloud Build.
- Kode sumber yang terkait dengan template Terraform.
Siapkan skrip
setup.sh
adalah skrip penyiapan yang menjalankan proses bootstrap dan membuat komponen untuk blue/green deployment. Skrip ini menjalankan operasi
berikut:
- Mengaktifkan Cloud Build, Resource Manager, Compute Engine, dan Cloud Source Repositories API.
- Memberikan peran IAM
roles/editor
ke akun layanan Cloud Build di project Anda. Peran ini diperlukan agar Cloud Build dapat membuat dan menyiapkan komponen GitOps yang diperlukan untuk deployment. - Memberikan peran IAM
roles/source.admin
ke akun layanan Cloud Build di project Anda. Peran ini diperlukan agar akun layanan Cloud Build dapat membuat Cloud Source Repositories dalam project Anda dan meng-clone konten contoh repositori GitHub ke Cloud Source Repositories. Menghasilkan pipeline Cloud Build bernama
bootstrap.cloudbuild.yaml
secara inline yang:- Membuat repositori baru di Cloud Source Repositories.
- Menyalin kode sumber dari contoh repositori GitHub ke repositori baru di Cloud Source Repositories.
- Membuat pemicu penerapan dan menghancurkan pemicu build.
Pipeline Cloud Build
apply.cloudbuild.yaml
dan destroy.cloudbuild.yaml
adalah file konfigurasi Cloud Build yang digunakan skrip penyiapan untuk menyiapkan resource untuk alur GitOps. apply.cloudbuild.yaml
berisi dua langkah build:
- Langkah build
tf_apply build
yang memanggil fungsitf_install_in_cloud_build_step
, yang menginstal Terraform.tf_apply
yang membuat resource yang digunakan dalam alur GitOps. Fungsitf_install_in_cloud_build_step
dantf_apply
ditentukan dalambash_utils.sh
dan langkah build menggunakan perintahsource
untuk memanggilnya. - Langkah build
describe_deployment
yang memanggil fungsidescribe_deployment
yang mencetak alamat IP load balancer.
destroy.cloudbuild.yaml
memanggil tf_destroy
yang menghapus semua resource
yang dibuat oleh tf_apply
.
Fungsi tf_install_in_cloud_build_step
, tf_apply
, describe_deployment
, dan tf_destroy
ditentukan dalam file bash_utils.sh
.
File konfigurasi build menggunakan perintah source
untuk memanggil fungsi.
Kode berikut menunjukkan fungsi tf_install_in_cloud_build_step
yang
ditentukan dalam bash_utils.sh
. File konfigurasi build memanggil fungsi ini untuk menginstal Terraform dengan cepat. Fungsi ini membuat bucket Cloud Storage untuk mencatat status Terraform.
Cuplikan kode berikut menunjukkan fungsi tf_apply
yang ditentukan dalam
bash_utils.sh
. Pertama, terraform init
yang memuat semua modul dan
library kustom, lalu menjalankan terraform apply
untuk memuat variabel dari
file main.tfvars
.
Cuplikan kode berikut menunjukkan fungsi describe_deployment
yang
ditentukan dalam bash_utils.sh
. Fungsi ini menggunakan gcloud compute addresses describe
untuk mengambil alamat IP load balancer menggunakan nama tersebut, lalu mencetaknya.
Cuplikan kode berikut menunjukkan fungsi tf_destroy
yang ditentukan dalam
bash_utils.sh
. Library ini memanggil terraform init
yang memuat semua modul dan library kustom, lalu menjalankan terraform destroy
yang menghapus muatan variabel Terraform.
Template Terraform
Anda akan menemukan semua variabel dan file konfigurasi Terraform di folder copy-of-gcp-mig-simple/infra/
.
main.tf
: ini adalah file konfigurasi Terraformmain.tfvars
: file ini menentukan variabel Terraform.mig/
dansplitter/
: folder ini berisi modul yang menentukan load balancer. Foldermig/
berisi file konfigurasi Terraform yang menentukan MIG untuk load balancer Biru dan Hijau. MIG Biru dan Hijau identik, sehingga mereka ditentukan satu kali dan dibuat instance untuk objek biru dan hijau. File konfigurasi Terraform untuk load balancer pemisah ada di foldersplitter/
.
Cuplikan kode berikut menampilkan konten infra/main.tfvars
. Class
ini berisi tiga variabel: dua variabel yang menentukan versi aplikasi yang akan di-deploy
ke kumpulan Biru dan Hijau, serta variabel untuk warna aktif: Biru atau
Hijau. Perubahan pada file ini akan memicu deployment.
Berikut adalah cuplikan kode dari infra/main.tf
. Dalam cuplikan ini:
- Variabel ditentukan untuk project Google Cloud.
- Google ditetapkan sebagai penyedia Terraform.
- Variabel ditentukan untuk namespace. Semua objek yang dibuat oleh Terraform diawali dengan variabel ini sehingga beberapa versi aplikasi dapat di-deploy dalam project yang sama dan nama objek tidak bertentangan satu sama lain.
- Variabel
MIG_VER_BLUE
,MIG_VER_BLUE
, danMIG_ACTIVE_COLOR
adalah binding untuk variabel dalam fileinfra/main.tfvars
.
Cuplikan kode dari infra/main.tf
berikut menunjukkan pembuatan instance
modul pemisah. Modul ini menggunakan warna aktif sehingga load balancer
mengetahui MIG mana yang akan men-deploy aplikasi.
Cuplikan kode dari infra/main.tf
berikut menentukan dua modul identik
untuk MIG Biru dan Hijau. Modul ini mencakup warna, jaringan, dan subnetwork
yang ditentukan dalam modul pemisah.
File splitter/main.tf
menentukan objek yang dibuat untuk
MIG pemisah. Berikut adalah cuplikan kode dari splitter/main.tf
yang
berisi logika untuk beralih antara MIG Hijau dan Biru. Ini didukung oleh
layanan google_compute_region_backend_service
, yang dapat mengarahkan traffic ke
dua region backend: var.instance_group_blue
atau var.instance_group_green
.
capacity_scaler
menentukan seberapa banyak lalu lintas yang akan dirutekan.
Kode berikut mengarahkan 100% traffic ke warna yang ditentukan, tetapi Anda dapat memperbarui kode ini untuk deployment canary guna mengarahkan traffic ke subkumpulan pengguna.
File mig/main.tf
menentukan objek yang berkaitan dengan MIG Biru dan
Hijau. Cuplikan kode berikut dari file ini menentukan template instance Compute Engine yang digunakan untuk membuat pool VM. Perlu diperhatikan bahwa template instance ini memiliki properti siklus proses Terraform yang disetel ke create_before_destroy
.
Hal ini karena, saat mengupdate versi kumpulan, Anda tidak dapat menggunakan
template untuk membuat versi kumpulan baru saat kumpulan tersebut masih digunakan oleh
versi kumpulan sebelumnya. Namun, jika kumpulan versi lama
dihancurkan sebelum membuat template baru, akan ada periode waktu saat
kumpulan sedang tidak aktif. Untuk menghindari skenario ini, kami menetapkan siklus proses Terraform ke create_before_destroy
sehingga versi kumpulan VM yang lebih baru dibuat terlebih dahulu sebelum versi yang lebih lama dimusnahkan.
Pembersihan
Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.
Menghapus resource satu per satu
Hapus resource Compute Engine yang dibuat oleh pemicu penerapan:
Buka halaman Pemicu Cloud Build:
Pada tabel Triggers, cari baris yang sesuai dengan pemicu Anda, lalu klik Run. Saat pemicu menyelesaikan eksekusi, resource yang dibuat oleh pemicu apply akan dihapus.
Hapus resource yang dibuat selama bootstrap dengan menjalankan perintah berikut di jendela terminal Anda:
bash <(curl https://raw.githubusercontent.com/GoogleCloudPlatform/cloud-build-samples/main/mig-blue-green/teardown.sh)
Menghapus project
Menghapus project Google Cloud:
gcloud projects delete PROJECT_ID
Langkah selanjutnya
- Pelajari pemicu build lebih lanjut.
- Pelajari cara melihat provenance build.