Sobes.tech
Middle+

İki Terraform nümunəsinin eyni vaxtda işlədilməsi vəziyyətin pozulmasına və ya konfliktə səbəb ola bilər.

sobes.tech Süni İntellekt

AI-dan cavab

Yarış şərti (race condition) və vəziyyət faylının (state file) ehtimal olunan pozulması ilə bağlıdır. Bu, çox vacibdir, çünki Terraform, infrastrukturun faktiki vəziyyətini konfiqurasiya ilə sinxronlaşdırmaq üçün vəziyyət faylından istifadə edir. Pozulma, dəyişikliklərin düzgün tətbiq olunmamasına, resursların təkrarlanmasına və ya onların planlaşdırılmış vəziyyətdən asılı olmayaraq silinməsinə səbəb ola bilər.

Bunun qarşısını almaq üçün, vəziyyət faylının kilidlənməsi mexanizmi istifadə olunur. Terraform-un əksər backendləri (məsələn, S3, GCS, Artifactory) kilidləmə mexanizmini dəstəkləyir. Bir Terraform nümunəsi işləyərkən, ikinci nümunə işləməyə çalışarkən, kilid açılana qədər gözləyir və ya səhvlə sona çatır.

Bloklama ilə backend konfiqurasiyası nümunəsi (S3 üçün):

terraform {
  backend "s3" {
    bucket         = "my-terraform-state-bucket"
    key            = "path/to/my/terraform.tfstate"
    region         = "us-east-1"
    dynamodb_table = "my-terraform-lock-table" // Bloklama üçün istifadə olunur
  }
}

Bu halda, dynamodb_table paylanmış bloklamanı həyata keçirmək üçün istifadə olunur. Əməliyyat həyata keçirilmədən əvvəl, Terraform bu cədvəldə element yaratmağa çalışır, bu da vəziyyət faylının istifadədə olduğunu göstərir. Digər bir proses mövcud elementi görəcək və blok əldə edə bilməyəcək.

Əgər bloklama konfiqurasiya edilməyibsə və ya yerli backend bloklama dəstəyi ilə istifadə olunursa, eyni vaxtda icra qeyri-müəyyən davranışlara səbəb ola bilər.

Nəticələr aşağıdakılar ola bilər:

  • Vəziyyət faylının pozulması: İki proses eyni zamanda məlumat yazarsa, qeyri-müəyyən vəziyyətə gətirib çıxara bilər.
  • İnfrastrukturun düzgün olmayan vəziyyəti: Bəzi dəyişikliklər tətbiq oluna bilər, digərləri isə ikinci proses tərəfindən görməzlikdən gəlinə və ya dəyişdirilə bilər.
  • Resursların təkrarlanması: Terraform, vəziyyət faylındakı məlumatlar yenilənmədiyi üçün mövcud olmayan resursları yarada bilər.
  • Resursların silinməsi: Nadir hallarda, vəziyyəti səhv şərh edərək, Terraform lazım olan resursları silə bilər.

Belə vəziyyətlərin qarşısını almaq üçün, həmişə bloklama dəstəyi olan backend istifadə edilməli və düzgün konfiqurasiya olunmalıdır. CI/CD boru xətlərində, bu, tapşırıqların sinxronizasiyası və yalnız bir Terraform prosesinin müəyyən bir zamanda vəziyyət faylı ilə işləməsini təmin etməklə həyata keçirilir.