Sdílet prostřednictvím


Uložení stavu Terraformu ve službě Azure Storage

Terraform umožňuje definici, verzi Preview a nasazení cloudové infrastruktury. 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.

Stav Terraformu slouží k odsouhlasení nasazených prostředků s konfiguracemi Terraformu. Stav umožňuje Terraformu zjistit, jaké prostředky Azure se mají přidat, aktualizovat nebo odstranit.

Ve výchozím nastavení se stav Terraformu ukládá místně, což není ideální z následujících důvodů:

  • Místní stav nefunguje dobře v týmovém nebo prostředí pro spolupráci.
  • Stav Terraformu může obsahovat citlivé informace.
  • Místní ukládání stavu zvyšuje pravděpodobnost neúmyslného odstranění.

V tomto článku získáte informace o těchto tématech:

  • Vytvoření účtu úložiště Azure
  • Úložiště Azure slouží k ukládání vzdáleného stavu Terraformu.
  • Principy zamykání stavu
  • Principy šifrování neaktivních uložených dat

1. Konfigurace prostředí

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

2. Konfigurace účtu vzdáleného úložiště stavu

Před použitím služby Azure Storage jako back-endu musíte vytvořit účet úložiště.

Spuštěním následujících příkazů nebo konfigurace vytvořte účet a kontejner Azure Storage:

#!/bin/bash

RESOURCE_GROUP_NAME=tfstate
STORAGE_ACCOUNT_NAME=tfstate$RANDOM
CONTAINER_NAME=tfstate

# Create resource group
az group create --name $RESOURCE_GROUP_NAME --location eastus

# Create storage account
az storage account create --resource-group $RESOURCE_GROUP_NAME --name $STORAGE_ACCOUNT_NAME --sku Standard_LRS --encryption-services blob

# Create blob container
az storage container create --name $CONTAINER_NAME --account-name $STORAGE_ACCOUNT_NAME

Klíčové body:

  • Účty úložiště Azure vyžadují globálně jedinečný název. Další informace o řešení potíží s názvy účtů úložiště najdete v tématu Řešení chyb názvů účtů úložiště.
  • Stav Terraformu je uložený ve formátu prostého textu a může obsahovat tajné kódy. Pokud je stav nesprávně zabezpečený, může dojít k neoprávněnému přístupu k systémům a ztrátě dat.
  • V tomto příkladu terraform ověří účet úložiště Azure pomocí přístupového klíče. V produkčním nasazení se doporučuje vyhodnotit dostupné možnosti ověřování podporované back-endem azurerm a použít nejbezpečnější možnost pro váš případ použití.
  • V tomto příkladu je přístup k veřejné síti k tomuto účtu úložiště Azure povolený. V produkčním nasazení se doporučuje omezit přístup k tomuto účtu úložiště pomocí brány firewall úložiště, koncového bodu služby nebo privátního koncového bodu.

3. Konfigurace stavu back-endu terraformu

Ke konfiguraci stavu back-endu potřebujete následující informace o úložišti Azure:

  • storage_account_name: Název účtu azure Storage.
  • container_name: Název kontejneru objektů blob.
  • key: Název souboru úložiště stavu, který se má vytvořit.
  • access_key: Přístupový klíč k úložišti.

Každou z těchto hodnot je možné zadat v konfiguračním souboru Terraformu nebo na příkazovém řádku. Pro tuto hodnotu doporučujeme použít proměnnou access_key prostředí. Použití proměnné prostředí zabraňuje zápisu klíče na disk.

Spuštěním následujících příkazů získejte přístupový klíč úložiště a uložte ho jako proměnnou prostředí:

ACCOUNT_KEY=$(az storage account keys list --resource-group $RESOURCE_GROUP_NAME --account-name $STORAGE_ACCOUNT_NAME --query '[0].value' -o tsv)
export ARM_ACCESS_KEY=$ACCOUNT_KEY

Klíčové body:

  • Pokud chcete dál chránit přístupový klíč účtu služby Azure Storage, uložte ho ve službě Azure Key Vault. Proměnnou prostředí pak můžete nastavit pomocí příkazu podobného následujícímu. Další informace o službě Azure Key Vault najdete v dokumentaci ke službě Azure Key Vault.

    export ARM_ACCESS_KEY=$(az keyvault secret show --name terraform-backend-key --vault-name myKeyVault --query value -o tsv)
    

Vytvořte konfiguraci Terraformu s blokem backend konfigurace.

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~>3.0"
    }
  }
  backend "azurerm" {
      resource_group_name  = "tfstate"
      storage_account_name = "<storage_account_name>"
      container_name       = "tfstate"
      key                  = "terraform.tfstate"
  }

}

provider "azurerm" {
  features {}
}

resource "azurerm_resource_group" "state-demo-secure" {
  name     = "state-demo"
  location = "eastus"
}

Nahraďte <storage_account_name> názvem svého účtu úložiště Azure.

Spuštěním následujícího příkazu inicializujete konfiguraci:

terraform init

Spuštěním následujícího příkazu spusťte konfiguraci:

terraform apply

Soubor stavu teď najdete v objektu blob služby Azure Storage.

4. Vysvětlení zamykání stavu

Objekty blob služby Azure Storage se automaticky zamknou před jakoukoli operací, která zapisuje stav. Tento model zabraňuje souběžné stavové operace, což může způsobit poškození.

Další informace najdete v tématu Uzamčení stavu v dokumentaci k Terraformu.

Zámek můžete zobrazit při prozkoumání objektu blob prostřednictvím webu Azure Portal nebo jiných nástrojů pro správu Azure.

Azure blob with lock

5. Vysvětlení šifrování neaktivních uložených dat

Data uložená v objektu blob Azure se před uložením zašifrují. V případě potřeby Terraform načte stav z back-endu a uloží ho do místní paměti. Pokud použijete tento vzor, stav se nikdy nezapíše na místní disk.

Další informace o šifrování služby Azure Storage najdete v tématu Šifrování neaktivních uložených dat ve službě Azure Storage.

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

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

Další kroky