Uložení stavu Terraformu ve službě Azure Storage
Stav Terraformu slouží k odsouhlasení nasazených prostředků s konfiguracemi Terraformu. Stav umožňuje Terraformu vědět, jaké prostředky Azure má 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ých prostředích ani v prostředí pro spolupráci.
- Stav Terraformu může obsahovat citlivé informace.
- Místní ukládání stavu zvyšuje riziko neúmyslných odstranění.
V tomto článku získáte informace o těchto tématech:
- Vytvoření účtu úložiště Azure
- K uložení vzdáleného stavu Terraformu použijte úložiště Azure.
- Principy zamykání stavu
- Principy šifrování v klidové době
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.
Konfigurace Terraformu: Pokud jste to ještě neudělali, nakonfigurujte Terraform pomocí jedné z následujících možností:
2. Konfigurace účtu úložiště vzdáleného stavu
Před použitím 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 úložiště Azure a kontejner:
#!/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:
- Veřejný přístup k účtu úložiště Azure je povolený pro ukládání stavu Terraformu.
- Úč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 pro názvy účtů úložiště.
3. Konfigurace back-endu terraformu
Ke konfiguraci stavu back-endu potřebujete následující informace o úložišti Azure:
- storage_account_name: Název Azure Storage účtu.
- container_name: Název kontejneru objektů blob.
- key: Název souboru úložiště stavů, 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 hodnotu doporučujeme použít proměnnou access_key prostředí. Použití proměnné prostředí zabrání zápisu klíče na disk.
Spuštěním následujících příkazů získejte přístupový klíč k úložišti 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 přístupový klíč účtu Azure Storage dál chránit, uložte ho do Azure Key Vault. Proměnnou prostředí je pak možné nastavit pomocí příkazu podobného následujícímu. Další informace o Azure Key Vault najdete v Azure Key Vault dokumentaci.
export ARM_ACCESS_KEY=$(az keyvault secret show --name terraform-backend-key --vault-name myKeyVault --query value -o tsv)
Vytvořte konfiguraci Terraformu s backend blokem konfigurace.
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "=2.46.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 vašeho účtu úložiště Azure.
Spuštěním následujícího příkazu inicializte konfiguraci:
terraform init
Spuštěním následujícího příkazu spusťte konfiguraci:
terraform apply
Soubor stavu teď najdete v objektu Azure Storage blob.
4. Principy zamykání stavu
Azure Storage objekty blob se automaticky uzamkly před jakoukoli operací, která zapisuje stav. Tento model zabraňuje souběžné operace stavu, což může způsobit poškození.
Další informace najdete v tématu Zamykání stavu v dokumentaci k Terraformu.
Zámek můžete zobrazit při prozkoumání objektu blob prostřednictvím nástroje pro Azure Portal nebo jiných nástrojů pro správu Azure.

5. Princip šifrování v klidech
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. Při použití tohoto modelu se stav nikdy nezapisování na místní disk.
Další informace o šifrování Azure Storage najdete v tématu šifrování Azure Storage služby pro data v klidových stavu.
Řešení potíží s Terraformem v Azure
Řešení běžných problémů při používání Terraformu v Azure