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.

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.

Azure-blob med lås

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

Nästa steg