Rychlý úvod: Provádění akcí prostředků Azure pomocí poskytovatele AzAPI Terraformu

Terraform umožňuje definovat, prohlížet a nasazovat cloudovou infrastrukturu. Pomocí Terraformu vytvoříte konfigurační soubory pomocí syntaxe HCL. Syntaxe seznamu HCL umožňuje zadat poskytovatele cloudu, například Azure, a prvky, které tvoří vaši cloudovou infrastrukturu. Po vytvoření konfiguračních souborů vytvoříte plán provádění , který vám umožní zobrazit náhled změn infrastruktury před jejich nasazením. Jakmile ověříte změny, použijete plán provádění k nasazení infrastruktury.

Pomocí azapi_resource_action jako spravovaného prostředku Terraformu můžete provádět imperativní operace změny stavu u Azure prostředků. V tomto příkladu vytvoříte účet úložiště Azure a pak otočíte jeho přístupové klíče.

azapi_resource_action má dva formuláře použití:

  • Prostředek: Provádí operaci změny stavu během terraform apply. Terraform sleduje akci ve stavu a volitelně ji může vrátit na terraform destroy.
  • Zdroj dat: Provádí operaci jen pro čtení během plánování. Prozkoumejte rychlý start datového zdroje akce prostředku pro tento scénář.

Formulář zdroje použijte, když potřebujete Terraform k provedení operace Azure, která není založená na standardním životním cyklu vytvoření, čtení, aktualizace nebo odstranění – například rotace přihlašovacích údajů, spuštění nebo zastavení virtuálního počítače nebo vyvolání převzetí služeb při selhání.

  • Vytvoření účtu úložiště pomocí poskytovatele AzureRM
  • Rotace přístupového klíče účtu úložiště pomocí azapi_resource_action

Předpoklady

  • Předplatné Azure: Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet před tím, než začnete.

Když se přihlásíte k webu Azure Portal pomocí účtu Microsoft, použije se výchozí předplatné Azure pro tento účet.

Terraform se automaticky ověřuje pomocí informací z výchozího předplatného Azure.

Spuštěním příkazu az account show ověřte aktuální účet Microsoft a předplatné Azure.

az account show

Všechny změny, které provedete přes Terraform, se nacházejí v zobrazeném předplatném Azure. Pokud chcete, přeskočte zbytek tohoto článku.

Implementace kódu Terraformu

  1. Vytvořte adresář, ve kterém otestujete ukázkový kód Terraformu a nastavíte ho jako aktuální adresář.

  2. Vytvořte soubor s názvem providers.tf a vložte následující kód:

    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. Vytvořte soubor s názvem variables.tf a vložte následující kód:

    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. Vytvořte soubor s názvem main.tf a vložte následující kód:

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

    Klíčové body týkající se použití azapi_resource_action jako prostředku:

    • Pole action určuje operaci ARM, která se má provést. K obměně klíčů k účtům úložiště použijte regenerateKey.
    • Pole method určuje metodu HTTP. Většina imperativních akcí používá POST.
    • Atribut body předává data do operace. Pro regeneraci klíčů určete, který klíč (key1 nebo key2) se má otočit.
    • Akce se provádí během terraform apply a je sledována ve stavové databázi Terraformu.
  5. Vytvořte soubor s názvem outputs.tf a vložte následující kód:

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

Spusťte terraform init a inicializujte nasazení Terraformu. Tento příkaz stáhne poskytovatele Azure potřebného ke správě vašich Azure prostředků.

terraform init -upgrade

klíčové body:

  • Parametr -upgrade aktualizuje potřebné pluginy poskytovatele na nejnovější verzi, která odpovídá verzním omezením konfigurace.

Spusťte terraform plan pro vytvoření plánu provedení.

terraform plan -out main.tfplan

klíčové body:

  • Příkaz terraform plan vytvoří plán provádění, ale nespustí ho. Místo toho určuje, jaké akce jsou nezbytné k vytvoření konfigurace zadané v konfiguračních souborech. Tento model umožňuje ověřit, jestli plán provádění odpovídá vašim očekáváním, než provede jakékoli změny skutečných prostředků.
  • Volitelný -out parametr umožňuje zadat výstupní soubor pro plán. Použití parametru -out zajišťuje, že vámi zkontrolovaný plán je přesně tím, co bude aplikován.

Spusťte terraform apply a aplikujte plán provedení do vaší cloudové infrastruktury.

terraform apply main.tfplan

klíčové body:

  • terraform apply Ukázkový příkaz předpokládá, že jste dříve spustili terraform plan -out main.tfplan.
  • Pokud jste pro -out parametr zadali jiný název souboru, použijte stejný název souboru při volání terraform apply.
  • Pokud jste parametr nepoužíli -out , zavolejte terraform apply bez parametrů.

Ověření výsledků

Po terraform apply dokončení se klíč účtu úložiště otočil. Obměnu klíčů můžete ověřit tak, že v Azure zkontrolujete klíče účtu úložiště.

Spuštěním příkazu az storage account keys list zobrazte klíče účtu úložiště.

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

Pole value zobrazuje aktuální klíč.

Příklady dalších akcí prostředků

Prostředek azapi_resource_action funguje s mnoha operacemi Azure. Tady jsou běžné příklady:

  • Virtual Machines: deallocate, start, restart, powerOff, reimage
  • Trezory klíčů: purge (pro měkce smazané trezory), rotate (pro spravované klíče)
  • App Services: swap (pro nasazovací sloty), restart
  • Databáze: failover, promote
  • Výpočetní prostředky: Jakákoli operace vystavená rozhraním REST API Azure, která změní stav bez vytvoření nebo zničení prostředku

Vyčistěte zdroje

Pokud už prostředky vytvořené přes Terraform nepotřebujete, proveďte následující kroky:

  1. Spusťte terraform plan a zadejte parametr destroy.

    terraform plan -destroy -out main.destroy.tfplan
    

    klíčové body:

    • Příkaz terraform plan vytvoří plán provádění, ale nespustí ho. Místo toho určuje, jaké akce jsou nezbytné k vytvoření konfigurace zadané v konfiguračních souborech. Tento model umožňuje ověřit, jestli plán provádění odpovídá vašim očekáváním, než provede jakékoli změny skutečných prostředků.
    • Volitelný -out parametr umožňuje zadat výstupní soubor pro plán. Použití parametru -out zajišťuje, že vámi zkontrolovaný plán je přesně tím, co bude aplikován.
  2. Spusťte terraform apply pro aplikaci prováděcího plánu.

    terraform apply main.destroy.tfplan
    

Řešení potíží s Terraformem v Azure

Řešení běžných problémů při používání Terraformu v Azure

Další kroky