Rychlý start: Vytvoření virtuálního počítače s Windows pomocí Terraformu
Platí pro: ✔️ Virtuální počítače s Windows
V tomto článku se dozvíte, jak vytvořit kompletní prostředí Windows a podpůrné prostředky pomocí Terraformu. Mezi tyto prostředky patří virtuální síť, podsíť, veřejná IP adresa a další.
Terraform umožňuje definici, verzi Preview a nasazení cloudové infrastruktury. Pomocí Terraformu vytvoříte konfigurační soubory pomocí syntaxe HCL. Syntaxe seznamu HCL umožňuje zadat poskytovatele cloudu , například Azure, a prvky, které tvoří vaši cloudovou infrastrukturu. Po vytvoření konfiguračních souborů vytvoříte plán provádění, který vám umožní zobrazit náhled změn infrastruktury před jejich nasazením. Jakmile ověříte změny, použijete plán provádění k nasazení infrastruktury.
V tomto článku získáte informace o těchto tématech:
- Vytvořte náhodnou hodnotu pro název skupiny prostředků Azure pomocí random_pet.
- Vytvořte skupinu prostředků Azure pomocí azurerm_resource_group.
- Vytvořte virtuální síť pomocí azurerm_virtual_network.
- Vytvořte podsíť pomocí azurerm_subnet.
- Vytvořte veřejnou IP adresu pomocí azurerm_public_ip.
- Vytvořte skupinu zabezpečení sítě pomocí azurerm_network_security_group.
- Vytvořte síťové rozhraní pomocí azurerm_network_interface.
- Vytvořte přidružení mezi skupinou zabezpečení sítě a síťovým rozhraním pomocí azurerm_network_interface_security_group_association.
- Vygenerujte náhodnou hodnotu pro jedinečný název účtu úložiště pomocí random_id.
- Vytvořte účet úložiště pro diagnostiku spouštění pomocí azurerm_storage_account.
- Vytvořte virtuální počítač s Windows s webovým serverem služby IIS pomocí azurerm_windows_virtual_machine.
- Vytvořte rozšíření virtuálního počítače s Windows pomocí azurerm_virtual_machine_extension.
Požadavky
- Předplatné Azure: Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet před tím, než začnete.
Implementace kódu Terraformu
Poznámka:
Vzorový kód pro tento článek se nachází v úložišti GitHubu Azure Terraformu. Můžete zobrazit soubor protokolu obsahující výsledky testu z aktuálních a předchozích verzí Terraformu.
Další články a ukázkový kód ukazující použití Terraformu ke správě prostředků Azure
Vytvořte adresář, ve kterém otestujete ukázkový kód Terraformu a nastavíte ho jako aktuální adresář.
Vytvořte soubor s názvem
providers.tf
a vložte následující kód:terraform { required_version = ">=1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>3.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }
Vytvořte soubor s názvem
main.tf
a vložte následující kód:resource "azurerm_resource_group" "rg" { location = var.resource_group_location name = "${random_pet.prefix.id}-rg" } # Create virtual network resource "azurerm_virtual_network" "my_terraform_network" { name = "${random_pet.prefix.id}-vnet" 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 = "${random_pet.prefix.id}-subnet" 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 = "${random_pet.prefix.id}-public-ip" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name allocation_method = "Dynamic" } # Create Network Security Group and rules resource "azurerm_network_security_group" "my_terraform_nsg" { name = "${random_pet.prefix.id}-nsg" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name security_rule { name = "RDP" priority = 1000 direction = "Inbound" access = "Allow" protocol = "*" source_port_range = "*" destination_port_range = "3389" source_address_prefix = "*" destination_address_prefix = "*" } security_rule { name = "web" priority = 1001 direction = "Inbound" access = "Allow" protocol = "Tcp" source_port_range = "*" destination_port_range = "80" source_address_prefix = "*" destination_address_prefix = "*" } } # Create network interface resource "azurerm_network_interface" "my_terraform_nic" { name = "${random_pet.prefix.id}-nic" 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 } # 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_windows_virtual_machine" "main" { name = "${var.prefix}-vm" admin_username = "azureuser" admin_password = random_password.password.result 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 = "MicrosoftWindowsServer" offer = "WindowsServer" sku = "2022-datacenter-azure-edition" version = "latest" } boot_diagnostics { storage_account_uri = azurerm_storage_account.my_storage_account.primary_blob_endpoint } } # Install IIS web server to the virtual machine resource "azurerm_virtual_machine_extension" "web_server_install" { name = "${random_pet.prefix.id}-wsi" virtual_machine_id = azurerm_windows_virtual_machine.main.id publisher = "Microsoft.Compute" type = "CustomScriptExtension" type_handler_version = "1.8" auto_upgrade_minor_version = true settings = <<SETTINGS { "commandToExecute": "powershell -ExecutionPolicy Unrestricted Install-WindowsFeature -Name Web-Server -IncludeAllSubFeature -IncludeManagementTools" } SETTINGS } # 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 } resource "random_password" "password" { length = 20 min_lower = 1 min_upper = 1 min_numeric = 1 min_special = 1 special = true } resource "random_pet" "prefix" { prefix = var.prefix length = 1 }
Vytvořte soubor s názvem
variables.tf
a vložte následující kód:variable "resource_group_location" { default = "eastus" description = "Location of the resource group." } variable "prefix" { type = string default = "win-vm-iis" description = "Prefix of the resource name" }
Vytvořte soubor s názvem
outputs.tf
a vložte následující kód:output "resource_group_name" { value = azurerm_resource_group.rg.name } output "public_ip_address" { value = azurerm_windows_virtual_machine.main.public_ip_address } output "admin_password" { sensitive = true value = azurerm_windows_virtual_machine.main.admin_password }
Inicializace Terraformu
Spuštěním inicializace nasazení Terraformu spusťte inicializaci terraformu. Tento příkaz stáhne poskytovatele Azure potřebného ke správě prostředků Azure.
terraform init -upgrade
Klíčové body:
- Parametr
-upgrade
upgraduje potřebné moduly plug-in zprostředkovatele na nejnovější verzi, která splňuje omezení verzí konfigurace.
Vytvoření plánu provádění Terraformu
Spuštěním plánu terraformu vytvořte plán provádění.
terraform plan -out main.tfplan
Klíčové body:
- Příkaz
terraform plan
vytvoří plán provádění, ale nespustí ho. Místo toho určuje, jaké akce jsou nezbytné k vytvoření konfigurace zadané v konfiguračních souborech. Tento model umožňuje ověřit, jestli plán provádění odpovídá vašim očekáváním, než provede jakékoli změny skutečných prostředků. - Volitelný
-out
parametr umožňuje zadat výstupní soubor pro plán. Použití parametru-out
zajišťuje, že plán, který jste zkontrolovali, je přesně to, co se použije.
Použití plánu provádění Terraformu
Spuštění terraformu platí pro použití plánu provádění na cloudovou infrastrukturu.
terraform apply main.tfplan
Klíčové body:
terraform apply
Ukázkový příkaz předpokládá, že jste dříve spustiliterraform plan -out main.tfplan
.- Pokud jste pro
-out
parametr zadali jiný název souboru, použijte stejný název souboru při voláníterraform apply
. - Pokud jste parametr nepoužíli
-out
, zavolejteterraform apply
bez parametrů.
Informace o nákladech se během procesu vytváření virtuálního počítače pro Terraform nezobrazují, jako jsou informace o nákladech na webu Azure Portal. Pokud chcete získat další informace o tom, jak fungují náklady na virtuální počítače, podívejte se na stránku Přehled optimalizace nákladů.
Ověření výsledků
Spuštěním následujícího příkazu získejte veřejnou IP adresu virtuálního počítače a poznamenejte si ji:
echo $(terraform output -raw public_ip_address)
S nainstalovanou službou IIS na virtuálním počítači a nyní otevřeným portem 80 z internetu můžete použít libovolný webový prohlížeč a zobrazit výchozí úvodní stránku služby IIS. Použijte veřejnou IP adresu vašeho virtuálního počítače získaného z předchozího příkazu. Následující příklad ukazuje výchozí webovou stránku služby IIS:
Vyčištění prostředků
Pokud už prostředky vytvořené přes Terraform nepotřebujete, proveďte následující kroky:
Spusťte plán terraformu
destroy
a zadejte příznak.terraform plan -destroy -out main.destroy.tfplan
Klíčové body:
- Příkaz
terraform plan
vytvoří plán provádění, ale nespustí ho. Místo toho určuje, jaké akce jsou nezbytné k vytvoření konfigurace zadané v konfiguračních souborech. Tento model umožňuje ověřit, jestli plán provádění odpovídá vašim očekáváním, než provede jakékoli změny skutečných prostředků. - Volitelný
-out
parametr umožňuje zadat výstupní soubor pro plán. Použití parametru-out
zajišťuje, že plán, který jste zkontrolovali, je přesně to, co se použije.
- Příkaz
Spuštění terraformu platí pro použití plánu provádění.
terraform apply main.destroy.tfplan
Řešení potíží s Terraformem v Azure
Řešení běžných problémů při používání Terraformu v Azure
Další kroky
V tomto rychlém startu jste nasadili jednoduchý virtuální počítač pomocí Terraformu. Další informace o virtuálních počítačích Azure najdete v kurzu pro virtuální počítače s Linuxem.