Sobes.tech
Middle

Milyen megközelítést alkalmaz a Terraform az erőforrások újraalkotásakor?

sobes.tech MI

Válasz az MI-től

A Terraform az "eldöntés és létrehozás" (destroy and create) megközelítést alkalmazza.

Amennyiben egy erőforrás teljes frissítése vagy módosítása szükséges, amelyet nem lehet helyben (in-place update) végrehajtani, a Terraform a következő lépéseket hajtja végre:

  1. A meglévő erőforrás megsemmisítése: A Terraform eltávolítja az erőforrást az infrastruktúrából a megfelelő API hívásával.
  2. Új erőforrás létrehozása: Sikeres törlés után a Terraform létrehoz egy új példányt az erőforrásból az új paraméterekkel.

Ez akkor fordul elő, amikor a Terraform konfigurációjában végrehajtott változtatások az erőforrás teljes cseréjét igénylik. Például, ha a felhőben a subnet típusát módosítjuk (nyilvánosról privátra), amit a provider helyben történő frissítése nem támogat. A Terraform ezt a megközelítést a terraform plan parancs futtatásakor határozza meg. A terv kimenetében egyértelműen jelezni fogja, hogy az erőforrás megsemmisítésre és újra létrehozásra kerül.

// Példa olyan erőforrásra, amely bizonyos attribútumok módosításakor újra létrehozható
resource "aws_instance" "example" {
  ami           = "ami-0abcdef1234567890" # Az AMI módosítása általában újra létrehozást igényel
  instance_type = "t2.micro"           # Az instance típus módosítása szintén igényelhet újra létrehozást
  subnet_id     = "subnet-0123456789abcdef0" // A Subnet ID módosítása szinte mindig újra létrehozást igényel

  tags = {
    Name = "ExampleInstance"
  }
}

A terraform plan kimenete, amely egy újra létrehozást jelez:

Plan: 1 hozzáadás, 0 módosítás, 1 megsemmisítés.

A Terraform a következő műveleteket hajtja végre:

  # aws_instance.example meg lesz semmisítve
  - resource "aws_instance" "example" {
      - ami                    = "ami-old-id" -> null
      - arn                    = "arn:aws:ec2:..." -> null
      ... (egyéb attribútumok)
    }

  # aws_instance.example létre lesz hozva
  + resource "aws_instance" "example" {
      + ami           = "ami-new-id"
      + instance_type = "t2.micro"
      + subnet_id     = "subnet-0123456789abcdef0"
      ... (egyéb attribútumok)
    }