Guida introduttiva: Eseguire azioni delle risorse di Azure con il provider AzAPI Terraform

Terraform consente di definire, visualizzare in anteprima e distribuire l'infrastruttura cloud. Con Terraform è possibile creare file di configurazione usando la sintassi HCL. La sintassi HCL consente di specificare il provider di servizi cloud, ad esempio Azure, e gli elementi che costituiscono l'infrastruttura cloud. Dopo aver creato i file di configurazione, si crea un piano di esecuzione che consente di visualizzare in anteprima le modifiche dell'infrastruttura prima della distribuzione. Dopo aver verificato le modifiche, è possibile applicare il piano di esecuzione per distribuire l'infrastruttura.

Usare azapi_resource_action come risorsa Terraform gestita per eseguire operazioni imperative e di modifica dello stato sulle risorse Azure. In questo esempio si crea un account di archiviazione Azure e quindi si ruotano le chiavi di accesso.

azapi_resource_action ha due forme di utilizzo:

  • Risorsa: esegue un'operazione di modifica dello stato durante terraform apply. Terraform tiene traccia dell'azione nello stato e può facoltativamente invertire l'azione eseguita su terraform destroy.
  • Origine dati: esegue un'operazione di sola lettura durante la pianificazione. Per questo scenario, vedere la guida introduttiva all'origine dati dell'azione della risorsa .

Usare il modulo della risorsa quando è necessario Terraform per eseguire un'operazione di Azure non basata su un ciclo di vita standard di creazione/lettura/aggiornamento/eliminazione, ad esempio la rotazione delle credenziali, l'avvio o l'arresto di una macchina virtuale o l'attivazione di un failover.

  • Creare un account di archiviazione con il provider AzureRM
  • Ruotare la chiave di accesso dell'account di archiviazione con azapi_resource_action

Prerequisiti

  • Sottoscrizione di Azure: se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.

Quando si accede al portale di Azure con un account Microsoft, viene usata la sottoscrizione di Azure predefinita per tale account.

Terraform esegue automaticamente l'autenticazione usando le informazioni della sottoscrizione di Azure predefinita.

Eseguire az account show per verificare l'account Microsoft corrente e la sottoscrizione di Azure.

az account show

Tutte le modifiche apportate tramite Terraform si trovano nella sottoscrizione di Azure visualizzata. Se è questo che vuoi, salta il resto di questo articolo.

Implementare il codice Terraform

  1. Creare una directory in cui testare il codice Terraform di esempio e impostarla come directory corrente.

  2. Creare un file denominato providers.tf e inserire il codice seguente:

    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. Creare un file denominato variables.tf e inserire il codice seguente:

    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. Creare un file denominato main.tf e inserire il codice seguente:

    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"
      }
    }
    

    Punti chiave sull'uso azapi_resource_action di come risorsa:

    • Il action campo specifica l'operazione arm da eseguire. Per la rotazione delle chiavi dell'account di archiviazione, usare regenerateKey.
    • Il method campo specifica il metodo HTTP. La maggior parte delle azioni imperative usa POST.
    • L'attributo body passa i dati all'azione. Per la rigenerazione della chiave, specificare la chiave (key1 o key2) da ruotare.
    • L'azione viene eseguita durante terraform apply e rilevata nello stato Terraform.
  5. Creare un file denominato outputs.tf e inserire il codice seguente:

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

Per inizializzare la distribuzione di Terraform, eseguire terraform init. Questo comando scarica il provider di Azure necessario per gestire le risorse Azure.

terraform init -upgrade

Punti principali:

  • Il parametro -upgrade aggiorna i plug-in del provider necessari alla versione più recente conforme ai vincoli di versione della configurazione.

Eseguire terraform plan per creare un piano di esecuzione.

terraform plan -out main.tfplan

Punti principali:

  • Il comando terraform plan crea un piano di esecuzione, ma non lo esegue. Determina invece le azioni necessarie per creare la configurazione specificata nei file di configurazione. Questo modello consente di verificare se il piano di esecuzione corrisponde alle aspettative prima di apportare modifiche alle risorse effettive.
  • Il parametro facoltativo -out consente di specificare un file di output per il piano. L'uso del -out parametro garantisce che il piano esaminato sia esattamente quello applicato.

Esegui terraform apply per applicare il piano di esecuzione all'infrastruttura cloud.

terraform apply main.tfplan

Punti principali:

  • Il comando terraform apply di esempio presuppone che in precedenza sia stato eseguito terraform plan -out main.tfplan.
  • Se è stato specificato un nome file diverso per il parametro -out, usare lo stesso nome file nella chiamata a terraform apply.
  • Se non è stato usato il parametro -out, chiamare terraform apply senza parametri.

Verificare i risultati

Dopo il completamento di terraform apply, la chiave dell'account di archiviazione è stata rotata. È possibile verificare la rotazione delle chiavi controllando le chiavi dell'account di archiviazione in Azure.

Eseguire az storage account keys list per visualizzare le chiavi dell'account di archiviazione.

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

Il value campo mostra la chiave corrente.

Esempi di altre azioni delle risorse

La risorsa azapi_resource_action funziona con molte operazioni di Azure. Ecco alcuni esempi comuni:

  • Macchine virtuali: deallocate, start, restart, powerOff, reimage
  • Insiemi di credenziali delle chiavi: purge (per gli insiemi di credenziali eliminati temporaneamente), rotate (per le chiavi gestite)
  • Servizi app: swap (per gli slot di distribuzione), restart
  • Database: failover, promote
  • Risorse di calcolo: qualsiasi operazione esposta dall'Azure REST API che modifica lo stato senza creare o eliminare una risorsa

Pulire le risorse

Quando le risorse create tramite Terraform non sono più necessarie, seguire questa procedura:

  1. Esegui terraform plan e specifica il flag destroy.

    terraform plan -destroy -out main.destroy.tfplan
    

    Punti principali:

    • Il comando terraform plan crea un piano di esecuzione, ma non lo esegue. Determina invece le azioni necessarie per creare la configurazione specificata nei file di configurazione. Questo modello consente di verificare se il piano di esecuzione corrisponde alle aspettative prima di apportare modifiche alle risorse effettive.
    • Il parametro facoltativo -out consente di specificare un file di output per il piano. L'uso del -out parametro garantisce che il piano esaminato sia esattamente quello applicato.
  2. Eseguire terraform apply per applicare il piano di esecuzione.

    terraform apply main.destroy.tfplan
    

Risolvere i problemi di Terraform in Azure

Risolvere i problemi comuni relativi all'uso di Terraform in Azure

Passaggi successivi