Sobes.tech
Middle+

Ի՞նչ կբերի երկու Terraform օրինակների միաժամանակ գործարկումը։

sobes.tech AI

Պատասխան AI-ից

Կ Race condition-ի և հնարավոր վիճակի ֆայլի վնասման մասին։ Սա կարևոր է, քանի որ Terraform-ը օգտագործում է վիճակի ֆայլը իրական ենթակառուցվածքը կոնֆիգուրացիայի հետ սինխրոնիզացնելու համար։ Վնասումը կարող է հանգեցնել սխալ փոփոխությունների կիրառման, ռեսուրսների կրկնօրինակում կամ նրանց հեռացման՝ անկախ պլանավորված վիճակից։

Արժե օգտագործել վիճակի ֆայլի արգելափակումը։ Շատ Terraform բեկենդներ (օրինակ՝ S3, GCS, Artifactory) աջակցում են արգելափակման մեխանիզմին։ Երբ փորձում եք գործարկել երկրորդ օրինակն՝ մինչ առաջինը գործարկում է, երկրորդը սպասում է արգելափակման հանմանը կամ ավարտվում է սխալի հետ։

Օրինակ՝ S3 բեկենդի արգելափակման կոնֆիգուրացիա՝

terraform {
  backend "s3" {
    bucket         = "my-terraform-state-bucket"
    key            = "path/to/my/terraform.tfstate"
    region         = "us-east-1"
    dynamodb_table = "my-terraform-lock-table" // Օգտագործվում է արգելափակման համար
  }
}

Այս դեպքում, dynamodb_table-ը օգտագործվում է տարածված արգելափակման իրականացման համար։ Նախքան Terraform-ով գործողություն իրականացնելը, այն փորձում է ստեղծել այս աղյուսակում տարր, որը ծառայում է վիճակի ֆայլի զբաղվածության ցուցանիշի։ Այլ օրինակակը, որը փորձում է մուտք գործել, տեսնում է գոյություն ունեցող տարրն ու չի կարողանում ստանալ արգելափակումը։

Եթե արգելափակումը չի կարգավորվել կամ օգտագործվում է տեղական բեկենդ՝ առանց արգելափակման աջակցությամբ, համաժամանակյա գործարկումը կբերի անսպասելի վարքագծի։

Ավելի վատ հետևանքներ կարող են լինել՝

  • Վնասված վիճակի ֆայլ: Երկու գործընթացների տվյալների գրառումը կարող է հանգեցնել նրա անհամապատասխան վիճակի։
  • Սխալ ենթակառուցվածքի վիճակ: Փոփոխությունների մի մասը կարող է կիրառվել, մյուսը՝ անտեսվել կամ փոխվել երկրորդ գործընթացի կողմից։
  • Ռեսուրսների կրկնօրինակում: Terraform-ը կարող է ստեղծել ռեսուրսներ, որոնք նա համարում է չպատկերացվող, քանի որ վիճակի ֆայլի տեղեկատվությունը դեռ թարմացված չէ։
  • Ռեսուրսների հեռացում: Հաճախակի դեպքերում, սխալ մեկնաբանումից ելնելով, Terraform-ը կարող է հեռացնել անհրաժեշտ ռեսուրսները։

Այսպիսի իրավիճակների կանխարգելման համար միշտ օգտագործեք արգելափակման աջակցությամբ բեկենդ և համոզվեք, որ այն ճիշտ կարգավորված է։ CI/CD պայլայններում դա հասնում է задачերի սինխրոնիզացիայով և այն ապահովելով, որ միայն մեկ Terraform գործընթաց աշխատում է կոնկրետ վիճակի ֆայլի հետ տվյալ պահին։