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.
Terraform configureren: Als u dit nog niet hebt gedaan, configureert u Terraform met een van de volgende opties:
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:
- Voor Azure-opslagaccounts is een wereldwijd unieke naam vereist. Zie Fouten voor opslagaccountnamen oplossen voor opslagaccountnamen voor meer informatie over het oplossen van problemen met opslagaccountnamen.
- De Terraform-status wordt opgeslagen in tekst zonder opmaak en kan geheimen bevatten. Als de status onjuist is beveiligd, kan onbevoegde toegang tot systemen en gegevensverlies leiden tot gegevensverlies.
- In dit voorbeeld wordt Terraform geverifieerd bij het Azure-opslagaccount met behulp van een toegangssleutel. In een productie-implementatie is het raadzaam om de beschikbare verificatieopties te evalueren die worden ondersteund door de azurerm-back-end en om de veiligste optie voor uw use-case te gebruiken.
- In dit voorbeeld is openbare netwerktoegang toegestaan voor dit Azure-opslagaccount. In een productie-implementatie is het raadzaam om de toegang tot dit opslagaccount te beperken met behulp van een opslagfirewall, service-eindpunt of privé-eindpunt.
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.
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