Sobes.tech
Middle

Welke aanpak gebruikt Terraform bij het opnieuw maken van resources?

sobes.tech AI

Antwoord van AI

Terraform gebruikt een aanpak van "vernietigen en creëren" (destroy and create).

In het geval dat een volledige update of wijziging van een resource nodig is die niet ter plaatse (in-place update) kan worden bijgewerkt, voert Terraform de volgende stappen uit:

  1. Verwijderen van de bestaande resource: Terraform verwijdert de resource uit de infrastructuur door de bijbehorende API van de provider aan te roepen.
  2. Aanmaken van een nieuwe resource: Na succesvolle verwijdering maakt Terraform een nieuw exemplaar van de resource met de nieuwe parameters.

Dit gebeurt wanneer wijzigingen in de Terraform-configuratie een volledige vervanging van de resource vereisen. Bijvoorbeeld, het wijzigen van het subnettype in de cloud (van openbaar naar privé), wat niet wordt ondersteund door een in-place update van de provider. Terraform bepaalt de noodzaak van deze aanpak bij het uitvoeren van het commando terraform plan. In de planuitvoer wordt duidelijk aangegeven dat de resource wordt vernietigd en opnieuw wordt gemaakt.

// Voorbeeld van een resource die kan worden hergecreëerd bij het wijzigen van bepaalde attributen
resource "aws_instance" "example" {
  ami           = "ami-0abcdef1234567890" # Het wijzigen van de AMI vereist meestal hercreatie
  instance_type = "t2.micro"           # Het wijzigen van het instantietype kan ook hercreatie vereisen
  subnet_id     = "subnet-0123456789abcdef0" // Het wijzigen van de Subnet ID vereist bijna altijd hercreatie

  tags = {
    Name = "ExampleInstance"
  }
}

Voorbeeld van de uitvoer van terraform plan die op hercreatie wijst:

Plan: 1 toevoegen, 0 wijzigen, 1 verwijderen.

Terraform zal de volgende acties uitvoeren:

  # aws_instance.example wordt verwijderd
  - resource "aws_instance" "example" {
      - ami                    = "ami-old-id" -> null
      - arn                    = "arn:aws:ec2:..." -> null
      ... (andere attributen)
    }

  # aws_instance.example wordt gemaakt
  + resource "aws_instance" "example" {
      + ami           = "ami-new-id"
      + instance_type = "t2.micro"
      + subnet_id     = "subnet-0123456789abcdef0"
      ... (andere attributen)
    }