Lagra Terraform-tillstånd i Azure Storage
Terraform möjliggör definition, förhandsversion och distribution av molninfrastruktur. Med Terraform skapar du konfigurationsfiler med hjälp av HCL-syntax. Med HCL-syntaxen kan du ange molnleverantören – till exempel Azure – och de element som utgör din molninfrastruktur. När du har skapat konfigurationsfilerna skapar du en körningsplan som gör att du kan förhandsgranska ändringarna i infrastrukturen innan de distribueras. När du har verifierat ändringarna tillämpar du körningsplanen för att distribuera infrastrukturen.
Terraform-tillstånd används för att stämma av distribuerade resurser med Terraform-konfigurationer. Med tillståndet kan Terraform veta vilka Azure-resurser som ska läggas till, uppdateras eller tas bort.
Terraform-tillståndet lagras som standard 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.
- Om du lagrar tillståndet 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 fjärrtillstånd för Terraform.
- 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 fjärrtillståndslagringskonto
Innan du använder Azure Storage som serverdel 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:
- 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.
- Terraform-tillståndet lagras i oformaterad text och kan innehålla hemligheter. Om tillståndet är felaktigt skyddat kan obehörig åtkomst till system och dataförlust resultera.
- I det här exemplet autentiserar Terraform till Azure Storage-kontot med hjälp av en åtkomstnyckel. I en produktionsdistribution rekommenderar vi att du utvärderar de tillgängliga autentiseringsalternativ som stöds av azurerm-serverdelen och att använda det säkraste alternativet för ditt användningsfall.
- I det här exemplet tillåts åtkomst till det offentliga nätverket till det här Azure-lagringskontot. I en produktionsdistribution rekommenderar vi att du begränsar åtkomsten till det här lagringskontot med hjälp av en lagringsbrandvägg, tjänstslutpunkt eller en privat slutpunkt.
3. Konfigurera terraform-serverdelstillstånd
För att konfigurera serverdelstillståndet behöver du följande Azure-lagringsinformation:
- storage_account_name: Namnet på Azure Storage-kontot.
- container_name: Namnet på blobcontainern.
- nyckel: 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 värdet access_key
. 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 åtkomstnyckeln för Azure Storage-kontot 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 Dokumentationen om Azure Key Vault.
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 = "~>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"
}
Ersätt <storage_account_name>
med namnet på ditt Azure Storage-konto.
Kör följande kommando för att initiera konfigurationen:
terraform init
Kör följande kommando för att köra konfigurationen:
terraform apply
Nu kan du hitta tillståndsfilen i Azure Storage-bloben.
4. Förstå tillståndslåsning
Azure Storage-blobar låses automatiskt innan någon å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-portalen 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 serverdelen och lagrar det i lokalt minne. Om du använder det här mönstret skrivs aldrig tillståndet till den lokala disken.
Mer information om Azure Storage-kryptering finns i Azure Storage-tjänstkryptering för vilande data.
Felsöka Terraform i Azure
Felsöka vanliga problem när du använder Terraform i Azure