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.
-
Instal Terraform: Pastikan sistem Anda dapat mengenali dan menjalankan perintah Terraform.
-
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.
-
Inisialisasi dan buat resource: Langkah kritis ini mengubah desain infrastruktur Anda menjadi resource aktif.
-
Lihat dan kelola resource: Setelah penerapan, Anda dapat melihat dan mengelola infrastruktur untuk memastikan sesuai dengan kebutuhan saat ini.
-
Hapus resource: Saat tidak lagi diperlukan, Anda dapat menghapus resource tersebut.
1. Instal Terraform
-
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.
-
Tambahkan path instalasi Terraform ke variabel lingkungan Path.
-
Di desktop, klik kanan This PC dan pilih Properties > Advanced system settings > Environment Variables.
-
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.
-
-
Verifikasi instalasi. Tekan tombol Win+R, masukkan
cmd, lalu klik OK untuk membuka Command Prompt. Jalankan perintahterraform --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.
-
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.
-
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
Membuat instance VPC.
Membuat instance vSwitch.
Membuat security group.
Membuat aturan inbound dan outbound untuk security group.
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
-
Jalankan
terraform planuntuk membuat rencana eksekusi. Rencana ini menampilkan informasi detail tentang semua resource yang akan dibuat, dimodifikasi, atau dihapus saat Anda menjalankanterraform 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. -
Saat Anda menjalankan
terraform apply, resource dibuat berdasarkan rencana eksekusi yang dihasilkan olehterraform 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 showuntuk 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 listuntuk 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
-
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" } -
Jalankan perintah
terraform planuntuk 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. -
Jika rencana sudah benar, jalankan perintah
terraform apply. Masukkanyessaat 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.