{"id":10358,"date":"2024-12-01T12:00:00","date_gmt":"2024-12-01T10:00:00","guid":{"rendered":"https:\/\/u-labs.de\/portal\/?p=10358"},"modified":"2024-12-24T19:06:13","modified_gmt":"2024-12-24T17:06:13","slug":"terraform-vserver-hetzner-cloud-automatisiert","status":"publish","type":"post","link":"https:\/\/u-labs.de\/portal\/terraform-vserver-hetzner-cloud-automatisiert\/","title":{"rendered":"Mit Terraform automatisch virtuelle Server in der Hetzner Cloud anlegen"},"content":{"rendered":"<p>Hetzner bietet mit seiner <em>Cloud<\/em> virtuelle Server als lokale, sicherere Alternative gegen\u00fcber den einschl\u00e4gigen Anbietern aus den USA. Wie bei jedem Hoster kann man sich eine VM in der Web-Oberfl\u00e4che erstellen. Doch wer sich mit Automatisierung und damit z.B. Infrastruktur als Code (IaC) besch\u00e4ftigt, m\u00f6chte das gar nicht &#8211; sondern stattdessen die Ausstattung sowie Konfiguration in einer Datei festlegen, womit sich ein fertiges System per Knopfdruck einrichten l\u00e4sst. Das erm\u00f6glicht Terraform und bietet einige Vorteile: Ein identisches Testsystem beispielsweise l\u00e4sst sich mit wenig Aufwand erzeugen. Wie man Terraform zusammen mit der Hetzner Cloud verwendet, zeigt dieser Artikel.<\/p>\n<h2 class=\"wp-block-heading\">Zugriffsschl\u00fcssel f\u00fcr Terraform in der Hetzner Cloud Konsole anlegen<\/h2>\n<p>In der <a href=\"https:\/\/console.hetzner.cloud\" data-type=\"URL\" data-id=\"https:\/\/console.hetzner.cloud\" target=\"_blank\" rel=\"nofollow\">Hetzner Cloud-Konsole<\/a> \u00f6ffnet ihr das gew\u00fcnschte Projekt, f\u00fcr erste Tests gen\u00fcgt auch das standardm\u00e4\u00dfig vorhandene. Links in der Navigation auf den Schl\u00fcssel, der zum Bereich <strong>Sicherheit<\/strong> f\u00fchrt. Der Reiter <strong>API-Tokens<\/strong> erm\u00f6glicht es, einen Authentifizierungsschl\u00fcssel pro externer Anwendung zu erstellen. Dar\u00fcber kann diese auf alle Ressourcen in dem Projekt zugreifen, ihr solltet diesen also wie ein Passwort behandeln. Standardm\u00e4\u00dfig sind keine vorhanden, ihr m\u00fcsst also zun\u00e4chst einen \u00fcber den roten Knopf rechts oben erstellen. Ein Token pro Anwendung ist zu empfehlen. <\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/hetzner-api-token.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"219\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/hetzner-api-token-1024x219.png\" alt=\"\" class=\"wp-image-10363\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/hetzner-api-token-1024x219.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/hetzner-api-token-300x64.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/hetzner-api-token-768x164.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/hetzner-api-token-1536x329.png 1536w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/hetzner-api-token.png 2024w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n<p>Da Terraform ja Ressourcen wie z.B. Server anlegen soll, werden Schreibrechte ben\u00f6tigt. Der Lesende Zugriff macht an dieser Stelle wenig Sinn und ist f\u00fcr andere Anwendungszwecke vorgesehen. Das Beschreibungsfeld ist frei w\u00e4hlbar und dient zur Zuordnung.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/hetzner-neues-token.png\"><img loading=\"lazy\" decoding=\"async\" width=\"511\" height=\"348\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/hetzner-neues-token.png\" alt=\"\" class=\"wp-image-10364\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/hetzner-neues-token.png 511w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/hetzner-neues-token-300x204.png 300w\" sizes=\"auto, (max-width: 511px) 100vw, 511px\" \/><\/a><\/figure>\n<\/div>\n<p>Das generierte Token ben\u00f6tigen wir im n\u00e4chsten Schritt f\u00fcr Terraform.<\/p>\n<h2 class=\"wp-block-heading\">Anlegen eines Servers mit SSH-Schl\u00fcssel per Terraform<\/h2>\n<p>Als einfaches Beispiel f\u00fcr den Einstieg soll ein kleiner virtueller Server erstellt werden. Um bequem und sicher darauf zugreifen zu k\u00f6nnen, hinterlegen wir per Terraform unseren \u00f6ffentlichen SSH-Schl\u00fcssel. Da die IP-Adresse von Hetzner zugeteilt wird, soll uns die Software zudem nach der Erstellung dessen IPv4-Adresse ausgeben. Die verf\u00fcgbaren Server kann man \u00fcber die Web-Oberfl\u00e4che einsehen, nachdem man in einem Projekt oben auf den roten <strong>Server hinzuf\u00fcgen<\/strong> Knopf gedr\u00fcckt hat. Obwohl wir den Server ja eben nicht per Hand zusammen klicken m\u00f6chten, hilft dies f\u00fcr eine \u00dcbersicht der Server. In diesem Beispiel entscheide ich mich f\u00fcr <strong>CPX11<\/strong>, der 0,007 \u20ac pro Stunde bzw. 4,58 \u20ac im gesamten Monat kostet.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/hetzner-x86-cloudserver.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"241\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/hetzner-x86-cloudserver-1024x241.png\" alt=\"\" class=\"wp-image-10367\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/hetzner-x86-cloudserver-1024x241.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/hetzner-x86-cloudserver-300x71.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/hetzner-x86-cloudserver-768x181.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/hetzner-x86-cloudserver.png 1374w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n<p>Das Kommandozeilenwerkzeug <strong>hcloud<\/strong> empfehle ich daf\u00fcr nicht. Es zeigt zwar die Ausstattung der vServer an, jedoch nicht den Preis &#8211; diesen erf\u00e4hrt man nur \u00fcber die Web-Oberfl\u00e4che.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">$ .\/hcloud server-type list\nID   NAME    CORES   CPU TYPE    ARCHITECTURE   MEMORY     DISK     STORAGE TYPE\n1    cx11    1       shared      x86            2.0 GB     20 GB    local\n3    cx21    2       shared      x86            4.0 GB     40 GB    local\n5    cx31    2       shared      x86            8.0 GB     80 GB    local<\/code><\/pre>\n<p>Um mit Terraform zu beginnen, legt ihr zun\u00e4chst einen Ordner als Arbeitsverzeichnis an. Der Code befindet sich in <strong>.tf<\/strong> Dateien mit frei w\u00e4hlbarem Name. Meist gibt es Konventionen und in gr\u00f6\u00dferen Projekten macht es auch durchaus Sinn, die Inhalte auf mehrere Dateien aufzuteilen. F\u00fcr den ersten Einstieg kann darauf verzichtet werden und man arbeitet in einer einzigen Datei, die ich <strong>main.tf<\/strong> genannt habe. <\/p>\n<p>Zuerst wird der Provider geladen. Er ist die Schnittstelle zwischen Terraform und Hetzner. Es gibt auch lokale Provider, die etwa KVM oder andere Virtualisierungsl\u00f6sungen nutzen. Da es sich bei Hetzner um einen Cloudanbieter handelt, wird das zuvor erstellte API-Token ben\u00f6tigt, um Zugriff auf unsere dortigen Projekte zu gew\u00e4hren:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">terraform {\n  required_providers {\n    hcloud = {\n      source = &quot;hetznercloud\/hcloud&quot;\n    }\n  }\n  required_version = &quot;&gt;= 0.38.2&quot;\n}\n\nprovider &quot;hcloud&quot; {\n  token = &quot;xxx&quot;\n}<\/code><\/pre>\n<p>Spannender ist der Hauptteil, in dem wir zuerst eine Ressource f\u00fcr den SSH-Schl\u00fcssel anlegen. Dieser muss auf eurem lokalen System existieren. Ich habe f\u00fcr die Demo-Server einen eigenen Schl\u00fcssel erstellt. Der <strong>test01<\/strong> genannte <strong>hcloud_server<\/strong> bildet unsere VM ab. Sie bekommt einen Name, \u00fcber den wir ihn verwalten k\u00f6nnen und auch \u00fcbers Web wieder finden. <strong>server_type<\/strong> ist das zuvor per Web-Konsole ermittelte Paket, anhand dessen sowohl die gebotene Leistung, als auch der zu zahlende Preis bestimmt werden. Mit <strong>datacenter<\/strong> geben wir den Standort an, <strong>image<\/strong> definiert, welches Betriebssystemabbild der Server installiert bekommt. Wie ihr diese ermittelt und \u00e4ndert, zeigt der folgende Abschnitt noch ausf\u00fchrlicher. <\/p>\n<p>Die zwei unteren <strong>output<\/strong> sind f\u00fcr die Funktion unwichtig. Sie sorgen nur daf\u00fcr, dass uns Terraform nach der Erstellung den Status sowie die \u00f6ffentliche IP-Adresse des Servers ausgibt.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">resource &quot;hcloud_ssh_key&quot; &quot;key&quot; {\n  name = &quot;dani-pc_ansible-nopw&quot;\n  public_key = file(&quot;~\/.ssh\/id_rsa_ansible_nopassword.pub&quot;)\n}\nresource &quot;hcloud_server&quot; &quot;test01&quot; {\n  name = &quot;terraform-testserver01&quot;\n  server_type = &quot;cpx11&quot;\n  datacenter = &quot;fsn1-dc14&quot;\n\n  image = &quot;ubuntu-22.04&quot;\n  ssh_keys = [hcloud_ssh_key.key.id]\n}\n\noutput &quot;ip&quot; {\n    value = hcloud_server.test01.ipv4_address\n}\noutput &quot;status&quot; {\n    value = hcloud_server.test01.status\n}<\/code><\/pre>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">$ terraform init\n\nInitializing the backend...\n\nInitializing provider plugins...\n- Reusing previous version of hetznercloud\/hcloud from the dependency lock file\n- Using previously-installed hetznercloud\/hcloud v1.38.2\n\nTerraform has been successfully initialized!<\/code><\/pre>\n<p>Als n\u00e4chstes k\u00f6nnen wir die \u00c4nderungen mit <strong>terraform apply<\/strong> anwenden. Der Befehl zeigt euch zun\u00e4chst eine \u00dcbersicht, welche Ressourcen (Objekte) angelegt werden, damit man dies \u00fcberpr\u00fcfen kann. Vor allem bei produktiven Systemen ist dies wichtig, um ungewollte \u00c4nderungen zu verhindern. <\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/terraform-apply.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"327\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/terraform-apply-1024x327.jpg\" alt=\"\" class=\"wp-image-10359\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/terraform-apply-1024x327.jpg 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/terraform-apply-300x96.jpg 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/terraform-apply-768x245.jpg 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/terraform-apply.jpg 1390w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n<p>Anschlie\u00dfend durch Eingabe von <strong>yes<\/strong> best\u00e4tigen und Terraform beginnt mit der Erstellung. Die Erstellung einer VM ohne weitere Konfiguration ben\u00f6tigt in meinen Tests rund 14 Sekunden. Abschlie\u00dfend informiert das Werkzeug, dass es zwei Objekte (den virtuellen Server sowie SSH-Schl\u00fcssel) angelegt hat:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/terraform-apply-finished.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"642\" height=\"184\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/terraform-apply-finished.jpg\" alt=\"\" class=\"wp-image-10360\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/terraform-apply-finished.jpg 642w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/terraform-apply-finished-300x86.jpg 300w\" sizes=\"auto, (max-width: 642px) 100vw, 642px\" \/><\/a><\/figure>\n<\/div>\n<p>Au\u00dferdem gibt das Programm unsere vorher definierten Ausgaben an. Sie zeigen uns neben der vom Hoster zugewiesenen IP-Adresse den Status der VM. Da sie l\u00e4uft und bereit ist, l\u00e4sst sich nun eine SSH-Verbindung mit dem zuvor angelegten Schl\u00fcssel erzeugen. Die frisch erstellte Maschine erscheint in der Hetzner-Konsole, wie jeder andere gemietete Server auch, den man beispielsweise von Hand \u00fcber die Web-Oberfl\u00e4che zusammen klickt:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/hetzner-gui_terraform-server.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"122\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/hetzner-gui_terraform-server-1024x122.png\" alt=\"\" class=\"wp-image-10361\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/hetzner-gui_terraform-server-1024x122.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/hetzner-gui_terraform-server-300x36.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/hetzner-gui_terraform-server-768x92.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/04\/hetzner-gui_terraform-server.png 1155w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n<p>Der Status wird in <strong>terraform.tfstate<\/strong> gespeichert. F\u00fchrt man den Befehl ein zweites Mal aus, wird Terraform <em>No changes<\/em> anzeigen und daher nicht zur Best\u00e4tigung auffordern. Gibt es Ver\u00e4nderungen an den .tf Dateien, werden nur Abweichungen zur letzten Konfiguration (z.B. ein hinzugef\u00fcgter SSH-Sch\u00fcssel) erstellt bzw. angepasst.<\/p>\n<h2 class=\"wp-block-heading\">Image und Datacenter ermitteln\/\u00e4ndern<\/h2>\n<h3 class=\"wp-block-heading\">Kommandozeilenwerkzeug hcloud einrichten<\/h3>\n<p>Die verf\u00fcgbaren Lokationen sowie Betriebssystemabbilder lassen sich nicht \u00fcber die Web-Oberfl\u00e4che einsehen &#8211; zumindest nicht in der Form, wie wir es f\u00fcr Terraform ben\u00f6tigen. Hier hilft das <a href=\"https:\/\/github.com\/hetznercloud\/cli\/releases\" data-type=\"URL\" target=\"_blank\" rel=\"nofollow\">hcloud Kommandozeilenwerkzeug<\/a>. Es ist daf\u00fcr gedacht, s\u00e4mtliche Ressourcen in der Hetzner-Cloud \u00fcber die Kommandozeile zu verwalten. Die verwendeten Bezeichnungen sind identisch zu Terraform, da deren Provider schlussendlich die gleiche Schnittstelle aufruft. \u00dcber die oben verlinkten Releases sucht ihr zur Installation nach dem aktuellsten Paket f\u00fcr Linux 386, ladet es herunter und entpackt das Archiv.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">$ wget https:\/\/github.com\/hetznercloud\/cli\/releases\/download\/v1.33.1\/hcloud-linux-386.tar.gz\n$ tar -xf hcloud-linux-386.tar.gz hcloud\n$ .\/hcloud version\nhcloud 1.33.1<\/code><\/pre>\n<p>Damit wird die Bin\u00e4rdatei im aktuellen Arbeitsverzeichnis entpackt und kann mit <strong>.\/hcloud<\/strong> aufgerufen werden. F\u00fcr das erste Testprojekt ist das v\u00f6llig ausreichend, wer \u00f6fter damit arbeitet, verschiebt sie stattdessen lieber in <strong>\/usr\/local\/bin<\/strong>. So ist sie global auf dem gesamten System verf\u00fcgbar und man hat das Werkzeug nicht in den Terraform Quellcode-Dateien. Einmalig muss es in jedem Fall mit dem gew\u00fcnschten Projekt verkn\u00fcpft werden:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">.\/hcloud context create ul-demo<\/code><\/pre>\n<p>Hier ist <strong>ul-demo<\/strong> der selbst gew\u00e4hlte Name des Projektes. Um Zugriff zu erhalten, muss hier nochmals das am Anfang angelegte API-Token angegeben werden.<\/p>\n<h3 class=\"wp-block-heading\">Verf\u00fcgbare Rechenzentren und Abbilder mit hcloud ermitteln<\/h3>\n<p>Ein <strong>datacenter<\/strong> ist ein konkretes Rechenzentrum. Es ist wiederum einer Lokation zugeordnet. In welchem Land sich diese befindet, geht meist aus der Beschreibung hervor. Alternativ kann man sich die Lokationen auch auflisten, dort werden Stadt und Land noch einmal detailliert aufgelistet. Das im Beispiel verwendete <strong>fsn1-dc14<\/strong> befindet sich also in Falkenstein (Deutschland).<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">$ .\/hcloud datacenter list\nID   NAME        DESCRIPTION                   LOCATION\n2    nbg1-dc3    Nuremberg 1 virtual DC 3      nbg1\n3    hel1-dc2    Helsinki 1 virtual DC 2       hel1\n4    fsn1-dc14   Falkenstein 1 virtual DC 14   fsn1\n5    ash-dc1     Ashburn virtual DC 1          ash\n6    hil-dc1     Hillsboro virtual DC 1        hil\n\n.\/hcloud location list\nID   NAME   DESCRIPTION             NETWORK ZONE   COUNTRY   CITY\n1    fsn1   Falkenstein DC Park 1   eu-central     DE        Falkenstein\n2    nbg1   Nuremberg DC Park 1     eu-central     DE        Nuremberg\n3    hel1   Helsinki DC Park 1      eu-central     FI        Helsinki\n4    ash    Ashburn, VA             us-east        US        Ashburn, VA\n5    hil    Hillsboro, OR           us-west        US        Hillsboro, OR<\/code><\/pre>\n<p>Die verf\u00fcgbaren Abbilder lassen sich per <strong>image list<\/strong> ausgeben. Derzeit sind 56 verf\u00fcgbar, aufgrund der L\u00e4nge habe ich die Liste gek\u00fcrzt. M\u00f6glicherweise von euch angelegte Snapshots erscheinen darin \u00fcbrigens ebenfalls.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">$ .\/hcloud image list\nID          TYPE       NAME                 DESCRIPTION                                         ARCHITECTURE   IMAGE SIZE   DISK SIZE   CREATED                         DEPRECATED\n3           system     centos-7             CentOS 7                                            x86            -            5 GB        Mon Jan 15 12:34:45 CET 2018    -\n168855      system     ubuntu-18.04         Ubuntu 18.04                                        x86            -            5 GB        Wed May  2 13:02:30 CEST 2018   -\n5924233     system     debian-10            Debian 10                                           x86            -            5 GB        Mon Jul  8 08:35:48 CEST 2019   -\n...<\/code><\/pre>\n<h3 class=\"wp-block-heading\">Fazit<\/h3>\n<p>Hetzner bietet als deutscher Anbieter ein hinsichtlich Datenschutz und Sicherheit attraktiveres Angebot gegen\u00fcber den gro\u00dfen ausl\u00e4ndischen Cloudanbietern, die \u00fcberwiegend aus den USA stammen. Wie \u00fcblich zahlt man die Flexibilit\u00e4t von Servern in der Cloud mit einem entsprechenden Aufpreis. Wer den bereit ist zu zahlen, kann in Kombination mit Terraform sehr einfach und schnell vollautomatisiert seine Infrastruktur anlegen &#8211; oder eben mit dem entsprechenden Provider lokal nutzen. Denn Terraform selbst ist vielf\u00e4ltig, neben verschiedenen Cloudanbietern werden auch zahlreiche On-Prem Plattformen wie VMWare, Proxmox, KVM und weitere unterst\u00fctzt.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hetzner bietet mit seiner Cloud virtuelle Server als lokale, sicherere Alternative gegen\u00fcber den einschl\u00e4gigen Anbietern aus den USA. Wie bei jedem Hoster kann man sich eine VM in der Web-Oberfl\u00e4che erstellen. Doch wer sich mit Automatisierung und damit z.B. Infrastruktur als Code (IaC) besch\u00e4ftigt, m\u00f6chte das gar nicht &#8211; sondern stattdessen die Ausstattung sowie Konfiguration &#8230;<\/p>\n","protected":false},"author":5,"featured_media":14268,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[391],"tags":[1109],"class_list":["post-10358","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linux-server","tag-terraform"],"_links":{"self":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/10358","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/comments?post=10358"}],"version-history":[{"count":8,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/10358\/revisions"}],"predecessor-version":[{"id":14269,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/10358\/revisions\/14269"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media\/14268"}],"wp:attachment":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media?parent=10358"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/categories?post=10358"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/tags?post=10358"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}