All Products
Search
Document Center

Terraform:Pengenalan state Terraform

Last Updated:Oct 16, 2025

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:

  1. 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.

  2. 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.

  3. 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:

  1. Pembaruan otomatis

    Setelah Anda mengonfigurasi backend remote, Terraform secara otomatis memuat file state dari lokasi remote setiap kali Anda menjalankan perintah plan atau apply. Selain itu, ia secara otomatis menyimpan file state yang diperbarui secara remote setelah setiap apply, yang menghilangkan risiko kesalahan manual.

  2. Dukungan Penguncian Status

    Saat Anda menjalankan perintah Terraform, file state remote dapat dikunci. Ini mencegah file state rusak jika beberapa pengembang menjalankan terraform apply pada saat yang sama.

  3. 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:

  1. Buat Sumber Daya Dependen

    Pertama, tambahkan sumber daya alicloud_oss_bucket, alicloud_ots_instance, dan alicloud_ots_table ke file konfigurasi Terraform, seperti main.tf. Konfigurasikan sumber daya sesuai kebutuhan dengan menyetel parameter seperti nama bucket, nama instance Tablestore, tipe instans, dan nama tabel. Setelah konfigurasi selesai, jalankan terraform apply untuk membuat bucket dan sumber daya lainnya.

  2. Konfigurasikan Remote State

    Selanjutnya, tambahkan kode konfigurasi backend ke file konfigurasi Terraform baru bernama backend.tf, lalu jalankan terraform init untuk 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. Masukkan yes. Setelah terraform init berhasil 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:

  1. 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 .gitignore Anda.

  2. 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.

  3. 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.

  4. 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.