(0275) 2974 127
Mengelola infrastruktur secara manual dapat menjadi semakin rumit ketika jumlah server, jaringan, database, storage, dan resource cloud terus bertambah. Setiap konfigurasi harus dibuat dengan benar dan konsisten agar tidak terjadi perbedaan antara lingkungan development, staging, dan production.
Untuk mengatasi tantangan tersebut, banyak tim menggunakan pendekatan Infrastructure as Code (IaC). Dengan IaC, infrastruktur dapat didefinisikan melalui file konfigurasi sehingga proses provisioning dan pengelolaannya lebih mudah diulang, didokumentasikan, diperiksa, serta disimpan dalam version control.
Salah satu tool yang banyak digunakan untuk kebutuhan tersebut adalah Terraform. Terraform memungkinkan berbagai resource cloud maupun on-premises didefinisikan menggunakan konfigurasi yang dapat dibaca manusia dan kemudian dikelola melalui workflow yang konsisten. Lalu, apa itu Terraform, bagaimana cara kerjanya, dan apa saja manfaatnya? Berikut pembahasannya, simak sampai selesai ya!
Terraform adalah tool Infrastructure as Code (IaC) yang digunakan untuk membangun, mengubah, dan mengelola infrastruktur menggunakan file konfigurasi. Terraform dapat digunakan untuk mengelola berbagai jenis resource, mulai dari compute, storage, dan networking hingga DNS serta layanan SaaS, tergantung provider yang digunakan.
Terraform menggunakan pendekatan deklaratif. Artinya, pengguna mendefinisikan kondisi infrastruktur yang diinginkan tanpa harus menuliskan setiap langkah yang harus dilakukan untuk mencapainya.
Sebagai contoh, administrator dapat mendefinisikan sebuah virtual machine, jaringan, dan storage dalam konfigurasi Terraform. Terraform kemudian menentukan perubahan yang diperlukan agar infrastruktur aktual sesuai dengan konfigurasi tersebut. Pendekatan ini membuat konfigurasi infrastruktur lebih mudah digunakan kembali, dikelola melalui version control, dan diterapkan secara konsisten.
Infrastructure as Code (IaC) adalah pendekatan untuk mengelola dan menyediakan infrastruktur IT menggunakan kode atau file konfigurasi. Dengan konsep ini, pengaturan seperti server, jaringan, database, dan sumber daya cloud dapat didefinisikan secara terstruktur sehingga tidak harus dikonfigurasi satu per satu secara manual. Konfigurasi tersebut juga dapat disimpan dalam repository, ditinjau melalui code review, digunakan kembali, dan dikelola dengan sistem version control seperti kode aplikasi.
Sebagai contoh, sebuah perusahaan dapat memiliki lingkungan development, staging, dan production dengan kebutuhan infrastruktur yang berbeda. Jika setiap lingkungan dikonfigurasi secara manual, perbedaan pengaturan dapat lebih mudah terjadi dan berpotensi menimbulkan masalah saat aplikasi dipindahkan antarlingkungan. Dengan menerapkan IaC, konfigurasi infrastruktur dapat ditulis dalam kode sehingga proses penyediaan dan pengelolaan lingkungan menjadi lebih konsisten, terstruktur, dan mudah diulang.
Terraform merupakan salah satu tool populer yang menerapkan konsep Infrastructure as Code. Dengan Terraform, konfigurasi infrastruktur dapat didefinisikan dalam file konfigurasi sehingga proses provisioning dan perubahan infrastruktur dapat dilakukan secara lebih terkontrol.
Workflow dasar Terraform terdiri dari tiga tahap utama, yaitu Write, Plan, dan Apply. Sebelum itu, konfigurasi biasanya perlu diinisialisasi menggunakan terraform init. Berikut alur sederhananya:
1. Write
Pada tahap ini, pengguna menulis konfigurasi infrastruktur menggunakan file Terraform. File tersebut umumnya menggunakan ekstensi .tf dan menggunakan HashiCorp Configuration Language (HCL). Konfigurasi dapat mendefinisikan berbagai resource seperti:
Terraform menggunakan pendekatan deklaratif sehingga pengguna cukup menentukan kondisi akhir yang diinginkan.
2. Terraform Init
Setelah konfigurasi dibuat, perintah terraform init digunakan untuk menginisialisasi working directory Terraform.
Pada proses ini, Terraform mempersiapkan komponen yang dibutuhkan, termasuk menginstal provider yang sesuai dengan konfigurasi. terraform init juga dapat memperbarui dependency lock file ketika provider baru dipilih atau versi provider berubah.
3. Terraform Plan
Selanjutnya, terraform plan digunakan untuk melihat perubahan yang akan dilakukan. Terraform membandingkan konfigurasi dengan state dan kondisi infrastruktur yang diketahui, kemudian menghasilkan execution plan yang menunjukkan resource yang akan dibuat, diubah, atau dihapus. Dengan demikian, pengguna dapat memeriksa perubahan sebelum benar-benar diterapkan.
4. Terraform Apply
Setelah perubahan diperiksa, terraform apply digunakan untuk menerapkan konfigurasi. Jika pengguna menjalankan terraform apply tanpa memberikan saved plan, Terraform akan membuat execution plan terlebih dahulu dan meminta persetujuan sebelum melakukan perubahan. Setelah disetujui, Terraform menjalankan operasi sesuai dependency antarresource dan memperbarui state setelah proses selesai.
5. Terraform Destroy
Ketika resource yang dikelola Terraform sudah tidak diperlukan, perintah terraform destroy dapat digunakan untuk menghancurkan resource tersebut. Perintah ini perlu digunakan dengan hati-hati karena dapat menghapus resource nyata yang masih digunakan oleh aplikasi atau layanan.
Agar dapat memahami Terraform dengan baik, terdapat beberapa konsep utama yang perlu diketahui.
1. Configuration
Configuration merupakan file yang berisi definisi infrastruktur yang ingin dibuat atau dikelola. Terraform configuration umumnya ditulis menggunakan HCL. File tersebut dapat dibagi menjadi beberapa file .tf agar konfigurasi lebih mudah dikelola. Misalnya, sebuah proyek dapat memiliki:
main.tf untuk resource utamavariables.tf untuk variableoutputs.tf untuk outputproviders.tf untuk konfigurasi providerPembagian tersebut bukan kewajiban, tetapi dapat membantu menjaga struktur proyek tetap rapi.
2. Provider
Provider adalah plugin yang memungkinkan Terraform berkomunikasi dengan platform cloud, layanan SaaS, maupun API lainnya. Setiap resource Terraform diimplementasikan oleh provider tertentu. Beberapa provider yang populer antara lain:
Daftar provider publik dapat ditemukan melalui Terraform Registry. Provider juga memiliki versi yang dirilis secara terpisah dari Terraform. Karena itu, konfigurasi produksi sebaiknya menentukan batasan versi provider agar pembaruan yang tidak diinginkan dapat dihindari.
3. Resource
Resource adalah komponen infrastruktur yang dikelola oleh Terraform. Contohnya dapat berupa:
Jenis resource yang tersedia bergantung pada provider yang digunakan.
4. State
Terraform state merupakan bagian penting dalam pengelolaan infrastruktur. State menyimpan informasi mengenai resource yang dikelola Terraform sehingga Terraform dapat mengetahui hubungan antara konfigurasi dan infrastruktur yang ada. State kemudian digunakan saat Terraform membuat execution plan untuk menentukan perubahan yang diperlukan.
Dalam lingkungan tim, state perlu dikelola secara hati-hati. Penggunaan remote state atau layanan seperti HCP Terraform dapat membantu tim berbagi state secara terpusat dan mengurangi masalah ketika beberapa orang bekerja pada infrastruktur yang sama.
5. Module
Module adalah kumpulan konfigurasi Terraform yang dapat digunakan kembali.Misalnya, sebuah perusahaan memiliki konfigurasi standar untuk membuat server aplikasi. Daripada menulis konfigurasi yang sama berulang kali, konfigurasi tersebut dapat dibuat menjadi module dan digunakan pada beberapa proyek.
Module membantu mengurangi konfigurasi berulang sekaligus membuat struktur infrastruktur lebih konsisten.
Agar lebih mudah dipahami, berikut contoh konfigurasi sederhana menggunakan provider random. Contoh ini hanya untuk menunjukkan struktur dasar Terraform dan tidak membuat server atau resource cloud.
terraform {
required_providers {
random = {
source = "hashicorp/random"
version = "~> 3.0"
}
}
}
resource "random_pet" "server_name" {
length = 2
}
Pada contoh tersebut, Terraform mendeklarasikan provider random dan sebuah resource random_pet. Contoh ini dapat digunakan untuk memahami struktur provider requirement dan resource tanpa membutuhkan akun cloud.
Versi provider sengaja ditentukan menggunakan version constraint. Terraform memang menyediakan mekanisme untuk membatasi versi provider yang dapat digunakan, dan dependency lock file dapat digunakan untuk membantu mempertahankan versi provider yang konsisten.
Terraform memiliki beberapa fungsi penting dalam pengelolaan infrastruktur modern.
Terraform dapat digunakan untuk membuat berbagai resource berdasarkan konfigurasi yang telah ditentukan. Proses ini membantu mengurangi kebutuhan konfigurasi manual melalui dashboard.
Terraform tidak hanya digunakan untuk membuat resource. Konfigurasi juga dapat digunakan untuk mengubah atau menghapus resource yang berada dalam pengelolaannya.
Konfigurasi yang sama dapat digunakan sebagai dasar untuk membuat beberapa environment. Hal ini membantu mengurangi risiko perbedaan konfigurasi akibat proses manual.
File Terraform dapat disimpan dalam Git atau sistem version control lainnya. Dengan demikian, perubahan konfigurasi dapat dilacak, dibandingkan, dan direview sebelum diterapkan.
Terraform dapat diintegrasikan dengan workflow CI/CD sehingga perubahan infrastruktur dapat melalui proses otomatis dan terstruktur.
Terraform memiliki beberapa kelebihan yang membuatnya banyak digunakan dalam pengelolaan infrastruktur.
1. Infrastruktur Dikelola sebagai Kode
Konfigurasi infrastruktur dapat ditulis dalam file sehingga lebih mudah disimpan, dibagikan, dan dikelola daripada konfigurasi yang hanya dilakukan melalui dashboard.
2. Konsisten dan Dapat Diulang
Konfigurasi yang sama dapat digunakan untuk membuat lingkungan dengan pola yang serupa. Hal ini membantu mengurangi risiko kesalahan akibat konfigurasi manual.
3. Mendukung Banyak Platform
Terraform dapat digunakan untuk berbagai platform selama tersedia provider yang sesuai. Hal ini membuat Terraform dapat digunakan pada lingkungan cloud maupun layanan lainnya.
4. Perubahan Dapat Ditinjau
Dengan terraform plan, pengguna dapat melihat perubahan yang akan dilakukan sebelum konfigurasi diterapkan.
5. Mendukung Reusable Configuration
Module memungkinkan konfigurasi tertentu digunakan kembali sehingga tim tidak perlu membuat struktur yang sama dari awal.
6. Cocok untuk Kolaborasi
Karena konfigurasi berupa file, Terraform dapat diintegrasikan dengan version control dan workflow kolaborasi tim. HCP Terraform juga menyediakan kemampuan untuk shared state, workflow tim, akses berbasis peran, dan integrasi version control.
Meskipun memiliki banyak kelebihan, Terraform juga memiliki beberapa tantangan.
1. Kurva Belajar
Pengguna perlu memahami konsep seperti HCL, provider, resource, state, module, dependency, dan workflow Terraform. Bagi pemula, konsep tersebut membutuhkan waktu untuk dipelajari.
2. State Harus Dikelola dengan Baik
State merupakan komponen penting dalam Terraform sehingga pengelolaannya perlu diperhatikan, terutama ketika digunakan oleh banyak anggota tim.
3. Bergantung pada Provider
Kemampuan Terraform dalam mengelola platform tertentu bergantung pada provider yang digunakan. Setiap provider memiliki resource, fitur, dokumentasi, dan siklus rilisnya sendiri.
4. Tetap Membutuhkan Review
Terraform dapat mengotomatisasi perubahan infrastruktur, tetapi bukan berarti setiap perubahan boleh diterapkan tanpa pemeriksaan. Execution plan tetap perlu ditinjau untuk memastikan resource yang dibuat, diubah, atau dihapus memang sesuai dengan tujuan.
| Aspek | Terraform | Konfigurasi Manual |
|---|---|---|
| Cara konfigurasi | File kode | Dashboard atau perintah manual |
| Konsistensi | Lebih mudah dijaga | Bergantung pada operator |
| Reusability | Tinggi | Lebih terbatas |
| Version control | Mudah | Tidak selalu tersedia |
| Review perubahan | Menggunakan execution plan | Bergantung pada prosedur |
| Automasi | Sangat mendukung | Membutuhkan proses tambahan |
| Skalabilitas | Cocok untuk infrastruktur yang berkembang | Dapat semakin kompleks |
| Pembelajaran | Membutuhkan pemahaman IaC | Relatif sederhana untuk kebutuhan kecil |
Konfigurasi manual masih dapat digunakan untuk kebutuhan sederhana. Namun, ketika jumlah resource dan frekuensi perubahan meningkat, Infrastructure as Code dapat membantu membuat proses pengelolaan lebih terstruktur.
Terraform dan Ansible sama-sama sering digunakan dalam DevOps, tetapi keduanya memiliki fokus yang berbeda.
| Aspek | Terraform | Ansible |
|---|---|---|
| Fokus utama | Provisioning dan pengelolaan infrastruktur | Configuration management dan automation |
| Pendekatan | Deklaratif | Berbasis task/playbook |
| Provisioning resource | Salah satu fokus utama | Dapat dilakukan |
| Konfigurasi software | Bukan fokus utama | Salah satu penggunaan utama |
| State | Menggunakan Terraform state | Tidak menggunakan state dengan konsep yang sama |
| Contoh penggunaan | Membuat VM, network, database | Instalasi software dan konfigurasi server |
Dalam praktiknya, Terraform dan Ansible dapat digunakan bersama. Terraform dapat menyediakan infrastruktur, kemudian Ansible digunakan untuk melakukan konfigurasi software dan sistem di dalam resource tersebut.
Terraform memiliki hubungan erat dengan praktik DevOps karena konfigurasi infrastrukturnya dapat diperlakukan seperti kode aplikasi. Konfigurasi dapat disimpan dalam repository, diperiksa melalui code review, dan dijalankan melalui pipeline CI/CD. Terraform sendiri menyediakan workflow Write, Plan, dan Apply yang dapat diterapkan baik oleh individu maupun tim.
Sebagai contoh, ketika tim membutuhkan environment baru, konfigurasi Terraform dapat digunakan untuk menyediakan network, compute, database, dan resource lainnya secara konsisten.
Dengan pendekatan ini, proses provisioning tidak sepenuhnya bergantung pada langkah manual administrator.
Terraform dapat digunakan untuk mengelola infrastruktur pada berbagai platform cloud melalui provider yang sesuai. Dalam lingkungan multi-cloud, misalnya, sebuah organisasi dapat menggunakan AWS untuk aplikasi tertentu, Google Cloud untuk workload lainnya, dan Azure untuk kebutuhan infrastruktur yang berbeda. Masing-masing platform dapat dikelola menggunakan konfigurasi Terraform sesuai dengan layanan dan provider yang digunakan.
Meski demikian, penggunaan Terraform dalam lingkungan multi-cloud tidak membuat seluruh platform cloud menjadi sama. Setiap penyedia cloud tetap memiliki layanan, arsitektur, fitur keamanan, dan karakteristik yang berbeda. Terraform berperan menyediakan pendekatan pengelolaan infrastruktur berbasis konfigurasi yang lebih konsisten, sehingga organisasi dapat mengelola berbagai lingkungan cloud melalui workflow yang terstruktur dan dapat diulang.
Terraform sangat relevan dengan cloud computing karena banyak layanan cloud menyediakan API yang dapat diakses melalui provider Terraform.
Alur sederhananya adalah: Terraform → Provider → API Platform → Cloud Resource
Dengan pendekatan tersebut, resource seperti compute, storage, network, database, dan layanan lainnya dapat dikelola melalui konfigurasi. Terraform juga dapat mengelola resource dari beberapa provider dalam satu konfigurasi, selama provider dan resource yang dibutuhkan tersedia.
Terraform cocok dipertimbangkan ketika organisasi mulai memiliki kebutuhan untuk mengelola banyak resource secara konsisten. Contohnya ketika perusahaan menggunakan beberapa environment, membutuhkan provisioning yang dapat diulang, ingin menyimpan konfigurasi infrastruktur dalam version control, atau ingin mengintegrasikan perubahan infrastruktur dengan workflow CI/CD.
Terraform juga berguna ketika infrastruktur sering berubah atau dikelola oleh beberapa anggota tim. Dalam kondisi seperti ini, konfigurasi berbasis kode dapat membantu membuat perubahan lebih mudah dilacak dan direview. Sebaliknya, untuk infrastruktur yang sangat sederhana dan jarang mengalami perubahan, pengelolaan manual mungkin masih cukup praktis.
Ada beberapa hal yang sebaiknya diperhatikan sebelum menggunakan Terraform, terutama pada lingkungan produksi.
State merupakan bagian penting dari workflow Terraform. Untuk lingkungan tim, pertimbangkan penggunaan remote state atau layanan yang menyediakan pengelolaan state secara terpusat.
Simpan konfigurasi Terraform dalam repository agar perubahan dapat dilacak dan direview.
Gunakan version constraint pada provider agar Terraform tidak secara otomatis memilih versi yang tidak sesuai dengan kebutuhan konfigurasi. HashiCorp merekomendasikan penggunaan batasan versi provider, terutama untuk lingkungan produksi.
Terraform dapat membuat dependency lock file yang mencatat versi provider yang dipilih. File ini sebaiknya dipertimbangkan untuk disimpan bersama konfigurasi dalam version control agar penggunaan provider lebih konsisten.
Sebelum menerapkan perubahan, periksa hasil terraform plan atau execution plan yang ditampilkan oleh terraform apply. Pastikan resource yang akan dibuat, diubah, atau dihapus memang sesuai dengan tujuan.
Module dapat membantu mengurangi konfigurasi berulang, tetapi sebaiknya tetap dibuat sederhana dan mudah dipahami. Terlalu banyak abstraksi justru dapat membuat konfigurasi lebih sulit dipelihara.
Terraform adalah tool Infrastructure as Code yang memungkinkan infrastruktur didefinisikan dan dikelola melalui file konfigurasi. Dengan pendekatan ini, proses provisioning dapat dibuat lebih konsisten, dapat diulang, terdokumentasi, dan terintegrasi dengan version control.
Konsep penting seperti provider, resource, state, module, plan, dan apply menjadi dasar dalam penggunaan Terraform. Tool ini cocok untuk berbagai kebutuhan, mulai dari pengelolaan resource cloud hingga otomatisasi infrastruktur dalam workflow DevOps.
Bagi organisasi yang infrastrukturnya terus berkembang, Terraform dapat membantu membuat pengelolaan server, network, database, dan resource lainnya menjadi lebih terstruktur.
Untuk mendapatkan informasi lainnya seputar cloud computing, server, DevOps, hosting, dan teknologi digital, kunjungi Blog Hosteko dan temukan berbagai artikel informatif lainnya.
Ketika kebutuhan penyimpanan data semakin besar, perusahaan tidak selalu dapat mengandalkan hard disk atau SSD…
Dalam sistem database modern, data sering kali tidak hanya disimpan pada satu server. Untuk meningkatkan…
Browser dengan VPN menjadi salah satu pilihan bagi pengguna yang ingin menambah perlindungan privasi ketika…
Dalam bisnis digital, memiliki banyak target belum tentu membuat perusahaan bergerak ke arah yang sama.…
Setelah mengetahui kriteria pemilihan browser dengan VPN, langkah berikutnya adalah melihat beberapa pilihan yang tersedia.…
Di tengah meningkatnya ancaman siber, zero-day vulnerability menjadi salah satu jenis kerentanan yang perlu mendapat…