All Products
Search
Document Center

Terraform:Menggunakan Terraform di Windows

Last Updated:Jun 25, 2026

Topik ini menjelaskan cara menggunakan Terraform di Windows untuk membuat resource Alibaba Cloud.

Mengelola infrastruktur Anda sebagai kode (IaC) dengan Terraform melibatkan langkah-langkah utama berikut.

  1. Instal Terraform: Pastikan sistem Anda dapat mengenali dan menjalankan perintah Terraform.

  2. Buat file konfigurasi Terraform: File konfigurasi merupakan inti dari Terraform. File ini menjelaskan pembuatan, konfigurasi, dan dependensi resource, seperti VPC, Instance ECS, dan Bucket OSS.

  3. Inisialisasi dan buat resource: Langkah kritis ini mengubah desain infrastruktur Anda menjadi resource aktif.

  4. Lihat dan kelola resource: Setelah penerapan, Anda dapat melihat dan mengelola infrastruktur untuk memastikan sesuai dengan kebutuhan saat ini.

  5. Hapus resource: Saat tidak lagi diperlukan, Anda dapat menghapus resource tersebut.

1. Instal Terraform

  1. Buka situs web resmi Terraform, unduh biner Terraform untuk sistem operasi Windows Anda, lalu ekstrak.

    Laman unduhan menyediakan paket instalasi untuk arsitektur 386 dan AMD64. Pilih yang sesuai dengan sistem Anda dan klik Download.

  2. Tambahkan path instalasi Terraform ke variabel lingkungan Path.

    1. Di desktop, klik kanan This PC dan pilih Properties > Advanced system settings > Environment Variables.

    2. Di bawah System variables atau User variables, klik Path, lalu pilih Edit > New. Masukkan path ke direktori tempat Anda mengekstrak biner Terraform, lalu klik OK untuk menyimpan perubahan.

  3. Verifikasi instalasi. Tekan tombol Win+R, masukkan cmd, lalu klik OK untuk membuka Command Prompt. Jalankan perintah terraform --version. Jika Anda melihat output seperti berikut, instalasi berhasil.

    Terraform v1.9.3
    on windows_amd64
    

2. Buat file konfigurasi Terraform

File konfigurasi merupakan inti dari Terraform. File ini mendefinisikan resource infrastruktur yang akan diterapkan di cloud atau on-premises, seperti VPC, ECS, dan OSS.

  1. Buat folder baru, misalnya ecs, lalu buat file konfigurasi Terraform bernama main.tf di dalam folder tersebut.

    Membuat direktori kerja terpisah untuk setiap proyek Terraform merupakan praktik terbaik. Hal ini menjaga resource tetap terorganisir, mencegah konflik file state, dan menyederhanakan kontrol versi. Pemisahan ini juga membantu mengisolasi lingkungan dan mengelola modul, sehingga meningkatkan kemudahan pemeliharaan dan keamanan.

  2. Buat file konfigurasi Terraform. Instance ECS dan resource dependensinya, seperti VPC dan security group, didefinisikan sebagai kode dalam file konfigurasi. Anda dapat menyalin kode berikut ke dalam main.tf.

    Penting
    • Contoh ini membuat instance ECS dengan model pay-as-you-go, yang akan dikenai biaya segera setelah dibuat.

    • Contoh ini menggunakan variabel lingkungan untuk otentikasi Terraform. Untuk informasi lebih lanjut, lihat Terraform Authentication.

    Resource berikut diperlukan untuk membuat instance ECS:

    Resource

    Description

    alicloud_vpc

    Membuat instance VPC.

    alicloud_vswitch

    Membuat instance vSwitch.

    alicloud_security_group

    Membuat security group.

    alicloud_security_group_rule

    Membuat aturan inbound dan outbound untuk security group.

    alicloud_instance

    Membuat instance ECS.

    variable "name" {
      type    = string
      default = "tf-test"
    }
    # Tentukan wilayah.
    variable "region" {
      type    = string
      default = "cn-beijing"
    }
    # Bandwidth publik. Jika lebih besar dari 0, alamat IP publik akan ditetapkan ke instans.
    variable "internet_max_bandwidth_out" {
      type    = number
      default = 10
    }
    # Tentukan tipe instans ECS.
    variable "instance_type" {
      type    = string
      default = "ecs.e-c1m1.large"
    }
    # Tentukan ID image.
    variable "image_id" {
      default = "ubuntu_18_04_64_20G_alibase_20190624.vhd"
    }
    # Definisikan tag untuk resource.
    variable "tags" {
      type    = map(string)
      default = {
        From =  "Terraform"
        Usage =  "demo"
      }
    }
    provider "alicloud" {
      region = var.region
    }
    # Dapatkan zona yang tersedia untuk tipe instans yang ditentukan.
    data "alicloud_zones" "default" {
      available_instance_type = var.instance_type
      available_resource_creation = "VSwitch"
      available_disk_category = "cloud_ssd"
    }
    # Buat VPC.
    resource "alicloud_vpc" "vpc" {
      vpc_name   = var.name
      cidr_block = "172.16.0.0/12"
    }
    # Buat vSwitch.
    resource "alicloud_vswitch" "vsw" {
      vpc_id     = alicloud_vpc.vpc.id
      cidr_block = "172.16.0.0/21"
      zone_id    = data.alicloud_zones.default.zones[0].id
    }
    # Buat security group.
    resource "alicloud_security_group" "default" {
      name   = var.name
      vpc_id = alicloud_vpc.vpc.id
    }
    # Tambahkan aturan inbound untuk mengizinkan akses SSH.
    resource "alicloud_security_group_rule" "allow_tcp_22" {
      type              = "ingress"
      ip_protocol       = "tcp"
      nic_type          = "intranet"
      policy            = "accept"
      port_range        = "22/22"
      priority          = 1
      security_group_id = alicloud_security_group.default.id
      cidr_ip           = "0.0.0.0/0"
    }
    # Buat instance ECS.
    resource "alicloud_instance" "instance" {
      availability_zone          = data.alicloud_zones.default.zones.0.id
      security_groups            = alicloud_security_group.default.*.id
      instance_type              = var.instance_type
      system_disk_category       = "cloud_essd_entry"
      image_id                   = var.image_id
      instance_name              = var.name
      vswitch_id                 = alicloud_vswitch.vsw.id
      internet_max_bandwidth_out = var.internet_max_bandwidth_out
      tags                       = var.tags
    }
    output "ecs_id" {
      value = alicloud_instance.instance.id
    }
    output "ecs_ip" {
      value = alicloud_instance.instance.public_ip
    }

3. Inisialisasi dan buat resource

Setelah Anda membuat file konfigurasi Terraform, Anda harus menginisialisasi direktori kerja sebelum membuat resource.

3.1 Inisialisasi Terraform

Di Command Prompt, beralihlah ke folder yang Anda buat pada Langkah 2, lalu jalankan perintah terraform init. Untuk setiap konfigurasi Terraform baru, terraform init adalah perintah pertama yang harus dijalankan. Perintah ini menginisialisasi direktori kerja, mengunduh plugin provider Alibaba Cloud yang diperlukan, dan membuat file lain yang dibutuhkan.

# Beralih ke drive D:
d:
# Beralih ke path folder dari Langkah 2. Ganti tool/terraform/projects/ecs dengan path aktual Anda.
cd tool/terraform/projects/ecs
# Jalankan perintah inisialisasi.
terraform init

3.2 Buat resource

  1. Jalankan terraform plan untuk membuat rencana eksekusi. Rencana ini menampilkan informasi detail tentang semua resource yang akan dibuat, dimodifikasi, atau dihapus saat Anda menjalankan terraform apply.

    ...
          + router_table_id     = (known after apply)
          + secondary_cidr_blocks = (known after apply)
          + status              = (known after apply)
          + user_cidrs          = (known after apply)
          + vpc_name            = "tf_vpc_test"
        }
      # alicloud_vswitch.vsw akan dibuat
      + resource "alicloud_vswitch" "vsw" {
          + availability_zone    = (known after apply)
          + cidr_block           = "172.16.0.0/21"
          + create_time          = (known after apply)
          + id                   = (known after apply)
          + ipv6_cidr_block      = (known after apply)
          + ipv6_cidr_block_mask = (known after apply)
          + name                 = (known after apply)
          + status               = (known after apply)
          + vpc_id               = (known after apply)
          + vswitch_name         = (known after apply)
          + zone_id              = "cn-beijing-a"
        }
    Plan: 5 to add, 0 to change, 0 to destroy.
    Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if
    you run "terraform apply" now.
  2. Saat Anda menjalankan terraform apply, resource dibuat berdasarkan rencana eksekusi yang dihasilkan oleh terraform plan. Selama proses pembuatan, Anda harus memasukkan yes saat diminta untuk melanjutkan pembuatan resource. Untuk informasi lebih lanjut tentang cara memberikan nilai ke variabel, lihat Variable.

    Plan: 5 to add, 0 to change, 0 to destroy.
    Changes to Outputs:
      + ecs_id = (known after apply)
      + ecs_ip = (known after apply)
    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
    alicloud_vpc.vpc: Creating...
    alicloud_vpc.vpc: Creation complete after 7s [id=vpc-2zexxx5: xxxk5w]
    alicloud_security_group.default: Creating...
    alicloud_vswitch.vsw: Creating...
    alicloud_security_group.default: Creation complete after 2s [id=sg-2zexxx4xxx9pa]
    alicloud_security_group_rule.allow_tcp_22: Creating...
    alicloud_security_group_rule.allow_tcp_22: Creation complete after 0s [id=sg-2zexxx4xxx9pa:ingress:tcp:22/22:intranet:0.0.0.0/0:accept:1]
    alicloud_vswitch.vsw: Creation complete after 4s [id=vsw-2zexxxxxxxxxxxgwdf]
    alicloud_instance.instance: Creating...
    alicloud_instance.instance: Still creating... [10s elapsed]
    alicloud_instance.instance: Creation complete after 14s [id=i-2zexxxxxxxxxxxkmo]
    Apply complete! Resources: 5 added, 0 changed, 0 destroyed.
    Outputs:
    ecs_id = "i-2zexxxxxxxxxxxkmo"
    ecs_ip = "3x.1xx.1xx.x41"

4. Lihat dan kelola resource

Setelah penerapan, Anda dapat mengelola dan memelihara infrastruktur Anda.

4.1 Melihat sumber daya

  • Jalankan perintah terraform show untuk melihat informasi detail tentang resource.

    D:\tool\terraform\projects\ecs>terraform show
    # data.alicloud_zones.default:
    data "alicloud_zones" "default" {
        available_disk_category    = "cloud_ssd"
        available_instance_type    = "ecs.e-c1m1.large"
        available_resource_creation = "VSwitch"
        enable_details             = false
        id                         = "2398922967"
        ids                        = [
            "cn-beijing-a",
            "cn-beijing-c",
            "cn-beijing-e",
            "cn-beijing-f",
            "cn-beijing-g",
            "cn-beijing-h",
            "cn-beijing-i",
        ]
        instance_charge_type       = "PostPaid"
        multi                      = false
        spot_strategy              = "NoSpot"
        zones                      = [
            {
                available_disk_categories  = []
                available_instance_types   = []
                available_resource_creation = []
                id                         = "cn-beijing-a"
                local_name                 = null
                multi_zone_ids             = []
                slb_slave_zone_ids         = []
            }
        ]
    }
  • Jalankan perintah terraform state list untuk mencantumkan semua resource yang telah dibuat.

    D:\tool\terraform\projects\ecs>terraform state list
    data.alicloud_zones.default
    alicloud_instance.instance
    alicloud_security_group.default
    alicloud_security_group_rule.allow_tcp_22
    alicloud_vpc.vpc
    alicloud_vswitch.vsw
  • Jalankan perintah terraform state show <resource_type>.<resource_name> untuk melihat informasi detail tentang resource tertentu.

    D:\tool\terraform\projects\ecs>terraform state show alicloud_vpc.vpc
    # alicloud_vpc.vpc:
    resource "alicloud_vpc" "vpc" {
        cidr_block                 = "172.16.0.0/12"
        classic_link_enabled       = false
        create_time                = "2024-09-09T05:54:41Z"
        description                = null
        enable_ipv6                = false
        id                         = "vpc-2zexxx"
        ipv6_cidr_block            = null
        ipv6_cidr_blocks           = []
        name                       = "tf-test"
        resource_group_id          = "rg-acfxxx"
        route_table_id             = "vtb-2zexxx"
        router_id                  = "vrt-2zexxx"
        router_table_id            = "vtb-2zexxx"
        secondary_cidr_blocks      = []
        status                     = "Available"
        system_route_table_description = null
        system_route_table_name    = null
        user_cidrs                 = []
        vpc_name                   = "tf-test"
    }
  • Lihat informasi tentang resource yang telah dibuat di Alibaba Cloud Management Console.

4.2 Kelola resource

Setelah Terraform membuat atau memodifikasi resource, Terraform menyimpan state dan atributnya ke file terraform.tfstate. Anda dapat menggunakan perintah terraform state untuk mengelola state tersebut. Untuk informasi lebih lanjut, lihat Introduction to State.

4.3 Modifikasi resource

  1. Modifikasi definisi resource dalam file konfigurasi Anda (seperti main.tf atau file .tf lainnya). Misalnya, Anda dapat menambahkan aturan inbound baru ke security group.

    resource "alicloud_security_group_rule" "allow_tcp_443" {
      type              = "ingress"
      ip_protocol       = "tcp"
      nic_type          = "intranet"
      policy            = "accept"
      port_range        = "443/443"
      priority          = 1
      security_group_id = alicloud_security_group.default.id
      cidr_ip           = "0.0.0.0/0"
    }
  2. Jalankan perintah terraform plan untuk melihat pratinjau perubahan Anda.

    Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
      + create
    Terraform will perform the following actions:
      # alicloud_security_group_rule.allow_tcp_443 akan dibuat
      + resource "alicloud_security_group_rule" "allow_tcp_443" {
          + cidr_ip            = "0.0.0.0/0"
          + id                 = (known after apply)
          + ip_protocol        = "tcp"
          + nic_type           = "intranet"
          + policy             = "accept"
          + port_range         = "443/443"
          + prefix_list_id     = (known after apply)
          + priority           = 1
          + security_group_id  = "sg-2zexxx9pa"
          + type               = "ingress"
        }
    Plan: 1 to add, 0 to change, 0 to destroy.
  3. Jika rencana sudah benar, jalankan perintah terraform apply. Masukkan yes saat diminta untuk menerapkan perubahan.

    Plan: 1 to add, 0 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
    alicloud_security_group_rule.allow_tcp_22: Creating...
    alicloud_security_group_rule.allow_tcp_443: Creating...
    alicloud_security_group_rule.allow_tcp_22: Creation complete after 1s [id=sg-2zexxx:xxx:ingress:tcp:22/22:intranet:0.0.0.0/0:accept:1]
    alicloud_security_group_rule.allow_tcp_443: Creation complete after 1s [id=sg-2zexxx:xxx:ingress:tcp:443/443:intranet:0.0.0.0/0:accept:1]
    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
    Outputs:
    ecs_id = "i-2zexxx"
    ecs_ip = "3x.xxx.xxx.x41"

5. Hapus resource

Saat Anda tidak lagi memerlukan resource tersebut, jalankan perintah terraform destroy untuk menghapus infrastruktur.

Plan: 0 to add, 0 to change, 6 to destroy.
Changes to Outputs:
  - ecs_id = "i-2zxxx" -> null
  - ecs_ip = "3xxx" -> null
Do you really want to destroy all resources?
  Terraform will destroy all your managed infrastructure, as shown above.
  There is no undo. Only 'yes' will be accepted to confirm.
  Enter a value: yes
alicloud_security_group_rule.allow_tcp_443: Destroying...  [id=sg-2zexxx:ingress:tcp:443/443:intranet:0.0.0.0/0:accept:1]
alicloud_security_group_rule.allow_tcp_22: Destroying...  [id=sg-2zexxx:ingress:tcp:22/22:intranet:0.0.0.0/0:accept:1]
alicloud_instance.instance: Destroying...  [id=i-2zexxxkmo]
alicloud_security_group_rule.allow_tcp_443: Destruction complete after 1s
alicloud_security_group_rule.allow_tcp_22: Destruction complete after 1s
alicloud_instance.instance: Still destroying...  [id=i-2zexxxkmo, 10s elapsed]
alicloud_instance.instance: Destruction complete after 12s
alicloud_security_group.default: Destroying...  [id=sg-2zexxxpa]
alicloud_vswitch.vsw: Destroying...  [id=vsw-2zexxxvdf]
alicloud_security_group.default: Destruction complete after 2s
alicloud_vswitch.vsw: Destruction complete after 8s
alicloud_vpc.vpc: Destroying...  [id=vpc-2zexxxk5w]
alicloud_vpc.vpc: Destruction complete after 6s
Destroy complete! Resources: 6 destroyed.

Referensi