Aus dem Kurs: Terraform lernen

Terraform-Funktionen im Überblick – Tutorial zu Terraform

Aus dem Kurs: Terraform lernen

Terraform-Funktionen im Überblick

Sobald man sich mit den Grundlagen zu Terraform vertraut gemacht hat, sollte man einen Blick auf die Funktionen innerhalb der HashiCorp Configuration Language werfen. Diese Funktionen können bei vielen vielen Dingen helfen. Ich habe hier für dieses Video einmal die für mich wichtigsten und bedeutendsten Funktionen rausgesucht. In der offiziellen Dokumentation findet man natürlich noch viele viele viele weitere Funktionen. Aber ich denke, an diesem Beispiel hier wird recht schnell klar, welchen Mehrwert Funktionen in so einer Konfiguration bringen können. Eine spannende Funktion dreht sich um das Thema Networking. Wenn wir uns also hier einmal unsere Konfiguration anschauen, dann haben wir hier eine Variable definiert, die den Default-Wert 10.0.0.0/8 bekommt. Und jetzt gibt es Funktionen, die sich hier nennen cidrsubnet und cidrhost. Was machen diese? Die berechnen mir jetzt aus dem gegebenen Wert ein Subnetz, und zwar, indem ich einfach sage, hey, füge bitte 8 Bit zur Subnetz-Maske hinzu und wähle dann an dieser Stelle das erste Netz. Genauso hier über den cidrhost sage ich, hey, hole mir doch bitte aus diesem Netz die fünfte Adresse heraus. Ja, wie sieht das Ganze aus? Können wir einfach wieder mit der terraform console abfragen. Ich habe hier schon ein terraform init vorab ausgeführt. Wir führen hier einmal eine local.subnet aus und dann sehen wir hier, aus unserem 10.0.0.0/8, 8 mit zur Subnetz-Maske hinzufügen, das erste verfügbare Local Subnet wäre die /16, also, die 0./16. Wen jetzt hier mit den Werten noch ein bisschen spielt, ich möchte z.B. das dritte oder das vierte Subnet haben, dann bekomme ich da entsprechend auch meine Subnets. Das hilft natürlich, wenn man in der großen Umgebung ein großes Netz in viele kleine Netze zerschneiden will. Da muss ich nicht jedes Subnetz einzeln angeben, sondern kann mir die über diesen Wert beispielsweise errechnen lassen. Schauen wir uns den zweiten Part an, wir wollen wissen, wie lautet denn die First IP. An den meisten Netzen sind die ersten IPs fürs Routing vorbehalten. Na ja, und dann ist ganz klar, die First IP würde hier einfach 10.0.0.5 lauten. Neben diesen Netzwerk-Funktionen gibt es natürlich auch Funktionen, die sich einfach mit der Manipulation von Texten beschäftigen. Ich habe das Ganze hier mal Strings genannt. Wir haben hier also wieder eine Variable, die heißt Name und der Default-Wert dieses Namens ist Test-RG. Test großgeschrieben mit einem großen T am Anfang, RG großgeschrieben. Und dann sehen wir hier, gibt es Funktionen, wie lower, upper und replace. Ja, wie der Name schon sagt, lower macht einfach den gesamten Namen zu Kleinbuchstaben, upper entsprechend zu Großbuchstaben. Und bei replace geben wir unseren Wert an und sagen dann, welche Zeichen in diesem Wert mit welchen Zeichen ersetzt werden sollen. In meinem Fall möchte ich hier also das Minus aus dem Namen entfernen. Schauen wir uns an, wie das funktioniert. Wir fangen einmal an mit local.name_low, also, sehen wir Name in Kleinbuchstaben, local.name_up und damit kriegen wir den Namen in Großbuchstaben. Und dann schauen wir uns mal noch an den local.new_name und da sehen wir, unser Name ohne den Bindestrich. Wenn wir ein Stück runtergehen, finden wir auch Möglichkeiten, z.B. mit Hashes zu arbeiten. Das ist immer dann auch interessant, wenn wir irgendwelche unique Values erzeugen müssen. Schauen wir uns hier einfach mal an, local.check_md, haben wir die MD5 Checksumme, local.check_sha, haben wir die SHA256 Checksumme. Und das Ganze geht soweit, dass wir hier auch Dinge kombinieren können, es gäbe auch eine concat Funktion und Ähnliches. Ich habe hier mal die Merge-Funktion gewählt, wir haben also einen Tag definiert, der heißt Owner, wir haben einen Tag definiert fürs Environment. Und jetzt wollen wir Tags definieren, indem wir tag01 und tag02 mergen in ein Objekt. Das heißt, wenn wir jetzt hier sagen local.tags, dann sollte ein Objekt dabei rauskommen, was beides enthält. Und das funktioniert an dieser Stelle auch. Wir sehen also, dass diese Funktionen uns sehr helfen können, um unseren Code zu verbessern und zu optimieren.

Inhalt