Sobes.tech
Middle

Terraform kaynakları yeniden oluştururken hangi yaklaşımı kullanır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Terraform, "yık ve oluştur" (destroy and create) yaklaşımını kullanır.

Gerekli durumlarda, yerinde güncelleme (in-place update) yapılamayan bir kaynağın tamamen güncellenmesi veya değiştirilmesi gerekiyorsa, Terraform aşağıdaki adımları gerçekleştirir:

  1. Mevcut kaynağı yok etme: Terraform, sağlayıcının ilgili API'sini çağırarak kaynağı altyapıdan kaldırır.
  2. Yeni kaynak oluşturma: Başarılı bir silme işleminden sonra, Terraform yeni parametrelerle yeni bir kaynak örneği oluşturur.

Bu, Terraform yapılandırmasındaki değişikliklerin kaynağın tamamen değiştirilmesini gerektirdiği durumlarda olur. Örneğin, buluttaki alt ağ türünü değiştirmek (halka açık yerine özel), bu işlem sağlayıcının yerinde güncellemesiyle desteklenmediğinde gerçekleşir. Terraform, terraform plan komutunu çalıştırırken bu yaklaşımın gerekliliğini belirler. Plan çıktısında, kaynağın yok edilip yeniden oluşturulacağı açıkça belirtilir.

// Belirli özniteliklerin değiştirilmesi durumunda yeniden oluşturulabilecek bir kaynağın örneği
resource "aws_instance" "example" {
  ami           = "ami-0abcdef1234567890" # AMI değişikliği genellikle yeniden oluşturmayı gerektirir
  instance_type = "t2.micro"           # Örnek türü değişikliği de yeniden oluşturmayı gerektirebilir
  subnet_id     = "subnet-0123456789abcdef0" // Subnet ID değişikliği neredeyse her zaman yeniden oluşturmayı gerektirir

  tags = {
    Name = "ExampleInstance"
  }
}

Yeniden oluşturmayı belirten terraform plan çıktısı örneği:

Plan: 1 eklenmek, 0 değiştirilmek, 1 yok edilmek.

Terraform aşağıdaki işlemleri gerçekleştirecektir:

  # aws_instance.example yok edilecek
  - resource "aws_instance" "example" {
      - ami                    = "ami-old-id" -> null
      - arn                    = "arn:aws:ec2:..." -> null
      ... (diğer öznitelikler)
    }

  # aws_instance.example oluşturulacak
  + resource "aws_instance" "example" {
      + ami           = "ami-new-id"
      + instance_type = "t2.micro"
      + subnet_id     = "subnet-0123456789abcdef0"
      ... (diğer öznitelikler)
    }