Terraform-status opslaan in Azure Storage

Terraform maakt de definitie, preview en implementatie van de cloudinfrastructuur mogelijk. Met Behulp van Terraform maakt u configuratiebestanden met behulp van de HCL-syntaxis. Met de HCL-syntaxis kunt u de cloudprovider opgeven, zoals Azure, en de elementen waaruit uw cloudinfrastructuur bestaat. Nadat u uw configuratiebestanden hebt gemaakt, maakt u een uitvoeringsplan waarmee u een voorbeeld van uw infrastructuurwijzigingen kunt bekijken voordat ze worden geïmplementeerd. Zodra u de wijzigingen hebt gecontroleerd, past u het uitvoeringsplan toe om de infrastructuur te implementeren.

Terraform-status wordt gebruikt om geïmplementeerde resources af te stemmen met Terraform-configuraties. Met de 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:

  • Lokale status werkt niet goed in een team- of samenwerkingsomgeving.
  • Terraform-status kan gevoelige informatie bevatten.
  • Het lokaal opslaan van de status verhoogt de kans op onbedoeld verwijderen.

In dit artikel leert u het volgende:

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

1. Uw omgeving configureren

  • Azure-abonnement: als u nog geen abonnement op Azure hebt, maakt u een gratis Azure-account aan voordat u begint.

2. Extern statusopslagaccount 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:

3. De back-endstatus van Terraform configureren

Als u de back-endstatus 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 statusarchiefbestand 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 te gebruiken voor de access_key waarde. Als u een omgevingsvariabele gebruikt, voorkomt u 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 het Azure Storage-account verder wilt beveiligen, slaat u deze op in Azure Key Vault. De omgevingsvariabele kan vervolgens worden ingesteld met behulp van een opdracht die er ongeveer als volgt uitziet. Zie de documentatie van 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 = "~>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"
}

Vervang door <storage_account_name> 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 nu het statusbestand vinden in de Azure Storage-blob.

4. Inzicht in statusvergrendeling

Azure Storage-blobs worden automatisch vergrendeld voor elke bewerking die de status schrijft. Dit patroon voorkomt gelijktijdige statusbewerkingen, waardoor beschadiging kan ontstaan.

Zie Statusvergrendeling in de Terraform-documentatie voor meer informatie.

U kunt de vergrendeling zien wanneer u de blob bekijkt via Azure Portal of andere Hulpprogramma's voor Azure-beheer.

Azure blob with lock

5. Versleuteling-at-rest begrijpen

Gegevens die zijn opgeslagen in een Azure-blob, worden versleuteld voordat ze worden bewaard. Wanneer dat nodig is, haalt Terraform de status op uit de back-end en slaat deze op in het lokale geheugen. Als u dit patroon gebruikt, wordt de status nooit naar uw lokale schijf geschreven.

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

Problemen met Terraform in Azure oplossen

Veelvoorkomende problemen oplossen bij het gebruik van Terraform in Azure

Volgende stappen