Konfigurera en virtuell Linux-dator med infrastruktur i Azure med Terraform
Med Terraform kan du definiera och skapa fullständiga infrastrukturdistributioner i Azure. Du skapar Terraform-mallar i ett format som kan läsas av människor och som skapar och konfigurerar Azure-resurser på ett konsekvent och reproducerbart sätt. Den här artikeln visar hur du skapar en fullständig Linux-miljö och stödresurser med Terraform.
I den här artikeln kan du se hur du:
- Skapa ett virtuellt nätverk
- Skapa ett undernät
- Skapa en offentlig IP-adress
- Skapa en nätverkssäkerhetsgrupp
- Skapa ett kort för virtuellt nätverksgränssnitt
- Skapa ett lagringskonto för diagnostik
- Skapa en virtuell dator
1. Konfigurera din miljö
- Azure-prenumeration: Om du inte har någon Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.
Konfigurera Terraform: Om du inte redan har gjort det konfigurerar du Terraform med något av följande alternativ:
2. Implementera Terraform-koden
Skapa en katalog där du kan testa Terraform-exempelkoden och göra den till den aktuella katalogen.
Skapa en fil med
main.tfnamnet och infoga följande kod:# 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" } }Viktiga punkter:
- Datorn skapas med en ny offentlig SSH-nyckel. Kör för att hämta motsvarande privata
terraform output -raw tls_private_keynyckel. Spara utdata i en fil på den lokala datorn och använd den för att logga in på den virtuella datorn.
- Datorn skapas med en ny offentlig SSH-nyckel. Kör för att hämta motsvarande privata
3. Initiera Terraform
Kör terraform init för att initiera Terraform-distributionen.
terraform init
Viktiga punkter:
- Det här kommandot laddar ned de Azure-moduler som krävs för att skapa en Azure-resursgrupp.
4. Skapa en Terraform-körningsplan
Kör terraform-plan för att skapa en körningsplan.
terraform plan -out main.tfplan
Viktiga punkter:
- Kommandot
terraform planskapar en körningsplan, men kör den inte. I stället avgör den vilka åtgärder som krävs för att skapa konfigurationen som anges i konfigurationsfilerna. Med det här mönstret kan du kontrollera om körningsplanen matchar dina förväntningar innan du gör några ändringar i faktiska resurser. - Med den
-outvalfria parametern kan du ange en utdatafil för planen. Med-outparametern ser du till att den plan som du granskade är exakt vad som tillämpas. - Mer information om att bevara körningsplaner och säkerhet finns i säkerhetsvarningsavsnittet.
5. Tillämpa en Terraform-körningsplan
Kör terraform apply för att tillämpa körningsplanen på din molninfrastruktur.
terraform apply main.tfplan
Viktiga punkter:
- Kommandot
terraform applyovan förutsätter att du tidigare kördeterraform plan -out main.tfplan. - Om du har angett ett annat filnamn för
-outparametern använder du samma filnamn i anropet tillterraform apply. - Om du inte använder parametern
-outanropar du helt enkeltterraform applyutan några parametrar.
Felsöka Terraform på Azure
Felsöka vanliga problem när du använder Terraform på Azure