Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: ✔️ mesin virtual Linux
Artikel diuji dengan versi Terraform dan penyedia Terraform berikut:
Artikel ini menunjukkan kepada Anda cara membuat lingkungan Linux lengkap dan mendukung sumber daya dengan Terraform. Sumber daya tersebut mencakup jaringan virtual, subnet, alamat IP publik, dan lain-lain.
Terraform memungkinkan definisi, pratinjau, dan penyebaran infrastruktur cloud. Menggunakan Terraform, Anda membuat file konfigurasi menggunakan sintaksis HCL. Sintaksis HCL memungkinkan Anda menentukan penyedia cloud - seperti Azure - dan elemen yang membentuk infrastruktur cloud Anda. Setelah membuat file konfigurasi, Anda membuat rencana eksekusi yang memungkinkan Anda untuk melihat pratinjau perubahan infrastruktur Anda sebelum disebarkan. Setelah memverifikasi perubahan, Anda menerapkan rencana eksekusi untuk menyebarkan infrastruktur.
Dalam artikel ini, Anda akan mempelajari cara:
- Buat nilai acak untuk nama grup sumber daya Azure menggunakan random_pet.
- Buat grup sumber daya Azure menggunakan azurerm_resource_group.
- Buat jaringan virtual (VNET) menggunakan azurerm_virtual_network.
- Buat subnet menggunakan azurerm_subnet.
- Buat IP publik menggunakan azurerm_public_ip.
- Buat grup keamanan jaringan menggunakan azurerm_network_security_group.
- Buat antarmuka jaringan menggunakan azurerm_network_interface.
- Buat hubungan antara kelompok keamanan jaringan dan antarmuka jaringan menggunakan azurerm_network_interface_security_group_association.
- Hasilkan nilai acak untuk nama akun penyimpanan unik menggunakan random_id.
- Buat akun penyimpanan untuk diagnostik boot menggunakan azurerm_storage_account.
- Membuat VM Linux menggunakan azurerm_linux_virtual_machine
- Buat sumber daya AzAPI azapi_resource.
- Buat sumber daya AzAPI untuk menghasilkan pasangan kunci SSH menggunakan azapi_resource_action.
Prasyarat
Menerapkan kode Terraform
Nota
Kode sampel untuk artikel ini terletak di repositori GitHub Azure Terraform. Anda dapat melihat file log yang berisi hasil pengujian dari versi Terraformsaat ini dan sebelumnya.
Buat direktori untuk menguji dan menjalankan kode sampel Terraform dan menjadikannya direktori saat ini.
Buat file bernama
providers.tfdan masukkan kode berikut:terraform { required_version = ">=0.12" required_providers { azapi = { source = "azure/azapi" version = "~>1.5" } azurerm = { source = "hashicorp/azurerm" version = "~>3.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }Buat file bernama
ssh.tfdan masukkan kode berikut:resource "random_pet" "ssh_key_name" { prefix = "ssh" separator = "" } resource "azapi_resource_action" "ssh_public_key_gen" { type = "Microsoft.Compute/sshPublicKeys@2022-11-01" resource_id = azapi_resource.ssh_public_key.id action = "generateKeyPair" method = "POST" response_export_values = ["publicKey", "privateKey"] } resource "azapi_resource" "ssh_public_key" { type = "Microsoft.Compute/sshPublicKeys@2022-11-01" name = random_pet.ssh_key_name.id location = azurerm_resource_group.rg.location parent_id = azurerm_resource_group.rg.id } output "key_data" { value = azapi_resource_action.ssh_public_key_gen.output.publicKey }Buat file bernama
main.tfdan masukkan kode berikut:resource "random_pet" "rg_name" { prefix = var.resource_group_name_prefix } resource "azurerm_resource_group" "rg" { location = var.resource_group_location name = random_pet.rg_name.id } # Create virtual network resource "azurerm_virtual_network" "my_terraform_network" { name = "myVnet" address_space = ["10.0.0.0/16"] location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name } # Create subnet resource "azurerm_subnet" "my_terraform_subnet" { name = "mySubnet" resource_group_name = azurerm_resource_group.rg.name virtual_network_name = azurerm_virtual_network.my_terraform_network.name address_prefixes = ["10.0.1.0/24"] } # Create public IPs resource "azurerm_public_ip" "my_terraform_public_ip" { name = "myPublicIP" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name allocation_method = "Dynamic" } # Create Network Security Group and rule resource "azurerm_network_security_group" "my_terraform_nsg" { name = "myNetworkSecurityGroup" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name security_rule { name = "SSH" priority = 1001 direction = "Inbound" access = "Allow" protocol = "Tcp" source_port_range = "*" destination_port_range = "22" source_address_prefix = "*" destination_address_prefix = "*" } } # Create network interface resource "azurerm_network_interface" "my_terraform_nic" { name = "myNIC" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name ip_configuration { name = "my_nic_configuration" subnet_id = azurerm_subnet.my_terraform_subnet.id private_ip_address_allocation = "Dynamic" public_ip_address_id = azurerm_public_ip.my_terraform_public_ip.id } } # Connect the security group to the network interface resource "azurerm_network_interface_security_group_association" "example" { network_interface_id = azurerm_network_interface.my_terraform_nic.id network_security_group_id = azurerm_network_security_group.my_terraform_nsg.id } # Generate random text for a unique storage account name resource "random_id" "random_id" { keepers = { # Generate a new ID only when a new resource group is defined resource_group = azurerm_resource_group.rg.name } byte_length = 8 } # Create storage account for boot diagnostics resource "azurerm_storage_account" "my_storage_account" { name = "diag${random_id.random_id.hex}" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name account_tier = "Standard" account_replication_type = "LRS" } # Create virtual machine resource "azurerm_linux_virtual_machine" "my_terraform_vm" { name = "myVM" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name network_interface_ids = [azurerm_network_interface.my_terraform_nic.id] size = "Standard_DS1_v2" os_disk { name = "myOsDisk" caching = "ReadWrite" storage_account_type = "Premium_LRS" } source_image_reference { publisher = "Canonical" offer = "0001-com-ubuntu-server-jammy" sku = "22_04-lts-gen2" version = "latest" } computer_name = "hostname" admin_username = var.username admin_ssh_key { username = var.username public_key = azapi_resource_action.ssh_public_key_gen.output.publicKey } boot_diagnostics { storage_account_uri = azurerm_storage_account.my_storage_account.primary_blob_endpoint } }Buat file bernama
variables.tfdan masukkan kode berikut:variable "resource_group_location" { type = string default = "eastus" description = "Location of the resource group." } variable "resource_group_name_prefix" { type = string default = "rg" description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription." } variable "username" { type = string description = "The username for the local account that will be created on the new VM." default = "azureadmin" }Buat file bernama
outputs.tfdan masukkan kode berikut:output "resource_group_name" { value = azurerm_resource_group.rg.name } output "public_ip_address" { value = azurerm_linux_virtual_machine.my_terraform_vm.public_ip_address }
Menginisialisasi Terraform
Jalankan terraform init untuk menginisialisasi implementasi Terraform. Perintah ini mengunduh penyedia Azure yang diperlukan untuk mengelola sumber daya Azure Anda.
terraform init -upgrade
Poin utama:
- Parameter
-upgrademeningkatkan plugin penyedia yang diperlukan ke versi terbaru yang sesuai dengan batasan versi konfigurasi.
Buat rencana pelaksanaan Terraform
Jalankan terraform plan untuk membuat rencana eksekusi.
terraform plan -out main.tfplan
Poin utama:
- Perintah
terraform planmembuat rencana eksekusi, tetapi tidak menjalankannya. Sebaliknya, ini menentukan tindakan apa yang diperlukan untuk membuat konfigurasi yang ditentukan dalam file konfigurasi Anda. Pola ini memungkinkan Anda untuk memverifikasi apakah rencana eksekusi sesuai dengan harapan Anda sebelum membuat perubahan apa pun pada sumber daya aktual. - Parameter
-outopsional memungkinkan Anda menentukan file output untuk rencana. Menggunakan parameter-outmemastikan bahwa rencana yang Anda tinjau benar-benar sesuai dengan yang diterapkan.
Terapkan rencana pelaksanaan Terraform
Jalankan terraform apply untuk menerapkan rencana eksekusi ke infrastruktur cloud Anda.
terraform apply main.tfplan
Poin utama:
- Contoh perintah
terraform applymengasumsikan Anda sebelumnya menjalankanterraform plan -out main.tfplan. - Jika Anda menentukan nama file yang berbeda untuk parameter
-out, gunakan nama file yang sama dalam panggilan keterraform apply. - Jika Anda tidak menggunakan parameter
-out, panggilterraform applytanpa parameter apa pun.
Informasi biaya tidak disajikan selama proses pembuatan komputer virtual untuk Terraform seperti untuk portal Azure. Jika Anda ingin mempelajari selengkapnya tentang cara kerja biaya untuk komputer virtual, lihat halaman Gambaran Umum pengoptimalan biaya.
Memverifikasi hasilnya
Dapatkan nama grup sumber daya Azure.
resource_group_name=$(terraform output -raw resource_group_name)Jalankan az vm list dengan kueri JMESPath untuk menampilkan nama komputer virtual yang dibuat dalam grup sumber daya.
az vm list \ --resource-group $resource_group_name \ --query "[].{\"VM Name\":name}" -o table
Membersihkan sumber daya
Saat Anda tidak lagi memerlukan sumber daya yang dibuat melalui Terraform, lakukan langkah-langkah berikut:
Jalankan terraform plan dan tentukan bendera
destroy.terraform plan -destroy -out main.destroy.tfplanPoin utama:
- Perintah
terraform planmembuat rencana eksekusi, tetapi tidak menjalankannya. Sebaliknya, ini menentukan tindakan apa yang diperlukan untuk membuat konfigurasi yang ditentukan dalam file konfigurasi Anda. Pola ini memungkinkan Anda untuk memverifikasi apakah rencana eksekusi sesuai dengan harapan Anda sebelum membuat perubahan apa pun pada sumber daya aktual. - Parameter
-outopsional memungkinkan Anda menentukan file output untuk rencana. Menggunakan parameter-outmemastikan bahwa rencana yang Anda tinjau benar-benar sesuai dengan yang diterapkan.
- Perintah
Jalankan terraform apply untuk menerapkan rencana eksekusi.
terraform apply main.destroy.tfplan
Memecahkan masalah Terraform di Azure
Memecahkan masalah umum saat menggunakan Terraform di Azure
Langkah berikutnya
Dalam panduan cepat ini, Anda telah menyebarkan mesin virtual sederhana menggunakan Terraform. Untuk mempelajari lebih lanjut tentang mesin virtual Azure, lanjutkan ke tutorial untuk VM Linux.