Apa itu state Terraform
State Terraform merupakan elemen penting dalam siklus hidup Terraform. State ini berfungsi sebagai repositori metadata untuk konfigurasi infrastruktur Anda. Terraform menyimpan status sumber daya yang dikelolanya dalam file state.
Secara default, state disimpan dalam file bernama terraform.tfstate, tetapi juga dapat disimpan secara remote. Penyimpanan remote direkomendasikan untuk skenario kolaborasi tim dalam mengelola infrastruktur.
Terraform menggunakan state untuk membuat rencana eksekusi dan memodifikasi infrastruktur Anda. Sebelum operasi apa pun, Terraform melakukan refresh untuk memperbarui state dengan keadaan aktual infrastruktur. Tujuan utama state Terraform adalah menyimpan pemetaan antara objek infrastruktur di sistem remote, seperti di cloud, dan instans sumber daya yang dideklarasikan dalam file konfigurasi. Ketika Terraform membuat atau memodifikasi objek remote berdasarkan file konfigurasi, ia mencatat identitas objek remote tersebut dalam instans sumber daya yang sesuai dan menyimpannya dalam file state. Terraform kemudian dapat memperbarui atau menghapus objek tersebut berdasarkan perubahan konfigurasi di masa mendatang.
Setiap sumber daya infrastruktur yang dibuat dalam blok resource diidentifikasi dalam state Terraform oleh resource_name. Alur manajemen untuk sumber daya tersebut adalah sebagai berikut:
Saat Anda menerapkan konfigurasi Terraform untuk pertama kalinya menggunakan
terraform apply, sumber daya infrastruktur dibuat, dan file state secara otomatis dihasilkan. File ini merujuk pada nama yang dideklarasikan dalam blok resource.Jika sebuah sumber daya sudah diidentifikasi dalam file state Terraform, Terraform membandingkan file konfigurasi dengan file state dan keadaan aktual sumber daya remote. Berdasarkan perbandingan ini, rencana eksekusi dihasilkan.
Ketika rencana dieksekusi, sumber daya diperbarui agar sesuai dengan definisi dalam file konfigurasi. Jika pembaruan parameter in-place tidak memungkinkan karena keterbatasan API remote, rencana eksekusi akan menghapus sumber daya dan kemudian membuat ulangnya. Jika rencananya adalah menghapus sumber daya, Terraform memulai operasi penghapusan.
Setelah rencana berhasil dieksekusi, file state Terraform diperbarui untuk mencerminkan keadaan infrastruktur saat ini.
Jika sebuah sumber daya dihapus dari konfigurasi Terraform saat ini tetapi masih ada dalam file state, Terraform menghapus sumber daya yang tidak lagi ada dalam konfigurasi.
Menyimpan state Terraform
Secara default, Terraform menyimpan state secara lokal dalam direktori kerja saat ini dalam file dengan ekstensi .tfstate. Pengaturan ini tidak memerlukan konfigurasi tambahan dan cocok untuk proyek dengan satu pengembang. Namun, ketika beberapa pengembang menjalankan Terraform secara bersamaan, masing-masing dengan file state lokal mereka sendiri, konfigurasi ini dapat menyebabkan masalah.
Menggunakan state lokal dalam skenario kolaborasi tim menyajikan masalah berikut:
Kurangnya akses bersama
Saat menggunakan Terraform untuk memperbarui infrastruktur, setiap anggota tim perlu mengakses file state yang sama. Ini memerlukan penyimpanan file di lokasi bersama, seperti Instance ECS, yang menambah beban manajemen.
Tanpa Penguncian Keadaan
Jika dua anggota tim menjalankan Terraform pada saat yang sama, mereka mungkin mengalami kondisi balapan. Beberapa proses Terraform dapat memperbarui file state secara bersamaan, yang berisiko terjadi konflik, kehilangan data, dan korupsi file state.
File status lokal tidak mengandung informasi rahasia
Karena informasi disimpan dalam teks biasa di file state, data sensitif seperti kredensial database dan kata sandi logon SSH berisiko terpapar.
Oleh karena itu, ketika beberapa pengembang dalam tim mengelola infrastruktur dengan kode, kami merekomendasikan untuk menyimpan file state di lokasi remote yang terpusat. Dengan cara ini, ketika infrastruktur berubah, file state remote diperbarui, memastikan semua orang di tim bekerja dengan keadaan infrastruktur terbaru.
Menggunakan penyimpanan state remote menyelesaikan masalah yang terkait dengan state lokal:
Pembaruan otomatis
Setelah Anda mengonfigurasi backend remote, Terraform secara otomatis memuat file state dari lokasi remote setiap kali Anda menjalankan perintah
planatauapply. Selain itu, ia secara otomatis menyimpan file state yang diperbarui secara remote setelah setiapapply, yang menghilangkan risiko kesalahan manual.Dukungan Penguncian Status
Saat Anda menjalankan perintah Terraform, file state remote dapat dikunci. Ini mencegah file state rusak jika beberapa pengembang menjalankan
terraform applypada saat yang sama.Penyimpanan file remote lebih aman daripada penyimpanan lokal untuk file state.
Bucket OSS mendukung enkripsi dalam transit dan saat diam. Selain itu, bucket OSS menyediakan beberapa metode untuk mengonfigurasi izin akses, sehingga Anda dapat mengontrol akses ke file state secara detail halus.
Mengonfigurasi penyimpanan state remote
Alibaba Cloud menyediakan kemampuan penyimpanan state remote berdasarkan Bucket OSS dan mendukung penguncian file state remote menggunakan Tablestore. Oleh karena itu, sebelum mengonfigurasi penyimpanan state remote, Anda harus terlebih dahulu membuat Bucket OSS untuk menyimpan file state dan instance Tablestore untuk penguncian. Bagian berikut menunjukkan cara menyimpan state Terraform secara remote di Bucket OSS:
Buat Sumber Daya Dependen
Pertama, tambahkan sumber daya
alicloud_oss_bucket,alicloud_ots_instance, danalicloud_ots_tableke file konfigurasi Terraform, sepertimain.tf. Konfigurasikan sumber daya sesuai kebutuhan dengan menyetel parameter seperti nama bucket, nama instance Tablestore, tipe instans, dan nama tabel. Setelah konfigurasi selesai, jalankanterraform applyuntuk membuat bucket dan sumber daya lainnya.Konfigurasikan Remote State
Selanjutnya, tambahkan kode konfigurasi backend ke file konfigurasi Terraform baru bernama
backend.tf, lalu jalankanterraform inituntuk mengonfigurasi state remote Terraform Anda. Pada titik ini, Terraform mendeteksi bahwa file state lokal sudah ada dan meminta Anda untuk menyalinnya ke Bucket OSS baru. Masukkanyes. Setelahterraform initberhasil dijalankan, state Terraform Anda disimpan di Bucket OSS.
Untuk mengonfigurasi penyimpanan remote dengan lebih nyaman, Anda dapat menggunakan Terraform Module yang disediakan oleh Alibaba Cloud.
Berikut adalah cuplikan file state dari Bucket OSS:
{
"version": 4,
"terraform_version": "1.7.1",
"serial": 9,
"lineage": "5827f172-fc29-c293-cce7-7932f3537499",
"outputs": {},
"resources": [
{
"mode": "managed",
"type": "alicloud_oss_bucket",
"name": "this",
"provider": "provider[\"registry.terraform.io/hashicorp/alicloud\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"access_monitor": [
{
"status": "Disabled"
}
],
"acl": "private",
"bucket": "tf-oss-backend-for-demo",File state mencakup metadata untuk sumber daya yang dibuat, seperti tipe sumber daya, nama sumber daya, dan nama penyedia.
Praktik terbaik untuk state Terraform
Berikut adalah saran untuk mengoptimalkan dan mengamankan file state Terraform:
Gunakan state remote dalam skenario kolaborasi tim
Gunakan state remote dalam skenario kolaborasi tim untuk mengunci dan memversi file state. Pelanggan Alibaba Cloud harus menggunakan OSS sebagai backend penyimpanan state remote dan menggunakan Tablestore untuk mengunci file state. Pastikan hanya sistem build dan administrator dengan hak istimewa tinggi yang dapat mengakses bucket penyimpanan state remote. Untuk mencegah pengembang secara tidak sengaja mengirimkan file state lokal ke sistem kontrol versi kode sumber, seperti GitHub atau GitLab, tambahkan pola file state (
*.tfstate) ke file.gitignoreAnda.Jangan menyimpan data sensitif dalam state
Banyak sumber daya dan penyedia data menyimpan data sensitif dalam teks biasa di file state, yang menimbulkan risiko keamanan. Jika memungkinkan, hindari menyimpan informasi sensitif di file state.
Enkripsi state
Sebagai lapisan pertahanan tambahan, selalu enkripsi file state remote. Alibaba Cloud OSS mendukung tiga metode enkripsi: KMS, AES256, dan SM4. Anda dapat memberikan lapisan perlindungan tambahan untuk file state menggunakan kunci KMS kustom.
Jangan modifikasi state Terraform secara manual
File state sangat penting untuk menjaga pemetaan antara konfigurasi Terraform dan sumber daya infrastruktur Alibaba Cloud Anda. Kerusakan file state dapat menyebabkan masalah infrastruktur besar. Oleh karena itu, jangan mencoba memodifikasi isi file state Terraform secara manual.