Middle
Jakie podejście stosuje Terraform podczas ponownego tworzenia zasobów?
sobes.tech AI
Odpowiedź od AI
Terraform używa podejścia "zniszcz i stwórz" (destroy and create).
W przypadku konieczności pełnej aktualizacji lub zmiany zasobu, którego nie można zaktualizować na miejscu (in-place update), Terraform wykonuje następujące kroki:
- Zniszczenie istniejącego zasobu: Terraform usuwa zasób z infrastruktury, wywołując odpowiednie API dostawcy.
- Utworzenie nowego zasobu: Po pomyślnym usunięciu, Terraform tworzy nową instancję zasobu z nowymi parametrami.
Dzieje się tak, gdy zmiany w konfiguracji Terraform wymagają pełnej wymiany zasobu. Na przykład zmiana typu podsieci w chmurze (z publicznej na prywatną), co nie jest obsługiwane przez aktualizację in-place dostawcy. Terraform sam określa konieczność takiego podejścia podczas wykonywania polecenia terraform plan. W planie wyraźnie wskaże, że zasób zostanie zniszczony i odtworzony.
// Przykład zasobu, który może zostać odtworzony przy zmianie określonych atrybutów
resource "aws_instance" "example" {
ami = "ami-0abcdef1234567890" # Zmiana AMI zwykle wymaga odtworzenia
instance_type = "t2.micro" # Zmiana typu instancji może również wymagać odtworzenia
subnet_id = "subnet-0123456789abcdef0" // Zmiana ID podsieci prawie zawsze wymaga odtworzenia
tags = {
Name = "ExampleInstance"
}
}
Przykład wyjścia terraform plan, wskazującego na odtworzenie:
Plan: 1 do dodania, 0 do zmiany, 1 do zniszczenia.
Terraform wykona następujące działania:
# aws_instance.example zostanie zniszczony
- resource "aws_instance" "example" {
- ami = "ami-old-id" -> null
- arn = "arn:aws:ec2:..." -> null
... (pozostałe atrybuty)
}
# aws_instance.example zostanie utworzony
+ resource "aws_instance" "example" {
+ ami = "ami-new-id"
+ instance_type = "t2.micro"
+ subnet_id = "subnet-0123456789abcdef0"
... (pozostałe atrybuty)
}