İki Terraform örneğinin aynı anda başlatılması, durum çatışmasına veya bozulmasına yol açabilir.
sobes.tech yapay zeka
AI'dan gelen yanıt
Race condition (yarış durumu) ve durum dosyasının (state file) olası bozulmasıyla ilgili. Bu kritik bir durumdur çünkü Terraform, durumu gerçek altyapıyla yapılandırma arasında senkronize etmek için kullanır. Bozulma, değişikliklerin yanlış uygulanmasına, kaynakların çoğaltılmasına veya planlanan durumdan bağımsız olarak silinmesine neden olabilir.
Bunu önlemek için, durum dosyasını kilitleme kullanılır. Terraform’un çoğu arka ucu (örneğin, S3, GCS, Artifactory) kilitleme mekanizmasını destekler. Bir Terraform örneği çalışırken başka bir örneğin çalışmaya başlaması durumunda, ikinci örnek kilidin serbest bırakılmasını bekler veya hata ile sona erer.
Kilitli yapılandırma örneği (S3 için):
terraform {
backend "s3" {
bucket = "my-terraform-state-bucket"
key = "path/to/my/terraform.tfstate"
region = "us-east-1"
dynamodb_table = "my-terraform-lock-table" // Kilitleme için kullanılır
}
}
Bu durumda, dynamodb_table dağıtılmış bir kilitlemeyi uygulamak için kullanılır. Terraform, işlem öncesinde bu tabloda bir öğe oluşturmaya çalışır, bu da durum dosyasının kullanımda olduğunu gösterir. Başka bir örnek erişmeye çalıştığında, mevcut öğeyi görür ve kilidi alamaz.
Kilitleme yapılandırılmadıysa veya yerel bir backend kullanılıyorsa ve kilitleme desteği yoksa, eşzamanlı yürütme öngörülemeyen davranışlara yol açabilir.
Sonuçlar şunları içerebilir:
- Durum dosyasının bozulması: İki işlem aynı anda veri yazarsa, tutarsız bir duruma yol açabilir.
- Entegre altyapı durumunun yanlış olması: Bazı değişiklikler uygulanabilir, diğerleri ikinci işlem tarafından görmezden gelinir veya değiştirilir.
- Kaynakların çoğaltılması: Terraform, durum dosyasındaki bilgiler güncellenmediği için var olmayan kaynaklar oluşturabilir.
- Kaynakların silinmesi: Nadiren, durumu yanlış yorumlayarak Terraform gerekli kaynakları silebilir.
Bu tür durumları önlemek için, her zaman kilitleme desteği olan bir backend kullanılmalı ve doğru yapılandırılmalıdır. CI/CD boru hatlarında, bu, görevlerin senkronizasyonu ve yalnızca bir Terraform işleminin belirli bir zamanda durum dosyasıyla çalışmasını sağlayarak başarılır.