Metodologi penerapan

Last reviewed 2023-12-20 UTC

Sebaiknya gunakan infrastruktur deklaratif untuk men-deploy fondasi Anda dengan cara yang konsisten dan dapat dikontrol. Pendekatan ini membantu mengaktifkan tata kelola yang konsisten dengan menerapkan kontrol kebijakan tentang konfigurasi resource yang dapat diterima ke dalam pipeline Anda. Blueprint di-deploy menggunakan alur GitOps, dengan Terraform digunakan untuk menentukan infrastruktur sebagai kode (IaC), repositori Git untuk kontrol versi dan persetujuan kode, serta Cloud Build untuk otomatisasi CI/CD di pipeline deployment. Untuk pengantar konsep ini, lihat mengelola infrastruktur sebagai kode dengan Terraform, Cloud Build, dan GitOps.

Bagian berikut menjelaskan cara pipeline deployment digunakan untuk mengelola resource di organisasi Anda.

Lapisan pipeline

Untuk memisahkan tim dan stack teknologi yang bertanggung jawab untuk mengelola berbagai lapisan lingkungan Anda, sebaiknya gunakan model yang menggunakan pipeline dan persona yang berbeda, yang bertanggung jawab untuk setiap lapisan stack.

Diagram berikut memperkenalkan model yang kami rekomendasikan untuk memisahkan pipeline fondasi, pipeline infrastruktur, dan pipeline aplikasi.

Membuat blueprint pipeline.

Diagram ini memperkenalkan lapisan pipeline dalam model ini:

  • Pipeline foundation men-deploy resource foundation yang digunakan di seluruh platform. Sebaiknya satu tim pusat bertanggung jawab untuk mengelola resource fondasi yang digunakan oleh beberapa unit bisnis dan beban kerja.
  • Pipeline infrastruktur men-deploy project dan infrastruktur yang digunakan oleh workload, seperti instance VM atau database. Blueprint menyiapkan pipeline infrastruktur terpisah untuk setiap unit bisnis, atau Anda mungkin lebih memilih satu pipeline infrastruktur yang digunakan oleh beberapa tim.
  • Pipeline aplikasi men-deploy artefak untuk setiap beban kerja, seperti container atau image. Anda mungkin memiliki banyak tim aplikasi yang berbeda dengan pipeline aplikasi individual.

Bagian berikut memperkenalkan penggunaan setiap lapisan pipeline.

Pipeline fondasi

Pipeline fondasi men-deploy resource fondasi. Alat ini juga menyiapkan pipeline infrastruktur yang digunakan untuk men-deploy infrastruktur yang digunakan oleh beban kerja.

Untuk membuat pipeline dasar, Anda harus meng-clone atau melakukan fork terraform-example-foundation ke repositori Git Anda sendiri terlebih dahulu. Ikuti langkah-langkah dalam file README 0-bootstrap untuk mengonfigurasi folder dan resource bootstrap Anda.

Tahap Deskripsi

0-bootstrap

Melakukan bootstrap organisasi Google Cloud. Langkah ini juga mengonfigurasi pipeline CI/CD untuk kode blueprint di tahap berikutnya.

  • Project CICD berisi pipeline fondasi Cloud Build untuk men-deploy resource.
  • Project seed mencakup bucket Cloud Storage yang berisi status Terraform dari infrastruktur dasar dan mencakup akun layanan dengan hak istimewa tinggi yang digunakan oleh pipeline dasar untuk membuat resource. Status Terraform dilindungi melalui penyimpanan Pembuatan Versi Objek. Saat berjalan, pipeline CI/CD akan bertindak sebagai akun layanan yang dikelola di project seed.

Setelah Anda membuat pipeline fondasi di tahap 0-bootstrap, tahap berikut akan men-deploy resource di pipeline fondasi. Tinjau petunjuk README untuk setiap tahap dan terapkan setiap tahap secara berurutan.

Tahap Deskripsi

1-org

Menyiapkan folder bersama tingkat teratas, project untuk layanan bersama, logging tingkat organisasi, dan setelan keamanan dasar melalui kebijakan organisasi.

2-environments

Menyiapkan lingkungan pengembangan, non-produksi, dan produksi dalam organisasi Google Cloud yang telah Anda buat.

3-networks-dual-svpc

atau

3-networks-hub-and-spoke

Menyiapkan VPC bersama dalam topologi yang Anda pilih dan resource jaringan terkait.

Pipeline infrastruktur

Pipeline infrastruktur men-deploy project dan infrastruktur (misalnya, instance VM dan database) yang digunakan oleh workload. Pipeline foundation men-deploy beberapa pipeline infrastruktur. Pemisahan antara pipeline fondasi dan pipeline infrastruktur ini memungkinkan pemisahan antara resource seluruh platform dan resource khusus beban kerja.

Diagram berikut menjelaskan cara blueprint mengonfigurasi beberapa pipeline infrastruktur yang ditujukan untuk digunakan oleh tim terpisah.

Beberapa pipeline infrastruktur

Diagram ini menjelaskan konsep utama berikut:

  • Setiap pipeline infrastruktur digunakan untuk mengelola resource infrastruktur secara terpisah dari resource fondasi.
  • Setiap unit bisnis memiliki pipeline infrastrukturnya sendiri, yang dikelola dalam project khusus di folder common.
  • Setiap pipeline infrastruktur memiliki akun layanan dengan izin untuk men-deploy resource hanya ke project yang terkait dengan unit bisnis tersebut. Strategi ini menciptakan pemisahan tugas antara akun layanan dengan hak istimewa yang digunakan untuk pipeline fondasi dan yang digunakan oleh setiap pipeline infrastruktur

Pendekatan ini dengan beberapa pipeline infrastruktur direkomendasikan jika Anda memiliki beberapa entitas di dalam organisasi yang memiliki keterampilan dan keinginan untuk mengelola infrastrukturnya secara terpisah, terutama jika mereka memiliki persyaratan yang berbeda seperti jenis kebijakan validasi pipeline yang ingin mereka terapkan. Atau, Anda mungkin lebih memilih untuk memiliki satu pipeline infrastruktur yang dikelola oleh satu tim dengan kebijakan validasi yang konsisten.

Di terraform-example-foundation, tahap 4 mengonfigurasi pipeline infrastruktur, dan tahap 5 menunjukkan contoh penggunaan pipeline tersebut untuk men-deploy resource infrastruktur.

Tahap Deskripsi

4-projects

Menyiapkan struktur folder, project, dan pipeline infrastruktur.

5-app-infra (opsional)

Men-deploy project workload dengan instance Compute Engine menggunakan pipeline infrastruktur sebagai contoh.

Pipeline aplikasi

Pipeline aplikasi bertanggung jawab untuk men-deploy artefak aplikasi untuk setiap beban kerja, seperti image atau penampung Kubernetes yang menjalankan logika bisnis aplikasi Anda. Artefak ini di-deploy ke resource infrastruktur yang di-deploy oleh pipeline infrastruktur Anda.

Blueprint dasar-dasar perusahaan menyiapkan pipeline fondasi dan pipeline infrastruktur, tetapi tidak men-deploy pipeline aplikasi. Untuk contoh pipeline aplikasi, lihat blueprint aplikasi perusahaan.

Mengotomatiskan pipeline dengan Cloud Build

Blueprint menggunakan Cloud Build untuk mengotomatiskan proses CI/CD. Tabel berikut menjelaskan kontrol yang di-build ke dalam pipeline fondasi dan pipeline infrastruktur yang di-deploy oleh repositori terraform-example-foundation. Jika Anda mengembangkan pipeline Anda sendiri menggunakan alat otomatisasi CI/CD lainnya, sebaiknya terapkan kontrol serupa.

Kontrol Deskripsi

Memisahkan konfigurasi build untuk memvalidasi kode sebelum men-deploy

Blueprint menggunakan dua file konfigurasi build Cloud Build untuk seluruh pipeline, dan setiap repositori yang terkait dengan tahap memiliki dua pemicu Cloud Build yang terkait dengan file konfigurasi build tersebut. Saat kode di-push ke cabang repositori, file konfigurasi build dipicu untuk terlebih dahulu menjalankan cloudbuild-tf-plan.yaml yang memvalidasi kode Anda dengan pemeriksaan kebijakan dan rencana Terraform terhadap cabang tersebut, lalu cloudbuild-tf-apply.yaml menjalankan terraform apply pada hasil rencana tersebut.

Pemeriksaan kebijakan Terraform

Blueprint ini mencakup serangkaian batasan Open Policy Agent yang diterapkan oleh validasi kebijakan di Google Cloud CLI. Batasan ini menentukan konfigurasi resource yang dapat diterima yang dapat di-deploy oleh pipeline Anda. Jika build tidak memenuhi kebijakan dalam konfigurasi build pertama, konfigurasi build kedua tidak akan men-deploy resource apa pun.

Kebijakan yang diterapkan dalam blueprint di-fork dari GoogleCloudPlatform/policy-library di GitHub. Anda dapat menulis kebijakan tambahan untuk library guna menerapkan kebijakan kustom untuk memenuhi persyaratan Anda.

Prinsip hak istimewa terendah

Pipeline fondasi memiliki akun layanan yang berbeda untuk setiap tahap dengan kebijakan izin yang hanya memberikan peran IAM minimum untuk tahap tersebut. Setiap pemicu Cloud Build berjalan sebagai akun layanan tertentu untuk tahap tersebut. Menggunakan akun yang berbeda membantu mengurangi risiko bahwa mengubah satu repositori dapat memengaruhi resource yang dikelola oleh repositori lain. Untuk memahami peran IAM tertentu yang diterapkan ke setiap akun layanan, lihat kode Terraform sa.tf di tahap bootstrap.

Kumpulan pribadi Cloud Build

Blueprint menggunakan kumpulan pribadi Cloud Build. Dengan pool pribadi, Anda dapat menerapkan kontrol tambahan secara opsional, seperti membatasi akses ke repositori publik atau menjalankan Cloud Build di dalam perimeter Kontrol Layanan VPC.

Builder kustom Cloud Build

Blueprint membuat builder kustom-nya sendiri untuk menjalankan Terraform. Untuk informasi selengkapnya, lihat 0-bootstrap/Dockerfile. Kontrol ini memastikan bahwa pipeline berjalan secara konsisten dengan kumpulan library yang diketahui pada versi yang disematkan.

Persetujuan deployment

Secara opsional, Anda dapat menambahkan tahap persetujuan manual ke Cloud Build. Persetujuan ini menambahkan titik pemeriksaan tambahan setelah build dipicu, tetapi sebelum dijalankan sehingga pengguna dengan hak istimewa dapat menyetujui build secara manual.

Strategi cabang

Sebaiknya gunakan strategi cabang persisten untuk mengirimkan kode ke sistem Git Anda dan men-deploy resource melalui pipeline fondasi. Diagram berikut menjelaskan strategi cabang persisten.

Strategi pencabangan deployment blueprint

Diagram ini menjelaskan tiga cabang persisten di Git (pengembangan, non-produksi, dan produksi) yang mencerminkan lingkungan Google Cloud yang sesuai. Ada juga beberapa cabang fitur sementara yang tidak sesuai dengan resource yang di-deploy di lingkungan Google Cloud Anda.

Sebaiknya terapkan proses permintaan pull (PR) ke sistem Git Anda sehingga kode apa pun yang digabungkan ke cabang persisten memiliki PR yang disetujui.

Untuk mengembangkan kode dengan strategi cabang persisten ini, ikuti langkah-langkah tingkat tinggi berikut:

  1. Saat Anda mengembangkan kemampuan baru atau mengerjakan perbaikan bug, buat cabang baru berdasarkan cabang pengembangan. Gunakan konvensi penamaan untuk cabang Anda yang menyertakan jenis perubahan, nomor tiket, atau ID lainnya, dan deskripsi yang dapat dibaca manusia, seperti feature/123456-org-policies.
  2. Setelah menyelesaikan pekerjaan di cabang fitur, buka PR yang menargetkan cabang pengembangan.
  3. Saat Anda mengirimkan PR, PR akan memicu pipeline fondasi untuk menjalankan terraform plan dan terraform validate guna melakukan staging dan memverifikasi perubahan.
  4. Setelah Anda memvalidasi perubahan pada kode, gabungkan fitur atau perbaikan bug ke dalam cabang pengembangan.
  5. Proses penggabungan memicu pipeline fondasi untuk menjalankan terraform apply guna men-deploy perubahan terbaru di cabang pengembangan ke lingkungan pengembangan.
  6. Tinjau perubahan di lingkungan pengembangan menggunakan peninjauan manual, pengujian fungsional, atau pengujian menyeluruh yang relevan dengan kasus penggunaan Anda. Kemudian, promosikan perubahan ke lingkungan non-produksi dengan membuka PR yang menargetkan cabang non-produksi dan menggabungkan perubahan Anda.
  7. Untuk men-deploy resource ke lingkungan produksi, ulangi proses yang sama seperti langkah 6: tinjau dan validasi resource yang di-deploy, buka PR ke cabang produksi, lalu gabungkan.

Langkah selanjutnya