Dokumen ini menjelaskan cara kerja variabel, pemetaan variabel, dan dependensi dalam App Lifecycle Manager.
App Lifecycle Manager memungkinkan Anda men-deploy dan mengelola aplikasi SaaS yang kompleks dengan mengaturnya ke dalam unit modular. Unit ini, yang ditentukan oleh konfigurasi Terraform dalam cetak biru, dapat saling terhubung melalui dependensi, sehingga memungkinkan orkestrasi yang canggih dan penyediaan otomatis. Aspek utama dalam mengelola unit ini dan interaksinya adalah melalui variabel dan pemetaan variabel.
Anda dapat membuat deployment yang kompleks, modular, dan skalabel dengan penyediaan otomatis, komunikasi antar-unit, dan opsi konfigurasi yang fleksibel. Pertimbangkan dengan cermat hierarki variabel, hubungan dependensi, dan pemetaan variabel untuk mengoptimalkan arsitektur SaaS dan alur kerja pengelolaan dalam App Lifecycle Manager.
Unit dan variabel
Inti dari App Lifecycle Manager adalah unit. Unit menggunakan variabel untuk menyesuaikan deployment dan perilakunya. Variabel ini pada dasarnya adalah variabel Terraform yang dapat Anda tentukan dalam file variables.tf cetak biru. Variabel ini memungkinkan Anda membuat parameter konfigurasi Terraform, sehingga dapat digunakan kembali dan disesuaikan di berbagai lingkungan dan deployment.
Variabel wajib untuk penyediaan unit
Meskipun Anda dapat menentukan variabel kustom untuk unit, App Lifecycle Manager juga bergantung pada sekumpulan variabel wajib. Variabel ini dikenali dan ditangani secara otomatis oleh App Lifecycle Manager, meskipun tidak ditentukan secara eksplisit dalam konfigurasi Terraform Anda.
Variabel wajibnya adalah:
project_iddanproject_number(atau,tenant_project_iddantenant_project_number): Variabel ini menentukan Google Cloud project ID tempat resource unit Anda akan di-deploy. Anda dapat menggunakanproject_iddanproject_number, atautenant_iddantenant_project_number. Kolom ini diperlukan untuk pembuatan dan pengelolaan resource dalamproject yang benar. Google CloudAnda dapat menemukan project ID di the Google Cloud console di the halaman Dasbor. Cari kolom Project ID di kartu Project info dalam bagian Cloud overview.
project_numberatautenant_project_number: Mirip denganproject_id, variabel ini mewakili Google Cloud nomor project. Anda dapat menggunakanproject_numberatautenant_project_numbersecara bergantian.Anda dapat menemukan nomor project bersama dengan project ID di Project info kartu dalam bagian Cloud overview di halaman Dasbor the Google Cloud console .
actuation_sa: Variabel ini mewakili alamat email akun layanan aktuasi. Akun layanan ini adalah akun layanan yang dikelola pengguna yang digunakan App Lifecycle Manager (melalui Infrastructure Manager) untuk menjalankan konfigurasi Terraform Anda saat menyediakan, memperbarui, atau menghentikan penyediaan unit.Sebaiknya gunakan akun layanan aktuasi khusus per tenant (atau unit) untuk menerapkan prinsip hak istimewa terendah. Hal ini membatasi potensi dampak pelanggaran keamanan dan memberikan isolasi yang lebih baik antara deployment Anda.
Untuk mengetahui informasi selengkapnya tentang cara mengonfigurasi dan memberikan izin ke akun layanan aktuasi, lihat Ringkasan produk.
Hierarki variabel unit
Variabel unit dapat ditentukan dan bersumber dari beberapa lokasi. Saat menggunakan App Lifecycle Manager, Anda harus memahami hierarki nilai variabel yang digunakan selama operasi unit.
Urutannya adalah sebagai berikut (dari prioritas terendah hingga tertinggi):
App Lifecycle Manager menyelesaikan nilai variabel dalam urutan ini:
Variabel input yang ada di unit: Jika variabel sudah ditentukan di resource unit itu sendiri (misalnya, dari operasi atau konfigurasi sebelumnya), nilai ini memiliki prioritas terendah. Jika nilai variabel ditetapkan langsung di unit, nilai tersebut akan diganti jika nilai ditemukan dari sumber yang lebih tinggi dalam hierarki.
Default rilis: Nilai default rilis diterapkan jika variabel belum ditetapkan di unit, tetapi akan mengganti variabel unit yang ada.
Operasi unit: Saat melakukan operasi unit seperti
provisionatauupgrade, Anda dapat secara eksplisit memberikan variabel input sebagai bagian dari permintaan operasi. Variabel yang diberikan dalam operasi unit akan mengganti default rilis dan variabel unit yang ada.Pemetaan variabel input dependensi: Jika unit memiliki dependensi pada unit lain, pemetaan variabel yang ditentukan dalam jenis unit dapat mengambil nilai variabel dari variabel output unit dependensi. Ini adalah sumber prioritas tertinggi. Variabel yang diperoleh melalui pemetaan dependensi akan mengganti nilai dari operasi unit, default rilis, dan variabel unit yang ada.
Pendekatan hierarkis ini memberikan fleksibilitas dan kontrol atas pengelolaan variabel Anda. Anda dapat menetapkan konfigurasi persisten langsung di unit (prioritas terendah), menentukan default dasar menggunakan rilis, menyesuaikan untuk operasi tertentu, dan mengambil sumber nilai yang paling penting dan mengganti dari dependensi unit secara dinamis (prioritas tertinggi).
Dependensi unit
App Lifecycle Manager memungkinkan Anda menentukan dependensi antar-unit. Hal ini penting untuk membuat aplikasi SaaS yang kompleks, yang komponennya saling bergantung. Dependensi memastikan bahwa unit terkait disediakan dan dikelola secara terkoordinasi.
Anda menentukan dependensi dalam jenis unit. Saat Anda membuat unit dari jenis unit tertentu, App Lifecycle Manager akan otomatis mengelola dependensinya.
Definisi dependensi dalam jenis unit
Dalam definisi UnitKind, Anda menentukan daftar dependensi, yang masing-masing merujuk ke UnitKind lain dan menetapkan alias. Alias ini digunakan untuk mereferensikan dependensi dalam pemetaan variabel:
message UnitKind {
// ... other fields ...
// List of other unit kinds that this release will depend on.
repeated Dependency dependencies = 4
[(.google.api.field_behavior) = OPTIONAL];
// ...
}
message Dependency {
// The unit kind of the dependency.
string unit_kind = 1 [
(.google.api.field_behavior) = REQUIRED,
(.google.api.field_behavior) = IMMUTABLE,
(.google.api.resource_reference) = {
type: "saasservicemgmt.googleapis.com/UnitKind"
}
];
// An alias for the dependency. Used for input variable mapping.
string alias = 2 [(.google.api.field_behavior) = REQUIRED];
}
Penyediaan dependensi otomatis
Saat Anda meminta untuk menyediakan unit yang memiliki dependensi yang ditentukan dalam UnitKind, App Lifecycle Manager akan otomatis memeriksa keberadaan unit dependensi tersebut.
Jika unit dependensi tidak ditemukan, App Lifecycle Manager akan otomatis menyediakannya sebelum menyediakan unit dependen.
App Lifecycle Manager memastikan bahwa unit dependensi disediakan sebelum unit dependennya, sehingga mempertahankan urutan operasi yang benar.
Pemetaan variabel
Pemetaan variabel adalah mekanisme untuk meneruskan data (nilai variabel) antara unit dependen dan dependensinya. Hal ini penting untuk mengonfigurasi unit dependen berdasarkan output dari dependensinya.
Pemetaan variabel ditentukan dalam jenis unit dependen dan menggunakan FromMapping dan ToMapping:
FromMapping:FromMappingdigunakan untuk mengambil variabel output dari unit dependensi dan memetakannya ke variabel input unit dependen. Dengan cara ini, unit dependen dapat memperoleh informasi dari dependensinya, seperti endpoint koneksi atau ID resource.message VariableMapping { // ... oneof mapping_type { // Output variables which will get their values from dependencies FromMapping from = 2 [(.google.api.field_behavior) = OPTIONAL]; // ... } } message FromMapping { // Alias of the dependency that the outputVariable will pass its value to string dependency = 1 [(.google.api.field_behavior) = REQUIRED]; // Name of the outputVariable on the dependency string output_variable = 2 [(.google.api.field_behavior) = REQUIRED]; }Dalam contoh codelab yang disediakan,
App UnitKindmemilikiFromMappinguntuk mengambil variabel outputcluster_endpointdari dependensiCluster UnitKind. Hal ini memungkinkan aplikasi terhubung ke cluster Kubernetes yang baru disediakan.ToMapping:ToMappingdigunakan untuk meneruskan variabel input dari unit dependen ke variabel input unit dependensi. Dengan cara ini, Anda dapat mengonfigurasi unit dependensi berdasarkan parameter yang disediakan untuk unit dependen.message VariableMapping { // ... oneof mapping_type { // ... // Input variables whose values will be passed on to dependencies. ToMapping to = 3 [(.google.api.field_behavior) = OPTIONAL]; } } message ToMapping { // Alias of the dependency that the inputVariable will pass its value to string dependency = 1 [(.google.api.field_behavior) = REQUIRED]; // Name of the inputVariable on the dependency string input_variable = 2 [(.google.api.field_behavior) = REQUIRED]; // Tells EasySaaS if this mapping should be used during lookup or not bool ignore_for_lookup = 3 [(.google.api.field_behavior) = OPTIONAL]; }Dalam codelab,
App UnitKindmenggunakanToMappinguntuk meneruskan variabel inputtenant_project_iddantenant_project_numberke dependensiCluster UnitKind. Hal ini memastikan bahwa cluster Kubernetes dibuat dalam project yang benar.ignore_for_lookupdiToMapping: Kolomignore_for_lookupdiToMappingmengontrol perilaku pencarian dependensi. Kolom ini adalah nilai boolean:false(atau tidak ditentukan): Jika ditetapkan kefalse, App Lifecycle Manager akan menggunakan variabel input yang ditentukan dalamToMappingsebagai kunci pencarian untuk menemukan unit dependensi yang ada. Jika unit dengan variabel input yang cocok ditemukan, unit tersebut akan digunakan kembali sebagai dependensi. Jika tidak ada unit yang cocok ditemukan, unit dependensi baru akan disediakan. Hal ini berguna untuk menggunakan kembali resource bersama seperti cluster.true: Jika ditetapkan ketrue, variabel input diToMappingtidak akan digunakan untuk pencarian dependensi. Artinya, unit dependensi baru akan selalu disediakan, meskipun unit dengan variabel input yang sama sudah ada. Hal ini berguna jika Anda memerlukan dependensi khusus yang tidak dibagikan untuk setiap unit dependen.
Contoh: Cluster Kubernetes bersama
Jika ingin menggunakan kembali cluster Kubernetes untuk beberapa unit aplikasi dalam project yang sama, Anda akan menggunakan ToMapping dengan ignore_for_lookup yang ditetapkan ke false dan memetakan variabel seperti tenant_project_id dan region ke jenis unit cluster. Unit dalam project dan region yang sama kemudian akan menggunakan kembali cluster yang sama.
Contoh: Cluster Kubernetes khusus per aplikasi
Jika memerlukan cluster Kubernetes khusus untuk setiap unit aplikasi, Anda akan menggunakan ToMapping dengan ignore_for_lookup yang ditetapkan ke true atau menghindari variabel pencarian ToMapping sama sekali. Setiap unit aplikasi kemudian akan memicu penyediaan cluster Kubernetes baru yang terisolasi.
Mengelola secret
Variabel App Lifecycle Manager tidak ditujukan untuk menyimpan informasi sensitif seperti sandi, kunci API, atau sertifikat. Menyimpan secret langsung dalam variabel menimbulkan risiko keamanan. Nilai variabel dapat dicatat dan berpotensi diekspos melalui output sistem, sehingga meningkatkan peluang akses yang tidak sah.
Untuk pengelolaan secret yang aman di aplikasi App Lifecycle Manager, sebaiknya gunakan Secret Manager.
Langkah berikutnya
- Untuk memahami App Lifecycle Manager lebih lanjut, lihat Ringkasan App Lifecycle Manager.
- Untuk mencoba tutorial, lihat Men-deploy instance MySQL dengan App Lifecycle Manager.
- Untuk mengetahui detail tentang cara menentukan penawaran Aplikasi dengan konfigurasi Terraform, lihat Cetak Biru di App Lifecycle Manager.