2021
Dezember
23
2021

Imports und Data Sources in Terraform

"Infrastructure as Code" mit Terraform bedeutet normalerweise, dass Sie zuerst Ihre benötigte Infrastruktur in Config-Dateien definieren, und Terraform diese dann anhand Ihrer Vorgaben in der Praxis erstellt. Dank der "Import"-Funktionalität können Sie aber auch bestehende Ressourcen für das weitere Management in Ihr Terraform-Setup aufnehmen. Zudem lassen sich mittels "Data Sources" auch weitere Werte auslesen und verwenden, die sich z.B. auf Ressourcen in separaten Terraform-Setups beziehen.

Viele Projekte sind "gewachsen" statt "geplant"

In der IT starten Projekte häufig klein. Oft wird dieser Ansatz bewusst gewählt, um mit einem möglichst schlanken Vorgehen bestimmte Hypothesen rasch zu validieren und das Projekt in kurzen Iterationen immer wieder anzupassen. Manchmal sind es aber auch vermeintlich kurzlebige Experimente, die sich gut bewähren und über die Zeit zu einem wichtigen Produkt oder Werkzeug wachsen. Bei cloudscale.ch machen wir es Ihnen besonders leicht: Innert kürzester Zeit und mit wenigen Mausklicks stehen Ihre ersten Cloud-Server bereit, und genauso schnell und einfach lassen sie sich bei Bedarf auch ändern.

Die Erstellung und Verwaltung Ihrer Cloud-Infrastruktur mit Terraform unterstützen wir natürlich ebenso. Doch was bei einem etablierten Projekt für Einheitlichkeit und Effizienz sorgt, würde in der Anfangsphase oft nur unnötigen Overhead bedeuten. Wenn das Projekt dann wächst, wird man irgendwann feststellen, dass sich ein Tool wie Terraform doch gelohnt hätte. Oft genug wird man aber nicht von vorn beginnen wollen, und mit der Import-Funktion für bestehende Ressourcen ist das zum Glück auch nicht nötig.

Bestehende Ressourcen in Terraform importieren

Ausgangspunkt für Terraform ist Ihre Konfiguration: hier definieren Sie alle Ressourcen wie z.B. Cloud-Server, die Sie für Ihr Projekt benötigen, sowie deren Eigenschaften. Nach dem Erstellen dieser Ressourcen merkt sich Terraform im sog. "State", welche der Ressourcen in der realen Welt zu welchen Definitionen gehören. Ändern sich Ihre Vorgaben oder die Wirklichkeit, kann Terraform die Abweichung erkennen und bei einem nächsten terraform apply wieder den gewünschten Zustand herstellen.

Um eine bestehende Ressource bei cloudscale.ch in Ihr Terraform-Setup aufzunehmen, definieren Sie sie zunächst ganz normal in Ihrer Terraform-Config. Anstatt sie dann mit terraform apply neu erstellen zu lassen, verknüpfen Sie Ihre Definition mittels terraform import mit der bereits bestehenden Ressource, die Sie über ihre eindeutige ID spezifizieren. Die nötigen Details für jede Ressource finden Sie in der Dokumentation zu unserem Terraform-Provider. Mit einem anschliessenden terraform plan können Sie prüfen, ob Terraform noch Differenzen zwischen der Definition und der tatsächlichen Ressource erkennt. Passen Sie die Definition ggf. weiter an, bis Terraform keinen Änderungsbedarf mehr feststellt.

Eine Besonderheit gibt es bei SSH-Keys: diese werden einem neu erstellten Cloud-Server via Metadata-Server und Config-Drive bereitgestellt und beim ersten Booten durch cloud-init übernommen. Da sich das Handling von SSH-Keys auf diese Erstkonfiguration beschränkt, kann Terraform sie später nicht von unserer API auslesen und in seinem State ablegen. Für das Importieren von Servern bedeutet dies, dass Sie keine SSH-Keys spezifizieren dürfen – ansonsten würde Terraform in jedem Fall einen Änderungsbedarf feststellen, der zum Löschen und Neuerstellen des Servers führt.

Zusätzliche Werte mit Data Sources

Bei cloudscale.ch können Sie fast alle bestehenden Ressourcen wie oben beschrieben in Ihr Terraform-Setup importieren, die derzeit einzige Ausnahme bilden "Custom Images". Es kann jedoch sein, dass ein Import gar nicht gewünscht ist, z.B. wenn die betreffenden Ressourcen bereits Teil eines anderen Terraform-Setups sind. Um trotzdem auf die Attribute solcher Ressourcen zuzugreifen und sie z.B. in der Definition von weiteren Ressourcen zu verwenden, nutzen Sie "Data Sources".

Über Data Sources stehen Ihnen alle wichtigen Eigenschaften Ihrer Cloud-Ressourcen in Terraform zur Verfügung. So können sich via Terraform verwaltete Server beispielsweise am Flavor eines Servers ausserhalb Ihres Terraform-Setups orientieren, oder für Server in Ihrem Terraform-Setup kann definiert werden, dass sie ein Interface in einem manuell verwalteten privaten Netz haben sollen.

Um auf Data Sources zuzugreifen, stehen Ihnen verschiedene "Arguments" zur Verfügung. Nutzen Sie eines oder mehrere davon, um nach Ihrer gesuchten Ressource zu filtern. Die als Argument nutzbaren Werte sowie weitere "Attributes" der Ressource stehen Ihnen dann zur weiteren Verwendung in Ihrem Terraform-Setup zur Verfügung. Auch für die Nutzung von Data Sources finden Sie alle wichtigen Angaben in unserer Dokumentation.


Anders als herkömmliche Konfigurationsmanagement-Systeme erlaubt Terraform ein automatisiertes Setup Ihrer Infrastruktur ausgehend von der sprichwörtlichen grünen Wiese – ohne dass Sie Dinge wie Server oder Netze bereits vorbereiten müssten. In der Praxis entstehen und wachsen jedoch viele Projekte nicht so, wie man das im Rückblick am besten angepackt hätte. Mit Hilfe von Imports und Data Sources können Sie solche "Legacy"-Ressourcen bei cloudscale.ch nun so in Ihr Terraform-Setup integrieren, als wäre es nie anders gewesen. Vermeiden Sie, beim "Aufräumen" von gewachsenen Setups nochmals von vorn zu beginnen, und nutzen Sie Ihre Energie, um Ihr Projekt weiter voran zu bringen!

Für Ordnung ohne Leerlauf,
Ihr cloudscale.ch-Team

Zurück zur Übersicht