Wie man den Terraform-Import-Block zum Importieren von Ressourcen verwendet

Mit Terraform 1.5 und später können Sie den import-Block verwenden, um den Import von Ressourcen direkt in Ihrer Konfiguration zu verwalten. Diese Funktion vereinfacht den Prozess des Imports bestehender Infrastruktur in den Terraform-Zustand und beseitigt die Notwendigkeit eines separaten CLI-Befehls terraform import.

In diesem Artikel erläutern wir den Import-Block und wie Sie ihn zum Import verschiedener Ressourcen verwenden können.

Was ist ein Terraform-Import-Block?

Der Terraform import-Block, eingeführt in Terraform v1.5.0, bietet einen deklarativen Ansatz zum Importieren bestehender Infrastrukturressourcen in eine Terraform-Zustandsdatei. Er ermöglicht es, dass Ressourcenimporte zu einem integralen Bestandteil des Planungsprozesses von Terraform werden – ähnlich wie andere verwaltete Ressourcen – anstatt als direkte Zustandsoperation behandelt zu werden.

Als Ergebnis verbessert der import-Block die Transparenz und stimmt Ressourcenimporte mit den Kernprinzipien von Infrastruktur als Code (IaC) überein, sodass Benutzer ihre Infrastruktur effektiver und vorhersehbarer verwalten können.

Die Syntax für einen import-Block in Terraform lautet wie folgt:

Plain Text

 

  • to: Gibt die Ressourcenadresse in Ihrer Konfiguration an, an der die importierte Ressource zugeordnet wird.
  • id: Definiert den eindeutigen Bezeichner des vorhandenen Ressourcenobjekts in der API des Anbieters. Stellen Sie sicher, dass Ihr Terraform-Anbieter korrekt konfiguriert ist, um auf die zu importierende Ressource zuzugreifen.

Beachten Sie, dass einige Ressourcentypen zusätzliche Anforderungen oder Einschränkungen für den Import haben können.

Import-Block vs. Terraform-Import-Befehl

Ein import-Block in Terraform ermöglicht es Ihnen, Ressourcen direkt in Ihrer Konfigurationsdatei zu definieren und vereinfacht so das Management der vorhandenen Infrastruktur.

Im Gegensatz dazu, wenn der terraform import-Befehl ohne import-Block verwendet wird, verknüpft er eine vorhandene Ressource mit dem Terraform-Status, generiert jedoch nicht automatisch die entsprechende Konfiguration in Ihrem Code. Diese Konfiguration muss manuell hinzugefügt werden. Der Importbefehl ist besonders nützlich für einmalige Imports oder die Umstellung der Infrastruktur auf das Terraform-Management.

Beide Methoden erfordern sorgfältige Handhabung, um die Konsistenz zwischen dem Terraform-Status und der tatsächlichen Infrastruktur sicherzustellen. Import-Blöcke eignen sich im Allgemeinen besser für das laufende Ressourcenmanagement, während der eigenständige Befehl gut für gelegentliche Imports geeignet ist.

Beispiel 1: Verwenden des Terraform-Importblocks zum Importieren eines S3-Buckets

Angenommen, wir haben einen vorhandenen AWS S3 Bucket (my-existing-bucket), den Sie mit Terraform verwalten möchten.

Der resource-Block definiert den S3-Bucket (aws_s3_bucket.example) und das bucket-Attribut legt den Namen des vorhandenen Buckets fest:

Plain Text

 

Der import-Block verknüpft den vorhandenen S3-Bucket mit der Terraform-Ressource.

  • to: Ordnet die importierte Ressource der Adresse des resource-Blocks zu (aws_s3_bucket.example)
  • id: Legt die eindeutige ID des Buckets fest (my-existing-bucket).

Wenn Sie terraform plan ausführen, liest Terraform den import-Block, überprüft den Status des vorhandenen S3-Buckets und zeigt eine Vorschau der Änderungen an, die es in die Zustandsdatei einpflegen wird. Danach, wenn wir terraform apply ausführen, aktualisiert Terraform die Zustandsdatei, um den vorhandenen Bucket einzuschließen und ihn der Ressource aws_s3_bucket.example zuzuordnen.

Nach Ausführen von terraform apply und erfolgreichem Importieren des Ressourcen ist es eine bewährte Praxis, den import-Block zu entfernen. Das Beibehalten verursacht keine Schäden, aber das Entfernen hilft dabei, eine saubere Konfiguration aufrechtzuerhalten und potenzielle Verwirrung bei zukünftiger Zustandsverwaltung zu minimieren.

Beispiel 2: Verwendung des Terraform-Importblocks zum Importieren einer EC2-Instanz

Betrachten wir ein weiteres Beispiel: Wir haben eine vorhandene EC2-Instanz mit der ID i-1234567890abcdef0  und möchten sie unter die Verwaltung von Terraform bringen.

Wir definieren die von Terraform zu verwaltende aws_instance-Ressource im resource-Block. Stellen Sie sicher, dass die Attribute (z. B. ami, instance_type) mit der Konfiguration der vorhandenen Instanz übereinstimmen:

Plain Text

 

Im import-Block:

  • to: Ordnet die Ressource in Ihrer Konfiguration (aws_instance.example) der vorhandenen Ressource zu.
  • id: Gibt die eindeutige ID der EC2-Instanz an, die Sie importieren.

Nachdem Sie den Ressourcenblock und die Importanweisung zu Ihrer Terraform-Konfigurationsdatei hinzugefügt haben, führen Sie terraform plan aus, um die Änderungen vorab anzuzeigen. Anschließend führen Sie terraform apply aus, um die Ressource in die Zustandsdatei von Terraform zu importieren.

Nach dem Import wird Terraform die vorhandene EC2-Instanz verwalten und sicherstellen, dass deren Konfiguration deklarativ bleibt.

Beispiel 3: Verwendung des Terraform-Importblocks zum Importieren einer Azure-Ressourcengruppe

In diesem Beispiel importieren wir eine Azure-Ressourcengruppe.

Wir haben bereits eine Azure-Ressourcengruppe mit dem Namen example-resource-group in der Region Ost USA und möchten sie mit Terraform verwalten.

Zunächst definieren wir im resource-Block die von Terraform verwaltete Ressource azurerm_resource_group:

Plain Text

 

Der Importblock:

  • to: Ordnet die Ressource in Ihrer Konfiguration (azurerm_resource_group.example) der vorhandenen Azure-Ressource zu.
  • id: Gibt die vollständige Azure-Ressourcen-ID der Ressourcengruppe an. Ersetzen Sie <subscription_id> durch Ihre tatsächliche Abonnement-ID.

Fügen Sie die Ressource und den Importblock Ihrer Terraform-Konfigurationsdatei hinzu. Führen Sie anschließend den Befehl terraform plan aus, um die Änderungen zu überprüfen, und führen Sie terraform apply aus, um die Änderungen anzuwenden und die Ressource in die Zustandsdatei von Terraform zu importieren.

Können Sie den Terraform-Importblock bedingt verwenden?

Der Terraform-Importblock ist darauf ausgelegt, deklarativ zu sein und erfordert spezifische Werte, die zur Planungszeit bekannt sind. Daher kann er nicht bedingt in Ihrem Terraform-Code verwendet werden.

Der Importblock unterstützt keine dynamischen Ausdrücke oder Variablen zur Bestimmung der Import-ID basierend auf Bedingungen. Versuche, Konstrukte wie count oder Variablen innerhalb des Importblocks zu verwenden, führen zu Fehlern, da Terraform solche Argumente in diesem Kontext nicht zulässt.

Schlüsselpunkte

Die Einführung des Importblocks in Terraform 1.5+ vereinfacht das Ressourcenmanagement, indem er den direkten Import und die Definition von Ressourcen in Konfigurationsdateien ermöglicht. Er entspricht den IaC-Prinzipien, indem er die Komplexität reduziert und es einfacher macht, vorhandene Infrastruktur in Terraform-Konfigurationen zu integrieren.

Source:
https://dzone.com/articles/how-to-use-terraform-import-block