Dokumen ini menjelaskan cara kerja variabel, pemetaan variabel, dan dependensi dalam Runtime SaaS.
Runtime SaaS 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 Runtime SaaS.
Unit dan variabel
Inti dari Runtime SaaS 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 memparameterisasi 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, Runtime SaaS juga bergantung pada sekumpulan variabel wajib. Variabel ini dikenali dan ditangani secara otomatis oleh Runtime SaaS, meskipun tidak ditentukan secara eksplisit dalam konfigurasi Terraform.
Variabel wajibnya adalah:
project_iddanproject_number(atau,tenant_project_iddantenant_project_id): Variabel ini menentukan Google Cloud project ID tempat resource unit Anda akan di-deploy. Anda dapat menggunakan salah satuproject_iddanproject_number, atautenant_iddantenant_project_id. 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 project number. Anda dapat menggunakanproject_numberatautenant_project_numbersecara bergantian.Anda dapat menemukan nomor project di samping 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 Runtime SaaS (melalui Infrastructure Manager) untuk menjalankan konfigurasi Terraform saat menyediakan, mengupdate, 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 Runtime SaaS, Anda harus memahami hierarki nilai variabel yang digunakan selama operasi unit.
Urutannya adalah sebagai berikut (dari prioritas terendah hingga tertinggi):
Runtime SaaS 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 disediakan 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
Runtime SaaS memungkinkan Anda menentukan dependensi antar-unit. Hal ini penting untuk membuat aplikasi SaaS yang kompleks, tempat berbagai komponen 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, Runtime SaaS 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, Runtime SaaS akan otomatis memeriksa keberadaan unit dependensi tersebut.
Jika unit dependensi tidak ditemukan, Runtime SaaS akan otomatis menyediakannya sebelum menyediakan unit dependen.
Runtime SaaS 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. Hal ini memungkinkan Anda 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, Runtime SaaS 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 Runtime SaaS 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 Runtime SaaS, sebaiknya gunakan Secret Manager.
Langkah berikutnya
- Untuk memahami lebih lanjut Runtime SaaS, lihat Ringkasan Runtime SaaS.
- Untuk mencoba tutorial, lihat Men-deploy VM dengan Runtime SaaS.
- Untuk mengetahui detail tentang cara menentukan penawaran SaaS dengan konfigurasi Terraform, lihat Cetak Biru di Runtime SaaS.