Lagra Terraform-tillstånd i Azure Storage
Terraform-tillstånd används för att stämma av distribuerade resurser med Terraform-konfigurationer. Tillstånd gör att Terraform kan veta vilka Azure-resurser som ska läggas till, uppdateras eller tas bort.
Som standard lagras Terraform-tillstånd lokalt, vilket inte är idealiskt av följande skäl:
- Det lokala tillståndet fungerar inte bra i ett team eller en samarbetsmiljö.
- Terraform-tillstånd kan innehålla känslig information.
- Att lagra tillstånd lokalt ökar risken för oavsiktlig borttagning.
I den här artikeln kan du se hur du:
- Skapa ett Azure Storage-konto
- Använd Azure Storage för att lagra Terraform-fjärrtillstånd.
- Förstå tillståndslåsning
- Förstå kryptering i vila
1. Konfigurera din miljö
- Azure-prenumeration: Om du inte har någon Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.
Konfigurera Terraform: Om du inte redan har gjort det konfigurerar du Terraform med något av följande alternativ:
2. Konfigurera lagringskonto för fjärrtillstånd
Innan du använder Azure Storage som en backend måste du skapa ett lagringskonto.
Kör följande kommandon eller konfiguration för att skapa ett Azure Storage-konto och en container:
#!/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
Viktiga punkter:
- Offentlig åtkomst tillåts till Azure-lagringskontot för lagring av Terraform-tillstånd.
- Azure Storage-konton kräver ett globalt unikt namn. Mer information om hur du felsöker lagringskontonamn finns i Lösa fel för lagringskontonamn.
3. Konfigurera terraform-backend-tillstånd
För att konfigurera backend-tillståndet behöver du följande Azure-lagringsinformation:
- storage_account_name:Namnet på Azure Storage konto.
- container_name:Namnet på blobcontainern.
- key: Namnet på tillståndsarkivfilen som ska skapas.
- access_key:Lagringsåtkomstnyckeln.
Vart och ett av dessa värden kan anges i Terraform-konfigurationsfilen eller på kommandoraden. Vi rekommenderar att du använder en miljövariabel för access_key värdet. Om du använder en miljövariabel förhindras nyckeln från att skrivas till disk.
Kör följande kommandon för att hämta lagringsåtkomstnyckeln och lagra den som en miljövariabel:
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
Viktiga punkter:
Om du vill skydda Azure Storage lagringskontots åtkomstnyckel ytterligare lagrar du den i Azure Key Vault. Miljövariabeln kan sedan anges med hjälp av ett kommando som liknar följande. Mer information om Azure Key Vault finns i Azure Key Vault dokumentationen.
export ARM_ACCESS_KEY=$(az keyvault secret show --name terraform-backend-key --vault-name myKeyVault --query value -o tsv)
Skapa en Terraform-konfiguration med ett backend konfigurationsblock.
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"
}
Ersätt <storage_account_name> med namnet på ditt Azure Storage-konto.
Initiera konfigurationen genom att köra följande kommando:
terraform init
Kör konfigurationen genom att köra följande kommando:
terraform apply
Nu kan du hitta tillståndsfilen i Azure Storage blob.
4. Förstå tillståndslåsning
Azure Storage-blobar låses automatiskt före en åtgärd som skriver tillstånd. Det här mönstret förhindrar samtidiga tillståndsåtgärder, vilket kan orsaka skada.
Mer information finns i Tillståndslåsning i Terraform-dokumentationen.
Du kan se låset när du undersöker bloben via Azure Portal eller andra Azure-hanteringsverktyg.

5. Förstå kryptering i vila
Data som lagras i en Azure-blob krypteras innan de sparas. Vid behov hämtar Terraform tillståndet från backend och lagrar det i lokalt minne. Med det här mönstret skrivs tillstånd aldrig till den lokala disken.
Mer information om Azure Storage finns i Azure Storage tjänstkryptering för vilade data.
Felsöka Terraform på Azure
Felsöka vanliga problem när du använder Terraform på Azure