All Products
Search
Document Center

Terraform:Ketergantungan Sumber Daya

Last Updated:Oct 16, 2025

Topik ini menjelaskan ketergantungan sumber daya.

Saat membangun infrastruktur, Anda dapat memvisualisasikan grafik ketergantungan untuk memahami arsitektur infrastruktur. Grafik ini menunjukkan bagaimana sumber daya terhubung dan saling bergantung.

Saat Terraform dijalankan, ia secara otomatis membangun grafik ketergantungan dari file konfigurasi untuk menghasilkan rencana eksekusi dan menyegarkan status sumber daya. Kode berikut adalah contoh file konfigurasi yang digunakan untuk membuat Instance ECS:

provider "alicloud" {
  # Konfigurasikan kredensial Alibaba Cloud dan informasi wilayah Anda.
  # Konfigurasikan kredensial Alibaba Cloud Anda. Untuk alasan keamanan, kami merekomendasikan agar Anda tidak menyertakan AccessKey dan SecretKey Alibaba Cloud langsung di file ini. Kami merekomendasikan agar Anda menggunakan variabel lingkungan atau metode aman lainnya untuk mengatur kredensial.
  # export ALICLOUD_ACCESS_KEY="<Your Alibaba Cloud AccessKey>"
  # export ALICLOUD_SECRET_KEY="<Your Alibaba Cloud SecretKey>"
  region = "cn-hangzhou"
}

# Buat VPC.
resource "alicloud_vpc" "my_vpc" {
  vpc_name   = "main-vpc"
  cidr_block = "10.0.0.0/16"
}

# Buat vSwitch.
resource "alicloud_vswitch" "my_vswitch" {
  vpc_id       = alicloud_vpc.my_vpc.id
  cidr_block   = "10.0.1.0/24"
  zone_id      = "cn-hangzhou-h"
  vswitch_name = "main-vswitch"
}

# Buat grup keamanan.
resource "alicloud_security_group" "my_sg" {
  vpc_id = alicloud_vpc.my_vpc.id
  name   = "main-security-group"
}

# Tambahkan aturan grup keamanan untuk mengizinkan akses SSH.
resource "alicloud_security_group_rule" "allow_ssh" {
  type              = "ingress"
  ip_protocol       = "tcp"
  nic_type          = "intranet"
  policy            = "accept"
  port_range        = "22/22"
  priority          = 1
  security_group_id = alicloud_security_group.my_sg.id
  cidr_ip           = "0.0.0.0/0"
}

# Buat Instance ECS.
resource "alicloud_instance" "my_instance" {
  instance_name              = "Ubuntu20-Instance"
  image_id                   = "ubuntu_20_04_x64_20G_alibase_20240508.vhd" # ID Citra Ubuntu 20.04.
  instance_type              = "ecs.c6.large"                              # 2 vCPU dan 4 GiB memori.
  security_groups            = [alicloud_security_group.my_sg.id]
  vswitch_id                 = alicloud_vswitch.my_vswitch.id
  internet_charge_type       = "PayByTraffic"
  instance_charge_type       = "PostPaid"
  system_disk_category       = "cloud_efficiency"
  password                   = "Abc@12345" # Tetapkan kata sandi logon.
  internet_max_bandwidth_out = 10          # Jika Anda menetapkan bandwidth ke nilai lebih besar dari 0, alamat IP Internet akan dialokasikan secara otomatis.

  tags = {
    Name = "ubuntu20"
  }
}

Pembuatan Instance ECS bergantung pada grup keamanan dan vSwitch. Ketergantungan ini dibentuk dengan menetapkan nilai pada properti security_groups dan vswitch_id. Saat Terraform dijalankan, ia menggunakan grafik ketergantungan ini untuk menentukan urutan operasi sumber daya yang benar. Dalam skenario kompleks dengan banyak sumber daya, Terraform menjalankan operasi secara paralel untuk sumber daya yang tidak memiliki ketergantungan.

Ketergantungan

Terraform mendukung dua jenis ketergantungan: implisit dan eksplisit. Terraform secara otomatis mendeteksi ketergantungan implisit, sedangkan ketergantungan eksplisit harus dideklarasikan secara manual.

Ketergantungan implisit

Ketika sebuah sumber daya bergantung pada atribut dari sumber daya lain, Terraform dapat menyimpulkan hubungan ini sebagai ketergantungan implisit.

Dalam contoh ini, vSwitch dan grup keamanan bergantung pada VPC. Instance ECS bergantung pada vSwitch dan grup keamanan. Aturan grup keamanan bergantung pada grup keamanan. Ini semua adalah ketergantungan implisit.

Terraform mendeteksi ketergantungan implisit melalui referensi dalam penugasan nilai properti.

Sebagai contoh, parameter vswitch_id untuk instance merujuk ke sumber daya my_vswitch. Ini membentuk ketergantungan implisit dari sumber daya instance ke sumber daya vSwitch.

Terraform menyimpulkan ketergantungan implisit untuk menentukan urutan pembuatan sumber daya. Proses ini memastikan bahwa semua sumber daya dalam file konfigurasi dibuat dalam urutan yang benar.

Dalam contoh ini, ketergantungan dan urutan pembuatan di antara sumber daya ditunjukkan dalam grafik berikut:

graph.svg

Saat Terraform membaca konfigurasi, ia membuat sumber daya dalam urutan yang benar. Pertama, VPC my_vpc dibuat, diikuti oleh vSwitch my_vswitch dan grup keamanan my_sg. Instance ECS my_instance dibuat terakhir. Setelah semua sumber daya dibuat, Terraform menyimpan propertinya ke file status. Ia menetapkan parameter vpc_id di my_vswitch dan my_sg ke ID my_vpc. Ia juga menetapkan parameter vswitch_id dan security_groups untuk my_instance menggunakan ID dari my_vswitch dan my_sg.

Ketergantungan eksplisit

Terkadang, ketergantungan antara dua sumber daya tidak terlihat oleh Terraform karena tidak melibatkan referensi langsung ke data. Dalam kasus seperti itu, Anda harus mendeklarasikan ketergantungan secara eksplisit menggunakan argumen depends_on dalam kode konfigurasi Anda.

Argumen depends_on memberi Anda lebih banyak kontrol atas urutan pemrosesan sumber daya oleh Terraform. Anda dapat menggunakan depends_on dengan sumber daya atau modul apa pun, dan nilainya harus berupa daftar referensi ke sumber daya lain dalam konfigurasi yang sama.

Sebagai contoh, berdasarkan konfigurasi sebelumnya, asumsikan Anda perlu menambahkan aturan akses untuk port 443 dan 8080. Anda juga ingin memastikan bahwa aturan untuk port 8080 dibuat hanya setelah aturan untuk port 443 dibuat. Karena ketergantungan ini tidak terlihat oleh Terraform, Anda harus mendeklarasikannya secara eksplisit. Anda dapat menggunakan depends_on untuk mendeklarasikan bahwa aturan untuk port 8080 bergantung pada aturan untuk port 443:

Karena argumen depends_on, Terraform memastikan bahwa aturan akses untuk port 443 dibuat sebelum aturan akses untuk port 8080. Saat Anda menjalankan terraform apply, aturan akses untuk port 8080 dibuat setelah aturan akses untuk port 443.

graph (1).svg

Akhirnya, perhatikan bahwa urutan Anda mendefinisikan sumber daya dalam file konfigurasi tidak memengaruhi urutan eksekusi. Oleh karena itu, Anda dapat mengatur file konfigurasi Anda dengan cara yang paling masuk akal bagi Anda dan tim Anda.