Sobes.tech
Middle

Kokį požiūrį naudoja Terraform kuriant iš naujo išteklius?

sobes.tech AI

Atsakymas iš AI

Terraform naudoja "ištrinti ir sukurti" požiūrį:

Jei reikia visiško atnaujinimo ar pakeitimo ištekliui, kurį neįmanoma atnaujinti vietoje, Terraform atlieka šiuos žingsnius:

  1. Esamo ištekliaus naikinimas: Terraform pašalina išteklių iš infrastruktūros naudodamas atitinkamą API:
  2. Naujo ištekliaus sukūrimas: Sėkmingai pašalinus, Terraform sukuria naują išteklių su naujais parametrais:

Tai vyksta, kai Terraform konfigūracijos pakeitimai reikalauja visiško ištekliaus pakeitimo. Pavyzdžiui, pogrupio tipo keitimas debesyje (viešas į privačią), kuris nėra palaikomas vietoje atnaujinimo. Terraform pats nustato, kada taikomas šis požiūris, vykdydamas terraform plan. Plane bus aiškiai nurodyta, kad išteklius bus sunaikintas ir sukurtas iš naujo:

// Pavyzdinis išteklius, kuris gali būti perkurta keičiant tam tikrus atributus
resource "aws_instance" "example" {
  ami           = "ami-0abcdef1234567890" # AMI keitimas dažnai reikalauja perkurti
  instance_type = "t2.micro"           # Tipo keitimas taip pat gali reikalauti perkurti
  subnet_id     = "subnet-0123456789abcdef0" // Subnet ID keitimas beveik visada reikalauja perkurti

  tags = {
    Name = "ExampleInstance"
  }
}

terraform plan rezultato pavyzdys, rodantis perkurimą:

Plan: 1 to add, 0 to change, 1 to destroy.

Terraform atliks šiuos veiksmus:

  # aws_instance.example bus sunaikintas
  - resource "aws_instance" "example" {
      - ami                    = "ami-old-id" -> null
      - arn                    = "arn:aws:ec2:..." -> null
      ... (kiti atributai)
    }

  # aws_instance.example bus sukurtas iš naujo
  + resource "aws_instance" "example" {
      + ami           = "ami-new-id"
      + instance_type = "t2.micro"
      + subnet_id     = "subnet-0123456789abcdef0"
      ... (kiti atributai)
    }