Een Azure VM-cluster maken met Terraform en HCL
In dit artikel ziet u hoe u een klein rekencluster maakt met behulp van HCL.
In dit artikel leert u het volgende:
- Azure-verificatie instellen.
- Maak een Terraform-configuratiebestand.
- Gebruik een Terraform-configuratiebestand om een load balancer.
- Gebruik een Terraform-configuratiebestand om twee virtuele Linux-VM's in een beschikbaarheidsset te implementeren.
- Initialiseer Terraform.
- Een Terraform-uitvoeringsplan maken.
- Pas het Terraform-uitvoeringsplan toe om de Azure-resources te 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 code implementeren
Maak een map waarin u de Terraform-voorbeeldcode wilt testen en van deze de huidige map wilt maken.
terraform { required_version = ">=0.12" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>2.0" } } } provider "azurerm" { features {} } resource "azurerm_resource_group" "test" { name = "acctestrg" location = "West US 2" } resource "azurerm_virtual_network" "test" { name = "acctvn" address_space = ["10.0.0.0/16"] location = azurerm_resource_group.test.location resource_group_name = azurerm_resource_group.test.name } resource "azurerm_subnet" "test" { name = "acctsub" resource_group_name = azurerm_resource_group.test.name virtual_network_name = azurerm_virtual_network.test.name address_prefixes = ["10.0.2.0/24"] } resource "azurerm_public_ip" "test" { name = "publicIPForLB" location = azurerm_resource_group.test.location resource_group_name = azurerm_resource_group.test.name allocation_method = "Static" } resource "azurerm_lb" "test" { name = "loadBalancer" location = azurerm_resource_group.test.location resource_group_name = azurerm_resource_group.test.name frontend_ip_configuration { name = "publicIPAddress" public_ip_address_id = azurerm_public_ip.test.id } } resource "azurerm_lb_backend_address_pool" "test" { loadbalancer_id = azurerm_lb.test.id name = "BackEndAddressPool" } resource "azurerm_network_interface" "test" { count = 2 name = "acctni${count.index}" location = azurerm_resource_group.test.location resource_group_name = azurerm_resource_group.test.name ip_configuration { name = "testConfiguration" subnet_id = azurerm_subnet.test.id private_ip_address_allocation = "dynamic" } } resource "azurerm_managed_disk" "test" { count = 2 name = "datadisk_existing_${count.index}" location = azurerm_resource_group.test.location resource_group_name = azurerm_resource_group.test.name storage_account_type = "Standard_LRS" create_option = "Empty" disk_size_gb = "1023" } resource "azurerm_availability_set" "avset" { name = "avset" location = azurerm_resource_group.test.location resource_group_name = azurerm_resource_group.test.name platform_fault_domain_count = 2 platform_update_domain_count = 2 managed = true } resource "azurerm_virtual_machine" "test" { count = 2 name = "acctvm${count.index}" location = azurerm_resource_group.test.location availability_set_id = azurerm_availability_set.avset.id resource_group_name = azurerm_resource_group.test.name network_interface_ids = [element(azurerm_network_interface.test.*.id, count.index)] vm_size = "Standard_DS1_v2" # Uncomment this line to delete the OS disk automatically when deleting the VM # delete_os_disk_on_termination = true # Uncomment this line to delete the data disks automatically when deleting the VM # delete_data_disks_on_termination = true storage_image_reference { publisher = "Canonical" offer = "UbuntuServer" sku = "16.04-LTS" version = "latest" } storage_os_disk { name = "myosdisk${count.index}" caching = "ReadWrite" create_option = "FromImage" managed_disk_type = "Standard_LRS" } # Optional data disks storage_data_disk { name = "datadisk_new_${count.index}" managed_disk_type = "Standard_LRS" create_option = "Empty" lun = 0 disk_size_gb = "1023" } storage_data_disk { name = element(azurerm_managed_disk.test.*.name, count.index) managed_disk_id = element(azurerm_managed_disk.test.*.id, count.index) create_option = "Attach" lun = 1 disk_size_gb = element(azurerm_managed_disk.test.*.disk_size_gb, count.index) } os_profile { computer_name = "hostname" admin_username = "testadmin" admin_password = "Password1234!" } os_profile_linux_config { disable_password_authentication = false } tags = { environment = "staging" } }
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.
6. De resultaten controleren
Voer de opdracht az vm list uit met een JMESPath-query om de VM's weer te geven die in de resourcegroep zijn gemaakt.
az vm list -g acctestrg --query "[].{\"VM Name\":name}" -o table
7. Resources ops schonen
Wanneer u de resources die via Terraform zijn gemaakt niet meer nodig hebt, moet u de volgende stappen volgen:
Voer terraform plan uit en geef de vlag op.
terraform plan -destroy -out main.destroy.tfplanBelangrijkste 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.
- Met
Voer terraform apply uit om het uitvoeringsplan toe te passen.
terraform apply main.destroy.tfplan
Problemen met Terraform in Azure oplossen
Veelvoorkomende problemen bij het gebruik van Terraform in Azure oplossen