Kenali Terraform: Cara Mengelola Infrastruktur Lebih Cepat dan Konsisten
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!
Apa Itu Terraform?
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.
Apa Itu Infrastructure as Code?
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.
Bagaimana Cara Kerja Terraform?
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:
- Virtual machine
- Network
- Storage
- Database
- Load balancer
- DNS
- Kubernetes resource
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.
Komponen Penting dalam Terraform
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.tfuntuk resource utamavariables.tfuntuk variableoutputs.tfuntuk outputproviders.tfuntuk konfigurasi provider
Pembagian 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:
- Amazon Web Services
- Microsoft Azure
- Google Cloud
- Kubernetes
- Docker
- GitHub
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:
- Virtual machine
- Virtual network
- Database
- Storage
- Load balancer
- Firewall rule
- DNS record
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.
Contoh Sederhana Konfigurasi Terraform
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.
Apa Fungsi Terraform?
Terraform memiliki beberapa fungsi penting dalam pengelolaan infrastruktur modern.
- Provisioning Infrastruktur
Terraform dapat digunakan untuk membuat berbagai resource berdasarkan konfigurasi yang telah ditentukan. Proses ini membantu mengurangi kebutuhan konfigurasi manual melalui dashboard.
- Mengelola Infrastruktur
Terraform tidak hanya digunakan untuk membuat resource. Konfigurasi juga dapat digunakan untuk mengubah atau menghapus resource yang berada dalam pengelolaannya.
- Menjaga Konsistensi
Konfigurasi yang sama dapat digunakan sebagai dasar untuk membuat beberapa environment. Hal ini membantu mengurangi risiko perbedaan konfigurasi akibat proses manual.
- Version Control
File Terraform dapat disimpan dalam Git atau sistem version control lainnya. Dengan demikian, perubahan konfigurasi dapat dilacak, dibandingkan, dan direview sebelum diterapkan.
- Automasi
Terraform dapat diintegrasikan dengan workflow CI/CD sehingga perubahan infrastruktur dapat melalui proses otomatis dan terstruktur.
Kelebihan Terraform
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.
Kekurangan Terraform
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.
Perbedaan Terraform vs Konfigurasi Manual
| 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.
Perbedaan Terraform vs Ansible
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 dalam DevOps
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 untuk Multi-Cloud
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 dalam Cloud Computing
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.
Kapan Sebaiknya Menggunakan Terraform?
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.
Hal yang Perlu Diperhatikan Saat Menggunakan Terraform
Ada beberapa hal yang sebaiknya diperhatikan sebelum menggunakan Terraform, terutama pada lingkungan produksi.
- Kelola State dengan Aman
State merupakan bagian penting dari workflow Terraform. Untuk lingkungan tim, pertimbangkan penggunaan remote state atau layanan yang menyediakan pengelolaan state secara terpusat.
- Gunakan Version Control
Simpan konfigurasi Terraform dalam repository agar perubahan dapat dilacak dan direview.
- Tentukan Versi Provider
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.
- Gunakan Dependency Lock File
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.
- Periksa Execution Plan
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.
- Gunakan Module Secara Bijak
Module dapat membantu mengurangi konfigurasi berulang, tetapi sebaiknya tetap dibuat sederhana dan mudah dipahami. Terlalu banyak abstraksi justru dapat membuat konfigurasi lebih sulit dipelihara.
Kesimpulan
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.
