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.
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.
Alibaba Cloud menyediakan dua lingkungan online tempat Anda dapat menjalankan perintah Terraform tanpa instalasi lokal:
Terraform Explorer: Klik Initiate Debugging untuk menjalankan kode contoh dalam topik ini.
Cloud Shell: Salin kode yang disediakan dalam topik ini dan jalankan perintah Terraform langsung di Create resources with Terraform.
Buka situs web resmi Terraform untuk mengunduh paket sesuai sistem operasi Anda.
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/binWindows
Ekstrak paket tersebut. Misalnya, direktori tujuan adalah D:\tool\terraform.
Di desktop, klik kanan This PC dan pilih .
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.
-
Jalankan perintah
terraformuntuk memverifikasi konfigurasi path.terraformJika 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.
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:
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.
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.
Buat variabel lingkungan untuk menyimpan kredensial autentikasi Anda.
Linux
PentingVariabel lingkungan yang diatur dengan perintah
exportbersifat 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
Di desktop, klik kanan This PC dan pilih .
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.
Beberapa resource yang digunakan dalam tutorial ini dikenai biaya. Untuk menghindari tagihan tak terduga, bersihkan resource tersebut jika sudah tidak diperlukan.
Resource
alicloud_vpc: membuat VPC.
alicloud_vswitch: membuat vSwitch.
alicloud_security_group: membuat security group.
alicloud_security_group_rule: membuat aturan security group.
alicloud_instance: membuat instans ECS.
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.
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.tfWindows
Buat folder baru bernama
ecs-quickstart. Di dalam folder tersebut, buat file konfigurasi Terraform bernama main.tf.-
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 } -
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 } -
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" } -
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
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 initWindows
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 initOutput 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.
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" }-
Jalankan perintah
terraform planuntuk melihat pratinjau perubahan. Output berikut menunjukkan bahwa aturan security group akan ditambahkan ke security group dengan IDsg-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. -
Jika perubahan sesuai harapan, jalankan perintah
terraform applyuntuk menerapkan perubahan ke infrastruktur Anda. Saat Terraform meminta konfirmasi, ketikyeslalu tekan Enter. Pesan berikut menunjukkan bahwa aturan baru berhasil ditambahkan ke security group dengan IDsg-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
ResourcedanData Sourceyang 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.