Snelle start: Azure Resourceacties uitvoeren met de AzAPI Terraform-provider

Terraform maakt de definitie, preview en implementatie van de cloudinfrastructuur mogelijk. Met Terraform maakt u configuratiebestanden met behulp van HCL-syntaxis. Met de HCL-syntaxis kunt u de cloudprovider opgeven, zoals Azure, en de elementen waaruit uw cloudinfrastructuur bestaat. Nadat u uw configuratiebestanden hebt gemaakt, maakt u een uitvoeringsplan waarmee u een voorbeeld van uw infrastructuurwijzigingen kunt bekijken voordat ze worden geïmplementeerd. Zodra u de wijzigingen hebt gecontroleerd, past u het uitvoeringsplan toe om de infrastructuur te implementeren.

Gebruik azapi_resource_action als een beheerde Terraform-resource om imperatieve, statusveranderende bewerkingen uit te voeren op Azure-resources. In dit voorbeeld maakt u een Azure opslagaccount en roteert u vervolgens de bijbehorende toegangssleutels.

azapi_resource_action heeft twee gebruiksformulieren:

  • Resource: voert een bewerking voor het wijzigen van de status uit tijdens terraform apply. Terraform houdt de actie in status bij en kan deze desgewenst omkeren terraform destroy.
  • Gegevensbron: voert een alleen-lezenbewerking uit tijdens de planning. Zie voor dat scenario de quickstart van de gegevensbron voor resourceacties.

Gebruik het resourceformulier wanneer u Terraform nodig hebt om een Azure bewerking uit te voeren die niet is gebaseerd op een standaard levenscyclus voor maken/lezen/bijwerken/verwijderen, bijvoorbeeld het roteren van referenties, het starten of stoppen van een virtuele machine of het activeren van een failover.

  • Een opslagaccount maken met de AzureRM-provider
  • Vervang de toegangssleutel van het opslagaccount met azapi_resource_action

Prerequisites

  • Azure-abonnement: als u nog geen abonnement op Azure hebt, maakt u een gratis Azure-account aan voordat u begint.

Wanneer u zich aanmeldt bij Azure Portal met een Microsoft-account, wordt het standaard Azure-abonnement voor dat account gebruikt.

Terraform verifieert automatisch met behulp van gegevens uit het standaard Azure-abonnement.

Voer az account show uit om het huidige Microsoft-account en het Azure-abonnement te verifiëren.

az account show

Alle wijzigingen die u via Terraform aanbrengt, bevinden zich in het weergegeven Azure-abonnement. Als u dat wilt, slaat u de rest van dit artikel over.

De Terraform-code implementeren

  1. Maak een map aan om de voorbeeldcode van Terraform te testen en stel deze in als de huidige map.

  2. Maak een bestand met de naam providers.tf en voeg de volgende code in:

    terraform {
      required_providers {
        azapi = {
          source  = "Azure/azapi"
          version = "~> 2.0"
        }
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~> 4.0"
        }
        random = {
          source  = "hashicorp/random"
          version = "~> 3.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
    provider "azapi" {}
    
  3. Maak een bestand met de naam variables.tf en voeg de volgende code in:

    variable "resource_group_location" {
      type        = string
      default     = "eastus"
      description = "Location of the resource group."
    }
    
    variable "resource_group_name_prefix" {
      type        = string
      default     = "rg"
      description = "Prefix of the resource group name that's combined with a random value to create a unique name."
    }
    
    variable "storage_account_name_prefix" {
      type        = string
      default     = "st"
      description = "Prefix of the storage account name that's combined with a random value to create a unique name."
    }
    
  4. Maak een bestand met de naam main.tf en voeg de volgende code in:

    resource "random_pet" "rg_name" {
      prefix = var.resource_group_name_prefix
    }
    
    resource "random_string" "storage_suffix" {
      length  = 8
      upper   = false
      special = false
    }
    
    resource "azurerm_resource_group" "example" {
      location = var.resource_group_location
      name     = random_pet.rg_name.id
    }
    
    resource "azurerm_storage_account" "example" {
      name                     = "${var.storage_account_name_prefix}${random_string.storage_suffix.result}"
      resource_group_name      = azurerm_resource_group.example.name
      location                 = azurerm_resource_group.example.location
      account_tier             = "Standard"
      account_replication_type = "LRS"
    }
    
    resource "azapi_resource_action" "regenerate_key" {
      type        = "Microsoft.Storage/storageAccounts@2023-01-01"
      resource_id = azurerm_storage_account.example.id
      action      = "regenerateKey"
      method      = "POST"
    
      body = {
        keyName = "key1"
      }
    }
    

    Belangrijke punten over het gebruik azapi_resource_action als resource:

    • In action het veld wordt de ARM-bewerking opgegeven die moet worden uitgevoerd. Gebruik regenerateKeyvoor sleutelrotatie van opslagaccounts.
    • In method het veld wordt de HTTP-methode opgegeven. De meeste imperatieve acties gebruiken POST.
    • Het body kenmerk geeft gegevens door aan de actie. Geef voor sleutelregeneratie op welke sleutel (key1 of key2) moet worden gedraaid.
    • De actie wordt uitgevoerd tijdens terraform apply en bijgehouden in de Terraform-state.
  5. Maak een bestand met de naam outputs.tf en voeg de volgende code in:

    output "resource_group_name" {
      value = azurerm_resource_group.example.name
    }
    
    output "storage_account_name" {
      value = azurerm_storage_account.example.name
    }
    

Voer terraform init uit om de Terraform-implementatie te initialiseren. Met deze opdracht wordt de Azure-provider gedownload die is vereist voor het beheren van uw Azure-resources.

terraform init -upgrade

Belangrijkste punten:

  • Met -upgrade de parameter worden de benodigde providerinvoegtoepassingen bijgewerkt naar de nieuwste versie die voldoet aan de versiebeperkingen van de configuratie.

Voer terraform-plan uit om een uitvoeringsplan te maken.

terraform plan -out main.tfplan

Belangrijkste punten:

  • De terraform plan opdracht maakt een uitvoeringsplan, maar voert het niet uit. 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 aan uw verwachtingen voldoet voordat u wijzigingen aanbrengt in de werkelijke resources.
  • Met de optionele -out parameter kunt u een uitvoerbestand voor het plan opgeven. Door de -out parameter te gebruiken, zorgt u ervoor dat het plan dat u hebt gecontroleerd precies wordt toegepast.

Voer terraform apply uit om het uitvoeringsplan toe te passen op uw cloudinfrastructuur.

terraform apply main.tfplan

Belangrijkste punten:

  • In het voorbeeld terraform apply opdracht wordt ervan uitgegaan dat u eerder terraform plan -out main.tfplanhebt uitgevoerd.
  • Als u een andere bestandsnaam voor de -out parameter hebt opgegeven, gebruikt u diezelfde bestandsnaam in de aanroep naar terraform apply.
  • Als u de -out-parameter niet hebt gebruikt, roep terraform apply dan zonder parameters aan.

De resultaten controleren

Nadat terraform apply is voltooid, is de sleutel van het opslagaccount geroteerd. U kunt de sleutelrotatie controleren door de sleutels van het opslagaccount in Azure te controleren.

Voer az storage account keys list uit om de sleutels van het opslagaccount weer te geven.

az storage account keys list \
  --resource-group <resource_group_name> \
  --account-name <storage_account_name>

In value het veld wordt de huidige sleutel weergegeven.

Voorbeelden van andere hulpmiddelenacties

De resource azapi_resource_action werkt met veel Azure bewerkingen. Hier volgen veelvoorkomende voorbeelden:

  • Virtual Machines: deallocate, start, restart, powerOff, reimage
  • Key Vaults: purge (voor voorlopig verwijderde kluizen) rotate (voor beheerde sleutels)
  • App Services: swap (voor implementatieslots), restart
  • Databases: failover, promote
  • Compute-resources: Elke bewerking die wordt weergegeven door de Azure REST API die de status wijzigt zonder een resource te maken of te vernietigen

De hulpbronnen opschonen

Voer de volgende stappen uit wanneer u de resources die zijn gemaakt via Terraform niet meer nodig hebt:

  1. Voer terraform-plan uit en geef de destroy vlag op.

    terraform plan -destroy -out main.destroy.tfplan
    

    Belangrijkste punten:

    • De terraform plan opdracht maakt een uitvoeringsplan, maar voert het niet uit. 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 aan uw verwachtingen voldoet voordat u wijzigingen aanbrengt in de werkelijke resources.
    • Met de optionele -out parameter kunt u een uitvoerbestand voor het plan opgeven. Door de -out parameter te gebruiken, zorgt u ervoor dat het plan dat u hebt gecontroleerd precies wordt toegepast.
  2. Voer terraform apply uit om het uitvoeringsplan toe te passen.

    terraform apply main.destroy.tfplan
    

Problemen met Terraform op Azure oplossen

Veelvoorkomende problemen oplossen bij het gebruik van Terraform in Azure

Volgende stappen