Welchen Ansatz verwendet Terraform bei der Neuerstellung von Ressourcen?
sobes.tech KI
Antwort von AI
Terraform verwendet einen Ansatz des "Zerstören und Erstellen" (destroy and create).
Falls eine vollständige Aktualisierung oder Änderung einer Ressource erforderlich ist, die nicht vor Ort (in-place update) aktualisiert werden kann, führt Terraform die folgenden Schritte aus:
- Existierende Ressource zerstören: Terraform entfernt die Ressource aus der Infrastruktur durch Aufruf der entsprechenden API des Anbieters.
- Neue Ressource erstellen: Nach erfolgreichem Löschen erstellt Terraform eine neue Instanz der Ressource mit den neuen Parametern.
Dies passiert, wenn Änderungen an der Terraform-Konfiguration eine vollständige Ersetzung der Ressource erfordern. Zum Beispiel, wenn der Subnetztyp in der Cloud geändert wird (öffentlich auf privat), was nicht durch ein in-place Update des Anbieters unterstützt wird. Terraform erkennt die Notwendigkeit dieses Ansatzes bei der Ausführung des Befehls terraform plan. Im Plan-Ausdruck wird deutlich angezeigt, dass die Ressource zerstört und neu erstellt wird.
// Beispiel für eine Ressource, die bei Änderung bestimmter Attribute neu erstellt werden kann
resource "aws_instance" "example" {
ami = "ami-0abcdef1234567890" # Änderung der AMI erfordert in der Regel eine Neuerstellung
instance_type = "t2.micro" # Änderung des Instanztyps kann ebenfalls eine Neuerstellung erfordern
subnet_id = "subnet-0123456789abcdef0" // Änderung der Subnetz-ID erfordert fast immer eine Neuerstellung
tags = {
Name = "ExampleInstance"
}
}
Beispiel für die Ausgabe von terraform plan, die eine Neuerstellung anzeigt:
Plan: 1 to add, 0 to change, 1 to destroy.
Terraform wird die folgenden Aktionen ausführen:
# aws_instance.example wird zerstört
- resource "aws_instance" "example" {
- ami = "ami-old-id" -> null
- arn = "arn:aws:ec2:..." -> null
... (andere Attribute)
}
# aws_instance.example wird erstellt
+ resource "aws_instance" "example" {
+ ami = "ami-new-id"
+ instance_type = "t2.micro"
+ subnet_id = "subnet-0123456789abcdef0"
... (andere Attribute)
}