Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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 genomförandeplanen för att implementera infrastrukturen.
Terraform-tillstånd används för att jämka samman 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-status kan innehålla känslig information.
- Om du lagrar tillståndet lokalt ökar risken för oavsiktlig borttagning.
I den här artikeln lär du dig att:
- 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 vid lagring
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 konto för fjärrlagring av tillstånd
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-backend-tillstå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-blobbar låses automatiskt innan någon åtgärd som skriver tillståndsdata. Det här mönstret förhindrar samtidiga tillståndsåtgärder, vilket kan orsaka skada.
För mer information, se 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