Apply #
terraform apply adalah perintah yang benar-benar mengubah infrastrukturmu. Semua yang sudah kamu rencanakan di plan dieksekusi di sini. Karena dampaknya nyata dan langsung, memahami cara apply bekerja — termasuk apa yang terjadi saat ada yang salah di tengah jalan — adalah perbedaan antara deployment yang terkontrol dan insiden yang tidak perlu.
Cara Apply Bekerja #
terraform apply — Urutan Eksekusi:
1. Generate execution plan (jika tidak ada saved plan)
│
▼
2. Tampilkan plan dan minta konfirmasi
(ketik "yes" untuk melanjutkan)
│
▼
3. Eksekusi operasi sesuai dependency graph
(resource independen dieksekusi paralel)
│
├── Create: aws_vpc.main
├── (setelah VPC selesai) Create: aws_subnet.public
├── (setelah subnet selesai) Create: aws_instance.web
│
▼
4. Update state setelah setiap resource selesai
(state diupdate secara incremental, bukan di akhir)
│
▼
5. Tampilkan ringkasan: "Apply complete! Resources: X added, Y changed, Z destroyed."
Poin penting di nomor 4: state diupdate setelah setiap resource, bukan di akhir setelah semua selesai. Ini penting untuk memahami apa yang terjadi saat apply gagal di tengah jalan.
Apply Interaktif vs Otomatis #
# Apply interaktif (default) — minta konfirmasi sebelum eksekusi
terraform apply
# Output:
# Plan: 3 to add, 1 to change, 0 to destroy.
#
# Do you want to perform these actions?
# Terraform will perform the actions described above.
# Only 'yes' will be accepted to approve.
#
# Enter a value: yes ← ketik ini
# Apply otomatis — tanpa konfirmasi (untuk CI/CD)
terraform apply -auto-approve
# Apply dari saved plan — paling aman untuk production
terraform plan -out=tfplan
terraform apply tfplan
# Tidak ada konfirmasi, tidak ada plan baru — langsung eksekusi saved plan
Apa yang Terjadi Saat Apply Gagal di Tengah Jalan #
Ini adalah skenario yang paling sering menimbulkan kebingungan. Karena state diupdate secara incremental, kegagalan di tengah apply menghasilkan partial state.
SKENARIO: Apply gagal setelah membuat 2 dari 5 resource
Before apply:
State: kosong
Apply dimulai:
✓ aws_vpc.main → dibuat, state diupdate
✓ aws_subnet.public → dibuat, state diupdate
✗ aws_instance.web → GAGAL (misal: AMI tidak ditemukan)
- aws_security_group → tidak sempat dieksekusi
- aws_rds.database → tidak sempat dieksekusi
After failed apply:
State: berisi aws_vpc.main dan aws_subnet.public
(resource yang sudah berhasil dibuat)
Apa yang harus dilakukan:
1. Perbaiki penyebab kegagalan (misal: ganti AMI ke yang valid)
2. Jalankan terraform plan untuk melihat kondisi saat ini
3. Jalankan terraform apply lagi
→ Terraform akan melanjutkan dari resource yang belum dibuat
→ VPC dan subnet tidak akan dibuat ulang (sudah ada di state)
Terraform tidak melakukan rollback otomatis. Ini disengaja — rollback otomatis bisa berbahaya jika resource yang sudah dibuat memiliki data di dalamnya.
Apply dengan Target #
-target memungkinkan apply hanya pada resource tertentu, mengabaikan resource lain.
# Apply hanya satu resource spesifik
terraform apply -target=aws_instance.web
# Apply seluruh module
terraform apply -target=module.vpc
# Apply beberapa resource sekaligus
terraform apply -target=aws_instance.web -target=aws_security_group.web
-targetberguna untuk keadaan darurat atau debugging, tapi hindari penggunaan rutin. Ia bisa membuat state tidak konsisten dengan konfigurasi karena dependency antar resource tidak sepenuhnya dievaluasi. Jika kamu sering butuh-target, itu tanda bahwa konfigurasimu mungkin perlu di-refactor.
Paralelisme Apply #
Secara default, Terraform menjalankan hingga 10 operasi secara paralel. Ini bisa disesuaikan.
# Kurangi paralelisme (berguna jika provider punya rate limit)
terraform apply -parallelism=5
# Tingkatkan paralelisme (hati-hati dengan rate limit provider)
terraform apply -parallelism=20
# Untuk infrastruktur besar dengan banyak resource,
# rate limit provider AWS/GCP bisa menjadi bottleneck.
# Mengurangi -parallelism bisa membantu menghindari throttling.
Strategi Apply yang Aman untuk Production #
# WORKFLOW YANG DIREKOMENDASIKAN UNTUK PRODUCTION:
# 1. Generate dan simpan plan
terraform plan -out=tfplan
# 2. Review plan (bisa dibaca manusia)
terraform show tfplan
# 3. Jika ada CI/CD — submit untuk approval
# (PR review, Slack notification, dll.)
# 4. Setelah disetujui, apply dari saved plan
terraform apply tfplan
# 5. Hapus saved plan setelah selesai
rm tfplan
# Kenapa pakai saved plan?
# - Tidak ada plan ulang saat apply — apa yang di-review persis yang dieksekusi
# - Tidak ada kejutan dari perubahan kondisi antara review dan apply
# - Audit trail yang jelas: plan file bisa disimpan sebagai bukti
Membaca Output Apply #
$ terraform apply tfplan
aws_vpc.main: Creating...
aws_vpc.main: Creation complete after 2s [id=vpc-0abcdef1234567890]
aws_subnet.public: Creating...
aws_subnet.public: Creation complete after 1s [id=subnet-0abcdef1234567890]
aws_instance.web: Creating...
aws_instance.web: Still creating... [10s elapsed]
aws_instance.web: Still creating... [20s elapsed]
aws_instance.web: Creation complete after 23s [id=i-0abcdef1234567890]
Apply complete! Resources: 3 added, 0 changed, 0 destroyed.
Outputs:
instance_public_ip = "54.123.45.67"
Terraform menampilkan progress secara real-time. Resource yang butuh waktu lama (seperti EC2 instance atau RDS) akan menampilkan “Still creating…” setiap 10 detik.
Ringkasan #
- State diupdate incremental setiap resource selesai — bukan di akhir. Kegagalan di tengah apply menghasilkan partial state yang valid.
- Tidak ada rollback otomatis — setelah resource dibuat, Terraform tidak menghapusnya jika resource berikutnya gagal.
- Gunakan saved plan untuk production — pastikan yang di-apply adalah persis yang sudah di-review.
-auto-approvehanya untuk CI/CD yang sudah ada review process — jangan digunakan langsung di terminal production.-targetadalah alat darurat, bukan workflow rutin — penggunaan berlebihan bisa menyebabkan state yang tidak konsisten.- Jika apply gagal di tengah jalan, perbaiki penyebabnya lalu apply ulang — Terraform akan melanjutkan dari resource yang belum selesai.