Freigeben über


Speichern des Terraform-Status in Azure Storage

Terraform ermöglicht die Definition, Vorschau und Bereitstellung der Cloudinfrastruktur. Terraform ermöglicht das Erstellen von Konfigurationsdateien mit HCL-Syntax. Mit der HCL-Syntax können Sie den Cloudanbieter ( z. B. Azure ) und die Elemente angeben, aus denen Ihre Cloudinfrastruktur besteht. Nach der Erstellung Ihrer Konfigurationsdateien erstellen Sie einen Ausführungsplan, mit dem Sie eine Vorschau Ihrer Infrastrukturänderungen anzeigen können, bevor diese bereitgestellt werden. Nachdem Sie die Änderungen überprüft haben, wenden Sie den Ausführungsplan an, um die Infrastruktur bereitzustellen.

Der Terraform-Zustand wird verwendet, um bereitgestellte Ressourcen auf Terraform-Konfigurationen abzustimmen. State ermöglicht Terraform zu wissen, welche Azure-Ressourcen hinzugefügt, aktualisiert oder gelöscht werden sollen.

Der Terraform-Zustand wird standardmäßig lokal gespeichert, was aus folgenden Gründen nicht ideal ist:

  • Der lokale Zustand eignet sich nicht besonders für eine team- oder zusammenarbeitsorientierte Umgebung.
  • Der Terraform-Zustand kann sensible Informationen enthalten.
  • Das lokale Speichern des Zustands erhöht die Wahrscheinlichkeit, dass versehentlich gelöscht wird.

In diesem Artikel erfahren Sie, wie Sie:

  • Erstellen eines Azure-Speicherkontos
  • Verwenden Sie Azure Storage, um den Remote-Terraform-Zustand zu speichern.
  • Verstehen der Zustandssperre
  • Verstehen der Verschlüsselung ruhender Daten

1. Konfigurieren Ihrer Umgebung

  • Azure-Abonnement: Wenn Sie nicht über ein Azure-Abonnement verfügen, erstellen Sie ein kostenloses Konto , bevor Sie beginnen.

2. Konfigurieren des Speicherkontos für den Remotezustand

Bevor Sie Azure Storage als Back-End verwenden, müssen Sie ein Speicherkonto erstellen.

Führen Sie die folgenden Befehle oder Konfigurationen aus, um ein Azure-Speicherkonto und einen Container zu erstellen:

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

Die wichtigsten Punkte:

  • Azure-Speicherkonten erfordern einen global eindeutigen Namen. Weitere Informationen zur Problembehandlung bei Namen von Speicherkonten finden Sie unter Beheben von Fehlern für Namen von Speicherkonten.
  • Der Terraform-Zustand wird in unverschlüsseltem Text gespeichert und kann geheime Informationen enthalten. Wenn der Zustand falsch gesichert ist, kann der nicht autorisierte Zugriff auf Systeme und Datenverlust dazu führen.
  • In diesem Beispiel authentifiziert sich Terraform mithilfe eines Zugriffsschlüssels beim Azure-Speicherkonto. In einer Produktionsbereitstellung wird empfohlen, die verfügbaren Authentifizierungsoptionen zu bewerten, die vom Azurerm-Back-End unterstützt werden, und die sicherste Option für Ihren Anwendungsfall zu verwenden.
  • In diesem Beispiel ist der Zugriff auf öffentliche Netzwerke auf dieses Azure-Speicherkonto zulässig. In einer Produktionsbereitstellung wird empfohlen, den Zugriff auf dieses Speicherkonto mithilfe einer Speicherfirewall, eines Dienstendpunkts oder eines privaten Endpunkts einzuschränken.

3. Konfigurieren des Terraform-Back-End-Zustands

Um den Back-End-Zustand zu konfigurieren, benötigen Sie die folgenden Azure-Speicherinformationen:

  • storage_account_name: Der Name des Azure Storage-Kontos.
  • container_name: Der Name des BLOB-Containers.
  • key: Der Name der zu erstellenden Zustandsspeicherdatei.
  • access_key: Der Speicherzugriffsschlüssel.

Jeder dieser Werte kann in der Terraform-Konfigurationsdatei oder in der Befehlszeile angegeben werden. Es wird empfohlen, eine Umgebungsvariable für den access_key Wert zu verwenden. Die Verwendung einer Umgebungsvariable verhindert, dass der Schlüssel auf den Datenträger geschrieben wird.

Führen Sie die folgenden Befehle aus, um den Speicherzugriffsschlüssel abzurufen und als Umgebungsvariable zu speichern:

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

Die wichtigsten Punkte:

  • Um den Zugriffsschlüssel des Azure Storage-Kontos weiter zu schützen, speichern Sie ihn im Azure Key Vault. Die Umgebungsvariable kann dann mit einem Befehl wie dem folgenden festgelegt werden. Weitere Informationen zu Azure Key Vault finden Sie in der Dokumentation zu Azure Key Vault.

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

Erstellen Sie eine Terraform-Konfiguration mit einem 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"
}

Ersetzen Sie <storage_account_name> durch den Namen Ihres Azure-Speicherkontos.

Führen Sie den folgenden Befehl aus, um die Konfiguration zu initialisieren:

terraform init

Führen Sie den folgenden Befehl aus, um die Konfiguration auszuführen:

terraform apply

Sie können nun die Statusdatei im Azure Storage-BLOB finden.

4. Verstehen der Zustandssperre

Azure Storage-Blobs werden automatisch vor jedem Vorgang gesperrt, der den Zustand schreibt. Dieses Muster verhindert gleichzeitige Zustandsoperationen, die zu Datenbeschädigung führen können.

Weitere Informationen finden Sie in der Terraform-Dokumentation unter Zustandssperre.

Sie können die Sperre sehen, wenn Sie den Blob über das Azure-Portal oder andere Azure-Verwaltungstools untersuchen.

Azure-Blob mit Sperre

5. Verstehen der Verschlüsselung ruhender Daten

Daten, die in einem Azure-Blob gespeichert sind, werden vor dem Speichern verschlüsselt. Bei Bedarf ruft Terraform den Zustand aus dem Back-End ab und speichert ihn im lokalen Speicher. Wenn Sie dieses Muster verwenden, wird der Zustand nie auf den lokalen Datenträger geschrieben.

Weitere Informationen zur Azure Storage-Verschlüsselung finden Sie unter Azure Storage-Dienstverschlüsselung für ruhende Daten.

Problembehandlung für Terraform in Azure

Behebung häufiger Probleme bei der Verwendung von Terraform in Azure

Nächste Schritte