Sobes.tech
Middle

Ce abordare folosește Terraform la recrearea resurselor?

sobes.tech AI

Răspuns de la AI

Terraform utilizează o abordare de tip "distruge și creează" (destroy and create).

În cazul în care este necesară o actualizare completă sau modificare a unei resurse care nu poate fi actualizată pe loc (actualizare in-place), Terraform efectuează următorii pași:

  1. Distrugerea resursei existente: Terraform elimină resursa din infrastructură apelând API-ul corespunzător al furnizorului.
  2. Crearea unei resurse noi: După eliminarea cu succes, Terraform creează o nouă instanță a resursei cu noii parametri.

Acest lucru se întâmplă atunci când modificările în configurația Terraform necesită înlocuirea completă a resursei. De exemplu, schimbarea tipului de subrețea în cloud (de la public la privat), lucru care nu este suportat de actualizarea in-place a furnizorului. Terraform determină necesitatea acestei abordări la rularea comenzii terraform plan. În ieșirea planului va fi clar indicat că resursa va fi distrusă și recreată.

// Exemplu de resursă care poate fi recreată la schimbarea anumitor atribute
resource "aws_instance" "example" {
  ami           = "ami-0abcdef1234567890" # Schimbarea AMI necesită de obicei recreare
  instance_type = "t2.micro"           # Schimbarea tipului de instanță poate necesita și ea recreare
  subnet_id     = "subnet-0123456789abcdef0" // Schimbarea ID-ului Subnet necesită aproape întotdeauna recreare

  tags = {
    Name = "ExampleInstance"
  }
}

Exemplu de ieșire terraform plan indicând o recreare:

Plan: 1 de adăugat, 0 de modificat, 1 de distrus.

Terraform va efectua următoarele acțiuni:

  # aws_instance.example va fi distrus
  - resource "aws_instance" "example" {
      - ami                    = "ami-old-id" -> null
      - arn                    = "arn:aws:ec2:..." -> null
      ... (alte atribute)
    }

  # aws_instance.example va fi creat
  + resource "aws_instance" "example" {
      + ami           = "ami-new-id"
      + instance_type = "t2.micro"
      + subnet_id     = "subnet-0123456789abcdef0"
      ... (alte atribute)
    }