All Products
Search
Document Center

Elastic Compute Service:Buat dan gunakan instans ECS dengan Terraform

Last Updated:Jun 22, 2026

Terraform adalah alat Infrastructure as Code (IaC) untuk mengotomatiskan manajemen infrastruktur. Alat ini memungkinkan Anda mendefinisikan dan menyediakan infrastruktur cloud menggunakan kode yang sederhana. Topik ini menjelaskan cara menggunakan Terraform untuk membuat instans ECS.

Catatan

Untuk informasi selengkapnya tentang Terraform, lihat Apa itu Alibaba Cloud Terraform?.

Prasyarat

1. Instal Terraform

Topik ini menjelaskan cara menginstal Terraform dari paket pada sistem operasi Linux atau Windows.

Catatan

Alibaba Cloud menyediakan dua lingkungan online tempat Anda dapat menjalankan perintah Terraform tanpa instalasi lokal:

  1. Terraform Explorer: Klik Initiate Debugging untuk menjalankan kode contoh dalam topik ini.

  2. Cloud Shell: Salin kode yang disediakan dalam topik ini dan jalankan perintah Terraform langsung di Create resources with Terraform.

  1. Buka situs web resmi Terraform untuk mengunduh paket sesuai sistem operasi Anda.

  2. Konfigurasikan lingkungan runtime Terraform.

    Linux

    Jalankan perintah berikut untuk mengekstrak paket ke /usr/local/bin.

    # Ganti {your_zip_path} dengan path ke paket Anda. Jika sistem Anda tidak mendukung perintah unzip, instal terlebih dahulu.
    sudo unzip {your_zip_path} -d /usr/local/bin

    Windows

    1. Ekstrak paket tersebut. Misalnya, direktori tujuan adalah D:\tool\terraform.

    2. Di desktop, klik kanan This PC dan pilih Type > Advanced system settings > Environment Variable > System variables/User variables.

    3. Klik Path di System variables atau User variables, pilih Edit > New, masukkan direktori tempat Anda mengekstrak Terraform (misalnya D:\tool\terraform), lalu klik OK untuk menyelesaikan konfigurasi.

  3. Jalankan perintah terraform untuk memverifikasi konfigurasi path.

    terraform

    Jika perintah tersebut menampilkan daftar opsi Terraform, instalasi berhasil.

    ➜  ~ terraform
    Usage: terraform [global options] <subcommand> [args]
    The available commands for execution are listed below.
    The primary workflow commands are given first, followed by
    less common or more advanced commands.
    Main commands:
      init          Prepare your working directory for other commands
      validate      Check whether the configuration is valid
      plan          Show changes required by the current configuration
      apply         Create or update infrastructure
      destroy       Destroy previously-created infrastructure
    All other commands:
      console       Try Terraform expressions at an interactive command prompt
      fmt           Reformat your configuration in the standard style
      force-unlock  Release a stuck lock on the current workspace
      get           Install or upgrade remote Terraform modules
      graph         Generate a Graphviz graph of the steps in an operation
      import        Associate existing infrastructure with a Terraform resource
      login         Obtain and save credentials for a remote host
      logout        Remove locally-stored credentials for a remote host
      metadata      Metadata related commands
      output        Show output values from your root module
      providers     Show the providers required for this configuration
      refresh       Update the state to match remote systems
      show          Inspect Terraform state or plan
      state         Advanced state management
      taint         Mark a resource instance as not fully functional
      test          Execute integration tests for Terraform modules
      untaint       Remove the 'tainted' state from a resource instance
      version       Show the current Terraform version
      workspace     Workspace management
    
    Global options (use these before the subcommand, if any):
      -chdir=DIR    Switch to a different working directory before executing the
                    given subcommand.
      -help         Show this message, or the help for a given subcommand.
      -version      An alias for the "version" subcommand.
      show          Show the current state or a saved plan
      state         Advanced state management
      taint         Mark a resource instance as not fully functional
      test          Experimental support for module integration testing
      untaint       Remove the 'tainted' state from a resource instance
      version       Show the current Terraform version
      workspace     Workspace management
    Global options (use these before the subcommand, if any):
      -chdir=DIR    Switch to a different working directory before executing the
                    given subcommand.
      -help         Show this help output, or the help for a specified subcommand.
      -version      An alias for the "version" subcommand.

2. Konfigurasikan autentikasi Terraform

Sebelum menggunakan Terraform untuk mengelola resource Alibaba Cloud, Anda harus mengonfigurasi autentikasi untuk provider Alibaba Cloud. Hal ini memungkinkan Terraform memanggil API yang diperlukan untuk membuat dan mengelola infrastruktur Anda.

Catatan

Jika Anda menggunakan Terraform Explorer atau Cloud Shell, Anda tidak perlu mengonfigurasi autentikasi secara manual. Pastikan saja akun yang Anda gunakan memiliki izin untuk mengelola resource VPC dan ECS.

Topik ini menggunakan AccessKey Pengguna RAM yang disimpan sebagai variabel lingkungan untuk autentikasi:

  1. Karena Akun Alibaba Cloud memiliki izin penuh atas resource-nya, kebocoran AccessKey menimbulkan risiko keamanan tinggi. Kami menyarankan menggunakan AccessKey Pengguna RAM sebagai gantinya. Untuk informasi selengkapnya tentang cara membuat AccessKey Pengguna RAM, lihat Create an AccessKey pair.

  2. Saat memberikan izin kepada Pengguna RAM untuk mengelola resource ECS dan VPC, kami menyarankan agar Anda mengikuti prinsip hak istimewa minimal. Untuk informasi selengkapnya tentang cara memberikan izin kepada Pengguna RAM, lihat Manage RAM user permissions. Kode contoh dalam topik ini memerlukan pembuatan resource seperti ECS, VPC, dan vSwitch. Untuk menjalankan contoh tersebut, Anda dapat memberikan izin berikut kepada Pengguna RAM:

    Service

    Policy

    VPC

    Dalam contoh ini, pilih kebijakan sistem AliyunVPCFullAccess.

    ECS

    Dalam contoh ini, pilih kebijakan sistem AliyunECSFullAccess.

  3. Buat variabel lingkungan untuk menyimpan kredensial autentikasi Anda.

    Linux

    Penting

    Variabel lingkungan yang diatur dengan perintah export bersifat sementara dan hanya berlaku untuk sesi saat ini. Untuk menjadikannya permanen, tambahkan perintah tersebut ke file startup shell Anda.

    # ID AccessKey Anda.
    export ALICLOUD_ACCESS_KEY="yourAccessKeyID"
    # Rahasia AccessKey Anda.
    export ALICLOUD_SECRET_KEY="yourAccessKeySecret"
    # Wilayah tempat resource akan diterapkan.
    export ALICLOUD_REGION="cn-chengdu"

    Windows

    1. Di desktop, klik kanan This PC dan pilih Type > Advanced system settings > Environment Variable > System variables/User variables.

    2. Di bagian System variables atau User variables, klik New untuk membuat variabel lingkungan berikut.

      Variable

      Description

      Value

      ALICLOUD_ACCESS_KEY

      ID AccessKey Anda.

      yourAccessKeyID

      ALICLOUD_SECRET_KEY

      Rahasia AccessKey Anda.

      yourAccessKeySecret

      ALICLOUD_REGION

      Wilayah tempat resource akan diterapkan.

      Contoh: cn-chengdu

Resource Terraform terkait

Kode contoh dalam topik ini menggunakan resource Terraform berikut.

Catatan

Beberapa resource yang digunakan dalam tutorial ini dikenai biaya. Untuk menghindari tagihan tak terduga, bersihkan resource tersebut jika sudah tidak diperlukan.

Resource

Data source

alicloud_zones: Menemukan zona yang tersedia untuk tipe instans tertentu.

Buat file konfigurasi Terraform

Definisikan resource infrastruktur yang diperlukan untuk membuat instans ECS, seperti instans ECS dan VPC, dalam file main.tf. Anda dapat menyalin kode dari bagian Complete sample code ke file konfigurasi Anda.

  1. Buat file konfigurasi.

    File ini, yang harus diakhiri dengan ekstensi .tf, berisi semua definisi resource Anda.

    Linux

    # Buat direktori kerja.
    mkdir terraform-projects && cd terraform-projects
    mkdir ecs-quickstart && cd ecs-quickstart
    # Buat dan edit file konfigurasi.
    touch main.tf && vim main.tf

    Windows

    Buat folder baru bernama ecs-quickstart. Di dalam folder tersebut, buat file konfigurasi Terraform bernama main.tf.

  2. Definisikan konfigurasi provider.

    Konfigurasikan wilayah untuk penerapan resource Alibaba Cloud Anda.

    # Wilayah tempat resource berada.
    variable "region" {
      default = "cn-chengdu"
    }
    provider "alicloud" {
      region = var.region
    }
  3. Definisikan VPC dan vSwitch-nya.

    VPC adalah jaringan pribadi yang terisolasi secara logis di cloud yang dapat Anda konfigurasi dan kelola.

    variable "instance_name" {
      default = "tf-sample"
    }
    # Tipe instans dari instans ECS.
    variable "instance_type" {
      default = "ecs.e-c1m2.large"
    }
    # Kueri zona ketersediaan yang memenuhi kondisi tertentu.
    data "alicloud_zones" "default" {
      available_disk_category     = "cloud_essd"
      available_resource_creation = "VSwitch"
      available_instance_type     = var.instance_type
    }
    # Buat VPC.
    resource "alicloud_vpc" "vpc" {
      vpc_name   = var.instance_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
    }
  4. Definisikan security group.

    Security group berfungsi sebagai firewall virtual yang mengontrol lalu lintas inbound dan outbound untuk instans ECS Anda.

    # Buat security group.
    resource "alicloud_security_group" "default" {
      name   = var.instance_name
      vpc_id = alicloud_vpc.vpc.id
    }
    # Tambahkan aturan inbound ke security group.
    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"
    }
  5. Definisikan instans ECS.

    ECS menyediakan kapasitas komputasi yang aman, dapat diskalakan, dan berkinerja tinggi untuk berbagai skenario, termasuk penerapan aplikasi, hosting website, dan pemrosesan data.

    # ID image dari instans ECS.
    variable "image_id" {
      default = "ubuntu_18_04_64_20G_alibase_20190624.vhd"
    }
    # Bandwidth publik untuk instans ECS.
    variable "internet_bandwidth" {
      default = "10"
    }
    # Kata sandi logon untuk instans ECS.
    variable "password" {
      default = "Test@12345"
    }
    # Jumlah instans ECS yang akan dibuat. Nilai default adalah 1.
    variable "ecs_count" {
      default = 1
    }
    # Buat instans ECS.
    resource "alicloud_instance" "instance" {
      count                      = var.ecs_count
      availability_zone          = data.alicloud_zones.default.zones.0.id
      security_groups            = alicloud_security_group.default.*.id
      password                   = var.password
      instance_type              = var.instance_type
      system_disk_category       = "cloud_essd"
      image_id                   = var.image_id
      instance_name              = var.instance_name
      vswitch_id                 = alicloud_vswitch.vsw.id
      internet_max_bandwidth_out = var.internet_bandwidth
    }
    output "public_ip" {
      value = [for i in range(var.ecs_count) : alicloud_instance.instance[i].public_ip]
    }
                  

Complete sample code

Catatan

Anda dapat menjalankan kode contoh ini dengan satu klik. Initiate Debugging

variable "region" {
  default = "cn-chengdu"
}
provider "alicloud" {
  region = var.region
}
variable "instance_name" {
  default = "tf-sample"
}
variable "instance_type" {
  default = "ecs.e-c1m2.large"
}
data "alicloud_zones" "default" {
  available_disk_category     = "cloud_essd"
  available_resource_creation = "VSwitch"
  available_instance_type     = var.instance_type
}
resource "alicloud_vpc" "vpc" {
  vpc_name   = var.instance_name
  cidr_block = "172.16.0.0/12"
}
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
}
resource "alicloud_security_group" "default" {
  name   = var.instance_name
  vpc_id = alicloud_vpc.vpc.id
}
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"
}
variable "image_id" {
  default = "ubuntu_18_04_64_20G_alibase_20190624.vhd"
}
variable "internet_bandwidth" {
  default = "10"
}
variable "password" {
  default = "Test@12345"
}
variable "ecs_count" {
  default = 1
}
resource "alicloud_instance" "instance" {
  count                      = var.ecs_count
  availability_zone          = data.alicloud_zones.default.zones.0.id
  security_groups            = alicloud_security_group.default.*.id
  password                   = var.password
  instance_type              = var.instance_type
  system_disk_category       = "cloud_essd"
  image_id                   = var.image_id
  instance_name              = var.instance_name
  vswitch_id                 = alicloud_vswitch.vsw.id
  internet_max_bandwidth_out = var.internet_bandwidth
}
output "public_ip" {
  value = [for i in range(var.ecs_count) : alicloud_instance.instance[i].public_ip]
}

Jalankan perintah Terraform

Setelah membuat file konfigurasi, jalankan perintah Terraform untuk membuat instans ECS.

1. Inisialisasi Terraform

Perintah terraform init mengunduh dan menginstal plugin provider Alibaba Cloud ke folder saat ini serta menghasilkan berbagai file catatan.

Linux

terraform init

Windows

Buka Command Prompt (cmd), navigasi ke direktori yang berisi file konfigurasi Terraform Anda, lalu jalankan perintah terraform init untuk inisialisasi.

# File konfigurasi berada di direktori D:/ecs-quickstart.
# Beralih ke drive D.
d:
# Beralih ke direktori tempat file konfigurasi berada. Ganti ecs-quickstart dengan path direktori aktual Anda.
cd ecs-quickstart
# Jalankan perintah inisialisasi.
terraform init

Output berikut menunjukkan bahwa inisialisasi berhasil.

Terraform has been successfully initialized!
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

2. Pratinjau rencana eksekusi

Jalankan terraform plan untuk melakukan fungsi berikut:

  • Memverifikasi sintaksis kode Terraform di main.tf.

  • Menampilkan pratinjau resource yang akan dibuat berdasarkan kode Terraform saat ini.

terraform plan

Jika output menunjukkan bahwa file konfigurasi Terraform tidak memiliki kesalahan sintaksis, Anda dapat menjalankan perintah terraform apply untuk membuat resource. Jika muncul pesan kesalahan lain, modifikasi file konfigurasi Terraform sesuai pesan tersebut.

...
Plan: 5 to add, 0 to change, 0 to destroy.

3. Terapkan konfigurasi

Jalankan terraform apply untuk secara otomatis membuat instans ECS beserta resource dependensinya, dan menginstal Python. Saat diminta selama proses pembuatan, masukkan yes untuk mengizinkan Terraform membuat semua resource yang telah didefinisikan.

terraform apply

Output berikut menunjukkan bahwa Terraform telah membuat resource tersebut.

...
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 6s [id=vpc-2vcsghlpznz74XXXXXXXX]
alicloud_security_group.default: Creating...
alicloud_vswitch.vsw: Creating...
alicloud_security_group.default: Creation complete after 1s [id=sg-2vcdz6b8h9c3XXXXXXXX]
alicloud_security_group_rule.allow_tcp_22: Creating...
alicloud_security_group_rule.allow_tcp_22: Creation complete after 0s [id=sg-2vcdz6b8h9c3XXXXXXXX:ingress:tcp:22/22:intranet:0.0.0.0/0:accept:1]
alicloud_vswitch.vsw: Creation complete after 4s [id=vsw-2vc50dknug30bXXXXXXXX]
alicloud_instance.instance: Creating...
alicloud_instance.instance: Still creating... [10s elapsed]
alicloud_instance.instance: Creation complete after 15s [id=i-2vc3rf151bwcXXXXXXXX]
Apply complete! Resources: 5 added, 0 changed, 0 destroyed.
Outputs:
public_ip = [
  "4XX.XXX.XXX.XX7",
]

Hubungkan ke instans ECS

Setelah instans dibuat, Anda dapat menghubungkannya secara remote melalui SSH menggunakan Alamat IP publiknya. Untuk informasi selengkapnya tentang metode koneksi, lihat Connection methods overview.

ssh <username>@<public_ip_address>

Verifikasi hasil

Jalankan perintah Terraform

Anda dapat menjalankan perintah berikut untuk melihat informasi tentang instans ECS yang telah dibuat.

# Format: terraform state show <resource_type>.<resource_name>[index]
terraform state show alicloud_instance.instance[0]

Lihat di konsol

Anda dapat login ke ECS console untuk melihat instans ECS yang telah dibuat. Setelah menjalankan kode Terraform, sebuah instans bernama tf-sample dibuat dan berada dalam status Running di halaman Instances. Instans tersebut diterapkan di Availability Zone A wilayah China (Chengdu). Tipe instansnya adalah ecs.e-c1m2.large (2 vCPU dan 4 GiB memori), Alamat IP pribadinya adalah 172.16.0.100, metode penagihannya adalah bayar sesuai penggunaan, dan jenis jaringannya adalah VPC.

Ubah Sumber Daya

Jika Anda perlu menyesuaikan konfigurasi, Anda dapat memodifikasi definisi resource dalam file konfigurasi. Misalnya, Anda dapat menambahkan aturan inbound baru ke security group.

  1. Untuk menambahkan aturan ke security group yang mengizinkan lalu lintas inbound pada port 443, tambahkan kode berikut ke file konfigurasi Anda.

    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. Output berikut menunjukkan bahwa aturan security group akan ditambahkan ke security group dengan ID sg-2vcdz6b8h9c3XXXXXXXX.

    ...
    Terraform will perform the following actions:
      # alicloud_security_group_rule.allow_tcp_443 will be created
      + 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-2vcdz6b8h9c3XXXXXXXX"
          + type              = "ingress"
        }
    Plan: 1 to add, 0 to change, 0 to destroy.
  3. Jika perubahan sesuai harapan, jalankan perintah terraform apply untuk menerapkan perubahan ke infrastruktur Anda. Saat Terraform meminta konfirmasi, ketik yes lalu tekan Enter. Pesan berikut menunjukkan bahwa aturan baru berhasil ditambahkan ke security group dengan ID sg-2vcdz6b8h9c3XXXXXXXX.

    ...
    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_443: Creating...
    alicloud_security_group_rule.allow_tcp_443: Creation complete after 0s [id=sg-2vcdz6b8h9c3XXXXXXXX:ingress:tcp:443/443:intranet:0.0.0.0/0:accept:1]
    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Membersihkan sumber daya

Saat Anda tidak lagi memerlukan resource tersebut, jalankan perintah berikut untuk menghapusnya.

terraform destroy

Output berikut menunjukkan bahwa resource telah dihapus.

...
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-2vcdz6b8h9c3XXXXXXXX:ingress:tcp:443/443:intranet:0.0.0.0/0:accept:1]
alicloud_security_group_rule.allow_tcp_22: Destroying... [id=sg-2vcdz6b8h9c3XXXXXXXX:ingress:tcp:22/22:intranet:0.0.0.0/0:accept:1]
alicloud_instance.instance: Destroying... [id=i-2vc3rf151bwcXXXXXXXX]
alicloud_security_group_rule.allow_tcp_22: Destruction complete after 0s
alicloud_security_group_rule.allow_tcp_443: Destruction complete after 0s
alicloud_instance.instance: Still destroying... [id=i-2vc3rf151bwcXXXXXXXX, 10s elapsed]
alicloud_instance.instance: Destruction complete after 10s
alicloud_security_group.default: Destroying... [id=sg-2vcdz6b8h9c3XXXXXXXX]
alicloud_vswitch.vsw: Destroying... [id=vsw-2vc50dknug30bXXXXXXXX]
alicloud_security_group.default: Destruction complete after 1s
alicloud_vswitch.vsw: Destruction complete after 8s
alicloud_vpc.vpc: Destroying... [id=vpc-2vcsghlpznz74XXXXXXXX]
alicloud_vpc.vpc: Destruction complete after 6s
Destroy complete! Resources: 6 destroyed.

Referensi

  • Untuk tipe Resource dan Data Source yang didukung oleh ECS, lihat List of supported resources.

  • Anda dapat menggunakan Terraform di Terraform Explorer untuk men-debug kode Terraform tanpa menginstal atau mengonfigurasi Terraform.

  • Anda dapat menggunakan Terraform di Create resources with Terraform untuk menjalankan perintah Terraform secara manual tanpa menginstal atau mengonfigurasi Terraform.