Terraform-status opslaan in Azure Storage

Terraform-status wordt gebruikt om geïmplementeerde resources af te stemmen met Terraform-configuraties. Met Status kan Terraform weten welke Azure-resources moeten worden toegevoegd, bijgewerkt of verwijderd.

De Terraform-status wordt standaard lokaal opgeslagen, wat om de volgende redenen niet ideaal is:

  • De lokale status werkt niet goed in een team- of samenwerkingsomgeving.
  • Terraform-status kan gevoelige informatie bevatten.
  • Door de status lokaal op te slaan, neemt de kans op onbedoelde verwijdering toe.

In dit artikel leert u het volgende:

  • Een Azure-opslagaccount maken
  • Gebruik Azure Storage om de externe Terraform-status op te slaan.
  • Statusvergrendeling begrijpen
  • Versleuteling-at-rest begrijpen

1. Uw omgeving configureren

  • Azure-abonnement: Als u nog geen abonnement op Azure hebt, maak dan een gratis account aan voordat u begint.

2. Opslagaccount voor externe status configureren

Voordat u Azure Storage als back-end gebruikt, moet u een opslagaccount maken.

Voer de volgende opdrachten of configuratie uit om een Azure-opslagaccount en -container te maken:

#!/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

Belangrijkste punten:

  • Openbare toegang is toegestaan tot het Azure-opslagaccount voor het opslaan van de Terraform-status.
  • Voor Azure-opslagaccounts is een wereldwijd unieke naam vereist. Zie Resolve errors for storage account names (Fouten voor namen van opslagaccounts oplossen) voor meer informatie over het oplossen van problemen met namen van opslagaccounts.

3. Terraform-back-end-status configureren

Als u de back-end-status wilt configureren, hebt u de volgende Azure-opslaggegevens nodig:

  • storage_account_name:de naam van het Azure Storage account.
  • container_name:de naam van de blobcontainer.
  • sleutel:de naam van het statusopslagbestand dat moet worden gemaakt.
  • access_key:de toegangssleutel voor opslag.

Elk van deze waarden kan worden opgegeven in het Terraform-configuratiebestand of op de opdrachtregel. U wordt aangeraden een omgevingsvariabele voor de waarde te access_key gebruiken. Als u een omgevingsvariabele gebruikt, wordt voorkomen dat de sleutel naar de schijf wordt geschreven.

Voer de volgende opdrachten uit om de toegangssleutel voor opslag op te halen en op te slaan als een omgevingsvariabele:

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

Belangrijkste punten:

  • Als u de toegangssleutel van Azure Storage account verder wilt beveiligen, moet u deze opslaan in Azure Key Vault. De omgevingsvariabele kan vervolgens worden ingesteld met behulp van een opdracht die vergelijkbaar is met de volgende. Zie de Azure Key Vault voor meer informatie over Azure Key Vault.

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

Maak een Terraform-configuratie met een backend configuratieblok.

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

Vervang <storage_account_name> door de naam van uw Azure-opslagaccount.

Voer de volgende opdracht uit om de configuratie te initialiseren:

terraform init

Voer de volgende opdracht uit om de configuratie uit te voeren:

terraform apply

U kunt het statusbestand nu vinden in de Azure Storage blob.

4. Statusvergrendeling begrijpen

Azure Storage blobs worden automatisch vergrendeld vóór een bewerking die de status schrijft. Dit patroon voorkomt gelijktijdige statusbewerkingen, wat beschadiging kan veroorzaken.

Zie State locking (Statusvergrendeling) in de Terraform-documentatie voor meer informatie.

U kunt de vergrendeling zien wanneer u de blob onderzoekt via de Azure Portal of andere Azure-beheerhulpprogramma's.

Azure-blob met vergrendeling

5. Versleuteling-at-rest begrijpen

Gegevens die zijn opgeslagen in een Azure-blob, worden versleuteld voordat ze worden opgeslagen. Indien nodig haalt Terraform de status op uit de back-en slaat deze op in het lokale geheugen. Met dit patroon wordt de status nooit naar uw lokale schijf geschreven.

Zie voor meer informatie Azure Storage versleuteling Azure Storage serviceversleuteling voor data-at-rest.

Problemen met Terraform in Azure oplossen

Veelvoorkomende problemen bij het gebruik van Terraform in Azure oplossen

Volgende stappen