Een linux-VM configureren met infrastructuur in Azure met behulp van Terraform
Met Terraform kunt u volledige infrastructuurimplementaties definiƫren en maken in Azure. U bouwt Terraform-sjablonen in een door mensen leesbare indeling die Azure-resources op een consistente, reproduceerbare manier maakt en configureert. In dit artikel wordt beschreven hoe u een volledige Linux-omgeving en ondersteunende resources maakt met Terraform.
In dit artikel leert u het volgende:
- Een virtueel netwerk maken
- Een subnet maken
- Een openbaar IP-adres maken
- Een netwerkbeveiligingsgroep maken
- Een virtuele netwerkinterfacekaart maken
- Een opslagaccount voor diagnostische gegevens maken
- Een virtuele machine maken
1. Uw omgeving configureren
- Azure-abonnement: Als u nog geen abonnement op Azure hebt, maak dan een gratis account aan voordat u begint.
Terraform configureren: Als u dit nog niet hebt gedaan, configureert u Terraform met een van de volgende opties:
2. De Terraform-code implementeren
Maak een map waarin u de Terraform-voorbeeldcode wilt testen en van deze de huidige map wilt maken.
Maak een bestand met de
main.tfnaam en voeg de volgende code in:# 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" } }Belangrijkste punten:
- De machine wordt gemaakt met een nieuwe openbare SSH-sleutel. Voer uit om de bijbehorende persoonlijke sleutel op te
terraform output -raw tls_private_keyhalen. Sla de uitvoer op in een bestand op de lokale computer en gebruik deze om u aan te melden bij de virtuele machine.
- De machine wordt gemaakt met een nieuwe openbare SSH-sleutel. Voer uit om de bijbehorende persoonlijke sleutel op te
3. Terraform initialiseren
Voer terraform init uit om de Terraform-implementatie te initialiseren.
terraform init
Belangrijkste punten:
- Met deze opdracht worden de Azure-modules gedownload die nodig zijn om een Azure-resourcegroep te maken.
4. Een Terraform-uitvoeringsplan maken
Voer terraform plan uit om een uitvoeringsplan te maken.
terraform plan -out main.tfplan
Belangrijkste punten:
- Met
terraform plande opdracht wordt een uitvoeringsplan gemaakt, maar niet uitgevoerd. In plaats daarvan wordt bepaald welke acties nodig zijn om de configuratie te maken die is opgegeven in uw configuratiebestanden. Met dit patroon kunt u controleren of het uitvoeringsplan overeenkomt met uw verwachtingen voordat u wijzigingen aan werkelijke resources aantreft. - Met de
-outoptionele parameter kunt u een uitvoerbestand voor het plan opgeven. Door de parameter te gebruiken, zorgt u ervoor dat het plan dat-outu hebt gecontroleerd, precies is wat er wordt toegepast. - Zie de sectie beveiligingswaarschuwing voor meer informatie over persistente uitvoeringsplannen en beveiliging.
5. Een Terraform-uitvoeringsplan toepassen
Voer terraform apply uit om het uitvoeringsplan toe te passen op uw cloudinfrastructuur.
terraform apply main.tfplan
Belangrijkste punten:
- Met
terraform applyde bovenstaande opdracht wordt ervan uitgenomen dat u eerder hebtterraform plan -out main.tfplangebruikt. - Als u een andere bestandsnaam voor de parameter hebt
-outopgegeven, gebruikt u dezelfde bestandsnaam in de aanroep naarterraform apply. - Als u de parameter niet hebt
-outgebruikt, roept u gewoonterraform applyaan zonder parameters.
Problemen met Terraform in Azure oplossen
Veelvoorkomende problemen bij het gebruik van Terraform in Azure oplossen