Sobes.tech
Middle

Jaký přístup používá Terraform při znovuvytváření zdrojů?

sobes.tech AI

Odpověď od AI

Terraform používá přístup "zničit a vytvořit" (destroy and create).

V případě, že je nutná úplná aktualizace nebo změna zdroje, který nelze aktualizovat na místě (in-place update), Terraform provede následující kroky:

  1. Zničení stávajícího zdroje: Terraform odstraní zdroj z infrastruktury voláním příslušného API poskytovatele.
  2. Vytvoření nového zdroje: Po úspěšném odstranění Terraform vytvoří nový exemplář zdroje s novými parametry.

K tomu dochází, když změny v konfiguraci Terraform vyžadují úplnou výměnu zdroje. Například změna typu podsítě v cloudu (z veřejné na soukromou), což není podporováno aktualizací na místě poskytovatelem. Terraform určuje nutnost tohoto přístupu při spuštění příkazu terraform plan. Výstup plánu jasně ukáže, že zdroj bude zničen a znovu vytvořen.

// Příklad zdroje, který může být znovu vytvořen při změně určitých atributů
resource "aws_instance" "example" {
  ami           = "ami-0abcdef1234567890" # Změna AMI obvykle vyžaduje znovuvytvoření
  instance_type = "t2.micro"           # Změna typu instance může také vyžadovat znovuvytvoření
  subnet_id     = "subnet-0123456789abcdef0" // Změna ID podsítě téměř vždy vyžaduje znovuvytvoření

  tags = {
    Name = "ExampleInstance"
  }
}

Příklad výstupu terraform plan, který naznačuje znovuvytvoření:

Plan: 1 přidat, 0 změnit, 1 zničit.

Terraform provede následující akce:

  # aws_instance.example bude zničen
  - resource "aws_instance" "example" {
      - ami                    = "ami-old-id" -> null
      - arn                    = "arn:aws:ec2:..." -> null
      ... (ostatní atributy)
    }

  # aws_instance.example bude vytvořen
  + resource "aws_instance" "example" {
      + ami           = "ami-new-id"
      + instance_type = "t2.micro"
      + subnet_id     = "subnet-0123456789abcdef0"
      ... (ostatní atributy)
    }