Terraform-állapot tárolása az Azure Storage-ban

A Terraform lehetővé teszi a felhőinfrastruktúra definícióját, előzetes verzióját és üzembe helyezését. A Terraform használatával konfigurációs fájlokat hozhat létre HCL-szintaxissal. A HCL szintaxissal megadhatja a felhőszolgáltatót – például az Azure-t – és a felhőinfrastruktúra elemeit. A konfigurációs fájlok létrehozása után létrehoz egy végrehajtási tervet , amely lehetővé teszi az infrastruktúra változásainak előzetes megtekintését az üzembe helyezés előtt. A módosítások ellenőrzése után alkalmazza a végrehajtási tervet az infrastruktúra üzembe helyezésére.

A Terraform-állapot az üzembe helyezett erőforrások Terraform-konfigurációkkal való összeegyeztetésére szolgál. Az állapot lehetővé teszi a Terraform számára, hogy megtudja, milyen Azure-erőforrásokat vehet fel, frissíthet vagy törölhet.

Alapértelmezés szerint a Terraform-állapot helyileg van tárolva, ami a következő okok miatt nem ideális:

  • A helyi állapot nem működik jól csapatban vagy együttműködési környezetben.
  • A Terraform-állapot bizalmas információkat tartalmazhat.
  • Az állapot helyi tárolása növeli a véletlen törlés esélyét.

Ebben a cikkben az alábbiakkal ismerkedhet meg:

  • Azure-tárfiók létrehozása
  • Az Azure Storage használatával távoli Terraform-állapotot tárolhat.
  • Az állapotzárolás ismertetése
  • A inaktív titkosítás ismertetése

1. A környezet konfigurálása

  • Azure-előfizetés: Ha nem rendelkezik Azure-előfizetéssel, első lépésként mindössze néhány perc alatt létrehozhat egy ingyenes fiókot.

2. Távoli állapotú tárfiók konfigurálása

Az Azure Storage háttérrendszerként való használata előtt létre kell hoznia egy tárfiókot.

Azure Storage-fiók és -tároló létrehozásához futtassa a következő parancsokat vagy konfigurációt:

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

Főbb pontok:

  • Az Azure Storage-fiókok globálisan egyedi nevet igényelnek. A tárfiókok nevének hibaelhárításával kapcsolatos további információkért lásd : Tárfióknevek hibáinak elhárítása.
  • A Terraform-állapot egyszerű szövegben van tárolva, és titkos kulcsokat tartalmazhat. Ha az állapotot helytelenül védik, a rendszerekhez való jogosulatlan hozzáférés és az adatvesztés eredményezheti.
  • Ebben a példában a Terraform egy Hozzáférési kulcs használatával hitelesíti az Azure Storage-fiókot. Éles környezetben javasoljuk, hogy értékelje ki az Azurerm háttérrendszer által támogatott elérhető hitelesítési lehetőségeket , és használja a legbiztonságosabb beállítást a használati esethez.
  • Ebben a példában a nyilvános hálózati hozzáférés engedélyezett ehhez az Azure Storage-fiókhoz. Éles környezetben ajánlott korlátozni a tárfiókhoz való hozzáférést egy tárolási tűzfal, szolgáltatásvégpont vagy privát végpont használatával.

3. Terraform háttérállapot konfigurálása

A háttérállapot konfigurálásához a következő Azure Storage-információkra van szüksége:

  • storage_account_name: Az Azure Storage-fiók neve.
  • container_name: A blobtároló neve.
  • kulcs: A létrehozandó állapottárfájl neve.
  • access_key: A tárelérési kulcs.

Mindegyik érték megadható a Terraform konfigurációs fájljában vagy a parancssorban. Javasoljuk, hogy használjon környezeti változót az access_key értékhez. Környezeti változó használata megakadályozza, hogy a kulcs lemezre legyen írva.

Futtassa a következő parancsokat a tárelérési kulcs lekéréséhez és környezeti változóként való tárolásához:

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

Főbb pontok:

  • Az Azure Storage-fiók hozzáférési kulcsának további védelme érdekében tárolja az Azure Key Vaultban. A környezeti változó ezután az alábbihoz hasonló paranccsal állítható be. Az Azure Key Vaultról további információt az Azure Key Vault dokumentációjában talál.

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

Terraform-konfiguráció létrehozása konfigurációs backend blokktal.

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"
}

Cserélje le <storage_account_name> az Azure Storage-fiók nevére.

Futtassa a következő parancsot a konfiguráció inicializálásához:

terraform init

Futtassa a következő parancsot a konfiguráció futtatásához:

terraform apply

Most már megtalálhatja az állapotfájlt az Azure Storage-blobban.

4. Az állapotzárolás ismertetése

Az Azure Storage-blobok automatikusan zárolva lesznek az állapotot író műveletek előtt. Ez a minta megakadályozza az egyidejű állapotműveleteket, ami sérülést okozhat.

További információ: Állapotzárolás a Terraform dokumentációjában.

A zárolás akkor jelenik meg, ha a blobot az Azure Portalon vagy más Azure management-eszközökön keresztül vizsgálja meg.

Azure blob with lock

5. A inaktív titkosítás ismertetése

Az Azure-blobokban tárolt adatok titkosítva lesznek, mielőtt megmaradnak. Szükség esetén a Terraform lekéri az állapotot a háttérrendszerből, és a helyi memóriában tárolja. Ha ezt a mintát használja, az állapot soha nem lesz megírva a helyi lemezre.

Az Azure Storage-titkosítással kapcsolatos további információkért tekintse meg az Inaktív adatok Azure Storage-szolgáltatás titkosítását.

A Terraform hibaelhárítása az Azure-ban

A Terraform Azure-beli használatakor felmerülő gyakori problémák elhárítása

További lépések