Cara kerja Terraform
Di unit sebelumnya, kami membahas apa itu bahasa Terraform HCL (HashiCorp Configuration Language) dan manfaat yang diberikannya untuk penulisan modul. Sebelum Memulai proses penulisan modul Terraform untuk memprovisikan sumber daya Anda, Anda ingin mempelajari selengkapnya tentang cara kerja Terraform.
Pada unit ini, Anda akan mempelajari bagaimana Terraform berfungsi dengan penyedia dan berkas status.
Terraform CLI
Apa itu Terraform? Pada dasarnya, Terraform adalah alat CLI. Gratis untuk digunakan di bawah BSL (Lisensi Sumber Bisnis) dan dapat diunduh di sini. Terraform CLI adalah satu-satunya alat yang Anda butuhkan untuk melakukan deploy dengan Terraform.
Ada dua produk terkait lainnya yang disebut Terraform Enterprise atau Terraform Cloud. Produk-produk ini terpisah dengan Terraform CLI. Mereka menyediakan fitur, seperti manajemen status dan registri modul privat untuk menyederhanakan adopsi Terraform. Mereka menyematkan Terraform CLI, tetapi masih menggunakan versi CLI Terraform yang sama dengan yang digunakan orang lain untuk menyebarkan sumber daya.
Penyedia Terraform
Di unit sebelumnya, Anda mempelajari bahwa HCL adalah bahasa khusus domain yang dirancang untuk skenario atau domain tertentu. HCL dibangun untuk memudahkan penyebaran dan konfigurasi sumber daya apa pun di cloud atau layanan apa pun dengan Terraform.
Bagaimana Terraform tahu tentang spesifikasi Azure? Dan bagaimana dengan Azure DevOps, GitHub, dll. untuk hal tersebut. Alat Terraform CLI tidak mengetahui apa pun tentang Azure atau cloud atau layanan lainnya, hanya mengetahui cara mengelola state dan merencanakan penyebaran. Penyedia Terraform bertanggung jawab untuk menjeda kesenjangan antara Terraform CLI dan API target, dalam kasus kami Azure. Terraform memiliki konsep plugin dan penyedia adalah sebuah jenis plugin. Penyedia dimuat ke dalam Terraform CLI pada fase inisialisasi berdasarkan persyaratan dalam kode HCL Anda.
Microsoft mengumpulkan banyak penyedia dalam kolaborasi dengan HashiCorp dan komunitas. Penyedia ini meliputi:
- azurerm: Penyedia ini adalah cara paling ramah pengguna untuk menyebarkan sumber daya ke Azure. Penyedia ini mungkin membutuhkan waktu untuk mendukung fitur Azure baru.
- azapi: Penyedia ini memungkinkan penyebaran sumber daya Azure apa pun, termasuk sumber daya dalam pratinjau. Selalu diperbarui dengan fitur Azure terbaru.
- azuread: Penyedia ini digunakan untuk mengelola ID Microsoft Entra. Ini dapat mengelola banyak fitur, termasuk pengguna, grup, dan perwakilan layanan.
- azuredevops: Penyedia ini digunakan untuk mengelola semua aspek Azure DevOps, termasuk repositori, alur, dan proyek.
- github: Penyedia ini digunakan untuk mengelola semua aspek GitHub, termasuk organisasi, repositori, dan tindakan.
Terraform CLI berinteraksi dengan penyedia melalui antarmuka standar. Antarmuka ini memungkinkan Terraform CLI untuk membangun grafik dependensi dan mengelola status tanpa perlu mengetahui detail implementasi penyedia.
Penyedia terdiri dari sumber daya dan sumber data. Sumber daya dikelola dengan Terraform. Sumber data digunakan untuk membaca atribut sumber daya tanpa mengelolanya.
Anda dapat menulis penyedia Anda sendiri untuk bekerja dengan titik akhir API internal, sehingga Anda pada dasarnya dapat mengelola apa pun dengan Terraform. Penyedia harus ditulis dalam bahasa pemrograman Go.
Alur Kerja Terraform
Saat menggunakan Terraform CLI, ada empat langkah mendasar dalam alur kerja:
- Tulis: Tulis kode HCL untuk menentukan status yang Anda inginkan.
- Init: Tarik ke bawah penyedia dan modul. Sambungkan ke status jarak jauh.
- Rencana: Menghasilkan rencana untuk membawa status aktual sejalan dengan status yang diinginkan, dengan mengkueri sumber daya yang Anda sebarkan dan membandingkan dengan konfigurasi.
- Laksanakan rencana dan sesuaikan lingkungan target melalui panggilan API.
Siklus Hidup Terraform
Terraform dirancang dan harus digunakan untuk mengelola siklus hidup sumber daya Anda. Dengan menggunakan file status, Terraform dapat mengelola sumber daya Anda melalui tahapan ini:
- Buat: Sumber daya dalam status yang diinginkan, tetapi tidak ada dalam status aktual dan dibuat di Azure.
- Pembaruan: Status atribut sumber daya yang diinginkan tidak cocok dengan status aktual dan sumber daya diperbarui agar sejalan dengan status yang diinginkan.
- Hancurkan: Sumber daya tidak lagi ada dalam status yang diinginkan dan dihapus dari Azure.
Langkah pembaruan dapat terjadi berkali-kali selama masa pakai sumber daya karena persyaratan diubah dari waktu ke waktu. Misalnya bayangkan Anda mengelola aturan Azure Firewall dengan Terraform, Anda mungkin harus memperbarui aturan ini pada irama reguler untuk menambahkan aturan baru, menyesuaikan aturan yang ada, dan menghapus aturan.
Status Terraform
Status terraform diperlukan untuk mendukung siklus hidup Terraform. Terraform tidak memiliki wawasan tentang Azure atau cloud atau layanan lain yang mungkin dikelolanya. Dengan demikian, perlu cara agnostik untuk mengetahui apa yang sedang dikelolanya. File status adalah mekanisme tersebut.
Terraform memetakan konfigurasi HCL ke ID sumber daya di Azure. Terraform dapat mengelola sumber daya, karena memiliki ID yang dipetakan. Ketika sumber daya dihapus dari HCL, Terraform berencana untuk menghancurkan sumber daya tersebut. Tanpa file status, Terraform tidak akan memiliki pengetahuan tentang sumber daya tersebut.
File status dapat berisi data sensitif dan harus disimpan dengan aman. Sebaiknya gunakan Terraform Cloud / Enterprise atau Azure Blob Storage untuk mengelola file status Anda.