Sobes.tech
Middle+

Mida põhjustab kahe Terraform eksemplari samaaegne käivitamine?

sobes.tech AI

Vastus AI-lt

Race condition (võistluse tingimus) ja võimaliku oleku faili (state file) rikkumise kohta. See on kriitiline, kuna Terraform kasutab oleku faili, et sünkroniseerida tegelik infrastruktuur konfiguratsiooniga. Rikkumine võib põhjustada ebaõiget muudatuste rakendamist, ressursside duplitseerimist või nende kustutamist olenemata planeeritud olekust.

Selle vältimiseks kasutatakse oleku faili lukustamise mehhanismi. Enamik Terraformi taustsüsteeme (näiteks S3, GCS, Artifactory) toetab lukustamise mehhanismi. Kui proovite käivitada teist Terraformi eksemplari, kuni esimene teostab operatsiooni, ootab teine lukustamise eemaldamist või lõpeb veaga.

Näide, kuidas konfigureerida taustsüsteemi lukustamisega (S3 puhul):

terraform {
  backend "s3" {
    bucket         = "my-terraform-state-bucket"
    key            = "path/to/my/terraform.tfstate"
    region         = "us-east-1"
    dynamodb_table = "my-terraform-lock-table" // Lukustamiseks
  }
}

Selles olukorras kasutatakse dynamodb_table hajutatud lukustamise rakendamiseks. Enne Terraformi operatsiooni proovib see luua selle tabeli kirje, mis näitab, et oleku fail on hõivatud. Teine eksemplar, püüdes sellele ligi pääseda, näeb olemasolevat kirjet ja ei saa lukustust saada.

Kui lukustamine ei ole konfigureeritud või kasutatakse kohaliku taustsüsteemi ilma lukustamise toeta, põhjustab samaaegne täitmine ettearvamatu käitumise.

Tagajärjed võivad hõlmata:

  • Oleku faili rikkumine: Andmete kirjutamine kahe protsessi poolt samaaegselt võib viia selle ebajärjekindlusse.
  • Infostruktuuri ebaõige seisund: Mõned muudatused võivad olla rakendatud, teised ignoreeritud või muudetud teise protsessi poolt.
  • Resursside dubleerimine: Terraform võib luua ressursse, mis näivad olevat olemata, kuna teave oleku failis pole veel uuendatud.
  • Resursside kustutamine: Harvadel juhtudel võib Terraform valesti tõlgendada olekut ja kustutada vajalikud ressursid.

Selleks, et vältida selliseid olukordi, kasutage alati lukustamise toega taustsüsteeme ja veenduge, et see on õigesti konfigureeritud. CI/CD pipeline'ides saavutatakse see ülesannete sünkroniseerimise ja tagatisega, et ainult üks Terraformi protsess töötab konkreetse oleku failiga antud ajal.