Konfigurace virtuálního počítače s Linuxem s infrastrukturou v Azure pomocí Terraformu
Terraform umožňuje definovat a vytvářet kompletní nasazení infrastruktury v Azure. Šablony Terraformu vytváříte v lidsky čitelném formátu, který vytváří a konfiguruje prostředky Azure konzistentním a reprodukovatelným způsobem. V tomto článku si ukážeme, jak vytvořit kompletní linuxové prostředí a podpůrné prostředky pomocí Terraformu.
V tomto článku získáte informace o těchto tématech:
- Vytvoření virtuální sítě
- Vytvoření podsítě
- Vytvoření veřejné IP adresy
- Vytvoření skupiny zabezpečení sítě
- Vytvoření virtuální síťové karty
- Vytvoření účtu úložiště pro diagnostiku
- Vytvoření virtuálního počítače
1. Konfigurace prostředí
- Předplatné Azure: Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet před tím, než začnete.
Konfigurace Terraformu: Pokud jste to ještě neudělali, nakonfigurujte Terraform pomocí jedné z následujících možností:
2. Implementace kódu Terraformu
Vytvořte adresář, ve kterém chcete otestovat ukázkový kód Terraformu, a napište ho jako aktuální adresář.
Vytvořte soubor s názvem a
main.tfvložte následující kód:# Configure the Microsoft Azure Provider terraform { required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>2.0" } } } provider "azurerm" { features {} } # Create a resource group if it doesn't exist resource "azurerm_resource_group" "myterraformgroup" { name = "myResourceGroup" location = "eastus" tags = { environment = "Terraform Demo" } } # Create virtual network resource "azurerm_virtual_network" "myterraformnetwork" { name = "myVnet" address_space = ["10.0.0.0/16"] location = "eastus" resource_group_name = azurerm_resource_group.myterraformgroup.name tags = { environment = "Terraform Demo" } } # Create subnet resource "azurerm_subnet" "myterraformsubnet" { name = "mySubnet" resource_group_name = azurerm_resource_group.myterraformgroup.name virtual_network_name = azurerm_virtual_network.myterraformnetwork.name address_prefixes = ["10.0.1.0/24"] } # Create public IPs resource "azurerm_public_ip" "myterraformpublicip" { name = "myPublicIP" location = "eastus" resource_group_name = azurerm_resource_group.myterraformgroup.name allocation_method = "Dynamic" tags = { environment = "Terraform Demo" } } # Create Network Security Group and rule resource "azurerm_network_security_group" "myterraformnsg" { name = "myNetworkSecurityGroup" location = "eastus" resource_group_name = azurerm_resource_group.myterraformgroup.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 = "*" } tags = { environment = "Terraform Demo" } } # Create network interface resource "azurerm_network_interface" "myterraformnic" { name = "myNIC" location = "eastus" resource_group_name = azurerm_resource_group.myterraformgroup.name ip_configuration { name = "myNicConfiguration" subnet_id = azurerm_subnet.myterraformsubnet.id private_ip_address_allocation = "Dynamic" public_ip_address_id = azurerm_public_ip.myterraformpublicip.id } tags = { environment = "Terraform Demo" } } # Connect the security group to the network interface resource "azurerm_network_interface_security_group_association" "example" { network_interface_id = azurerm_network_interface.myterraformnic.id network_security_group_id = azurerm_network_security_group.myterraformnsg.id } # Generate random text for a unique storage account name resource "random_id" "randomId" { keepers = { # Generate a new ID only when a new resource group is defined resource_group = azurerm_resource_group.myterraformgroup.name } byte_length = 8 } # Create storage account for boot diagnostics resource "azurerm_storage_account" "mystorageaccount" { name = "diag${random_id.randomId.hex}" resource_group_name = azurerm_resource_group.myterraformgroup.name location = "eastus" account_tier = "Standard" account_replication_type = "LRS" tags = { environment = "Terraform Demo" } } # Create (and display) an SSH key resource "tls_private_key" "example_ssh" { algorithm = "RSA" rsa_bits = 4096 } output "tls_private_key" { value = tls_private_key.example_ssh.private_key_pem sensitive = true } # Create virtual machine resource "azurerm_linux_virtual_machine" "myterraformvm" { name = "myVM" location = "eastus" resource_group_name = azurerm_resource_group.myterraformgroup.name network_interface_ids = [azurerm_network_interface.myterraformnic.id] size = "Standard_DS1_v2" os_disk { name = "myOsDisk" caching = "ReadWrite" storage_account_type = "Premium_LRS" } source_image_reference { publisher = "Canonical" offer = "UbuntuServer" sku = "18.04-LTS" version = "latest" } computer_name = "myvm" admin_username = "azureuser" disable_password_authentication = true admin_ssh_key { username = "azureuser" public_key = tls_private_key.example_ssh.public_key_openssh } boot_diagnostics { storage_account_uri = azurerm_storage_account.mystorageaccount.primary_blob_endpoint } tags = { environment = "Terraform Demo" } }Klíčové body:
- Počítač se vytvoří s novým veřejným klíčem SSH. Pokud chcete získat odpovídající privátní klíč, spusťte
terraform output -raw tls_private_keypříkaz . Uložte výstup do souboru na místním počítači a použijte ho k přihlášení k virtuálnímu počítači.
- Počítač se vytvoří s novým veřejným klíčem SSH. Pokud chcete získat odpovídající privátní klíč, spusťte
3. Inicializace Terraformu
Spuštěním terraform init init inicializovali nasazení Terraformu.
terraform init
Klíčové body:
- Tento příkaz stáhne moduly Azure potřebné k vytvoření skupiny prostředků Azure.
4. Vytvoření plánu provádění Terraformu
Spusťte příkaz terraform plan a vytvořte plán spuštění.
terraform plan -out main.tfplan
Klíčové body:
- Příkaz
terraform planvytvoří plán spuštění, ale nes jeho provedení. Místo toho určuje, jaké akce jsou nezbytné k vytvoření konfigurace zadané v konfiguračních souborech. Tento model umožňuje před provedením jakýchkoli změn skutečných prostředků ověřit, jestli plán provádění odpovídá vašim očekáváním. - Volitelný
-outparametr umožňuje zadat výstupní soubor pro plán. Použitím parametru zajistíte, že se právě použije plán, který-outjste si prohlédněte. - Další informace o zachování plánů provádění a zabezpečení najdete v části s upozorněním zabezpečení.
5. Použití plánu provádění Terraformu
Spuštěním příkazu terraform apply aplikujte plán spuštění na cloudovou infrastrukturu.
terraform apply main.tfplan
Klíčové body:
- Výše
terraform applyuvedený příkaz předpokládá, že jste předtím spustiliterraform plan -out main.tfplanpříkaz . - Pokud jste pro parametr zadali jiný název souboru, použijte stejný název souboru
-outve volání metodyterraform apply. - Pokud jste parametr
-outnepou3/4ít, stačí volatterraform applybez parametrů.
Řešení potíží s Terraformem v Azure
Řešení běžných problémů při používání Terraformu v Azure