{"id":93459,"date":"2020-09-07T07:43:22","date_gmt":"2020-09-07T05:43:22","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/opisanie-infrastruktury-v-terraform-na-budushhee-anton-babenko-2018g"},"modified":"2020-09-07T07:43:22","modified_gmt":"2020-09-07T05:43:22","slug":"opisanie-infrastruktury-v-terraform-na-budushhee-anton-babenko-2018g","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/opisanie-infrastruktury-v-terraform-na-budushhee-anton-babenko-2018g","title":{"rendered":"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/7d032c58748e76083b69df4ea38c3285.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Viele kennen und verwenden Terraform in ihrem t\u00e4glichen Arbeitsalltag, doch es haben sich bislang keine Best Practices herausgebildet. Jedes Team muss seine eigenen Ans\u00e4tze und Methoden erfinden.<\/p>\n<p><\/p>\n<p>Ihre Infrastruktur beginnt wahrscheinlich auf ganz einfache Weise: einige Ressourcen + einige Entwickler. Mit der Zeit w\u00e4chst sie in alle m\u00f6glichen Richtungen. Sie finden Wege, Ressourcen in Terraform-Module zu gruppieren, organisieren den Code in Ordnern, und was k\u00f6nnte dabei schon schiefgehen? (bekannte letzte Worte)<\/p>\n<p><\/p>\n<p>Die Zeit vergeht, und Sie haben das Gef\u00fchl, dass Ihre Infrastruktur Ihr neues Haustier ist. Aber warum? Sie sind besorgt \u00fcber unerkl\u00e4rliche Ver\u00e4nderungen in der Infrastruktur, haben Angst, die Infrastruktur und den Code anzutasten \u2014 letztlich verz\u00f6gern Sie neue Funktionen oder verringern die Qualit\u00e4t...<\/p>\n<p><\/p>\n<p>Nach drei Jahren der Verwaltung einer Sammlung von Community-Modulen f\u00fcr Terraform auf Github f\u00fcr AWS und der langfristigen Betreuung von Terraform in der Produktion ist Anton Bab\u0435\u043d\u043a\u043e bereit, seine Erfahrungen zu teilen: wie man TF-Module schreibt, damit es in Zukunft nicht schmerzhaft wird.<\/p>\n<p><\/p>\n<p>Am Ende des Vortrags werden die Teilnehmer besser mit den Prinzipien des Ressourcenmanagements in Terraform, den besten Praktiken im Zusammenhang mit Modulen in Terraform und einigen Prinzipien der kontinuierlichen Integration, die mit dem Infrastrukturmanagement verbunden sind, vertraut sein.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><strong>Haftungsausschluss:<\/strong> <em>Ich m\u00f6chte darauf hinweisen, dass der Vortrag auf November 2018 datiert ist \u2013 es sind bereits 2 Jahre vergangen. Die im Vortrag behandelte Version von Terraform 0.11 wird nicht mehr unterst\u00fctzt. In den letzten 2 Jahren wurden 2 neue Versionen ver\u00f6ffentlicht, die viele Neuerungen, Verbesserungen und \u00c4nderungen mit sich brachten. Bitte beachten Sie dies und vergleichen Sie es mit der Dokumentation.<\/em><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/2387cb9ad6bf95b85b28090c9f18dd63.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Links:<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/terraform-community-modules\">terraform-community-modules<\/a><\/noindex> + <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/terraform-aws-modules\">terraform-aws-modules<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/antonbabenko\/pre-commit-terraform\">antonbabenko\/pre-commit-terraform<\/a><\/noindex> \u2014 automatisches Formatieren von Code und Dokumentation<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/antonbabenko\/terrapin\">antonbabenko\/terrapin<\/a><\/noindex> \u2014 Generator f\u00fcr Terraform-Module (WIP)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/antonbabenko\/modules.tf-lambda\">antonbabenko\/modules.tf-lambda<\/a><\/noindex> \u2014 Generator von Terraform-Code aus visuellen Diagrammen (WIP)<\/li>\n<li>www.terraform-best-practices.com<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@anton.babenko\">medium.com\/@anton.babenko<\/a><\/noindex> (Neue Beitr\u00e4ge finden Sie auf der pers\u00f6nlichen Website www.antonbabenko.com\/)<\/li>\n<li>@antonbabenko \u2014 Twitter und viele verschiedene Slacks<\/li>\n<\/ul>\n<p><\/p>\n<p>Mein Name ist Anton Babenko. Einige von Ihnen haben wahrscheinlich den Code verwendet, den ich geschrieben habe. Ich werde jetzt mit mehr Selbstvertrauen dar\u00fcber sprechen als je zuvor, denn ich habe Zugang zu den Statistiken. <\/p>\n<p><\/p>\n<p>Ich besch\u00e4ftige mich mit Terraform und bin seit 2015 aktives Mitglied und Mitwirkender an zahlreichen Open-Source-Projekten, die mit Terraform und Amazon zu tun haben. <\/p>\n<p><\/p>\n<p>Seitdem habe ich genug Code geschrieben, um das in einer interessanten Form darzustellen. Und genau das werde ich jetzt versuchen zu erkl\u00e4ren.<\/p>\n<p><\/p>\n<p>Ich werde \u00fcber die Feinheiten und spezifischen Aspekte der Arbeit mit Terraform sprechen. Aber eigentlich ist das nicht das Thema f\u00fcr HighLoad. Und jetzt werdet ihr verstehen, warum. <\/p>\n<p><\/p>\n<p>Im Laufe der Zeit habe ich angefangen, Terraform-Module zu schreiben. Benutzer hatten Fragen, ich habe sie umgeschrieben. Dann habe ich verschiedene Tools f\u00fcr die Codeformatierung mit pre-commit Hooks geschrieben usw.<\/p>\n<p><\/p>\n<p>Es gab viele interessante Projekte. Ich mag es, Code-Generatoren zu entwickeln, denn ich liebe es, wenn der Computer immer mehr Arbeit f\u00fcr mich und den Programmierer erledigt. Deshalb arbeite ich jetzt an einem Generator f\u00fcr Terraform-Code aus visuellen Diagrammen. Vielleicht hat einer von euch sie gesehen. Das sind sch\u00f6ne K\u00e4stchen mit Pfeilen. Und ich finde es gro\u00dfartig, wenn man auf die Schaltfl\u00e4che 'Exportieren' klicken kann und all dies als Code erh\u00e4lt. <\/p>\n<p><\/p>\n<p>Ich komme aus der Ukraine. Ich lebe seit vielen Jahren in Norwegen. <\/p>\n<p><\/p>\n<p>Die Informationen f\u00fcr diesen Vortrag stammen auch von Personen, die meinen Namen kennen und mich in sozialen Netzwerken finden. Ich habe fast immer denselben Benutzernamen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/67928ae08257a7ab188322f3cf10a307.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"http:\/\/github.com\/terraform-aws-modules\">https:\/\/github.com\/terraform-aws-modules<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"http:\/\/registry.terraform.io\/namespaces\/terraform-aws-modules\">https:\/\/registry.terraform.io\/namespaces\/terraform-aws-modules<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Wie ich bereits erw\u00e4hnt habe, bin ich der Hauptmaintainer der Terraform AWS-Module, einem der gr\u00f6\u00dften Repositories auf GitHub, wo wir Module f\u00fcr die h\u00e4ufigsten Aufgaben hosten: VPC, Autoscaling, RDS.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/5ed2e9b0638aec2aacb39af72a9dcfc1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Was Sie gerade geh\u00f6rt haben, ist das Allerwichtigste. Wenn Sie Zweifel daran haben, dass Sie verstehen, was Terraform ist, dann ist es besser, Ihre Zeit woanders zu verbringen. Hier wird es viele technische Begriffe geben. Ich habe nicht gescheut, das h\u00f6chstm\u00f6gliche Niveau dieses Vortrags zu verk\u00fcnden. Das bedeutet, dass ich alle m\u00f6glichen Begriffe ohne besondere Erkl\u00e4rungen verwenden kann. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/f6508b864fc723faa4e9860f652ff420.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Terraform wurde 2014 als ein Tool eingef\u00fchrt, das es erm\u00f6glicht, Infrastruktur als Code zu schreiben, zu planen und zu verwalten. Der Schl\u00fcsselbegriff hier ist \u201eInfrastruktur als Code\u201c.<\/p>\n<p><\/p>\n<p>Die gesamte Dokumentation, wie ich bereits sagte, ist auf <noindex><a rel=\"nofollow\" href=\"https:\/\/www.terraform.io\/\">terraform.io<\/a><\/noindex>. Ich hoffe, dass die meisten von Ihnen von dieser Seite wissen und die Dokumentation gelesen haben. Wenn ja, sind Sie am richtigen Ort. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/c1efa6a90819f89ed97a7d65d73eca2c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>So sieht eine typische Terraform-Konfigurationsdatei aus, in der wir zun\u00e4chst einige Variablen definieren. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/1da470ec7aae5750580bcfc39cb52523.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>In diesem Fall definieren wir \u201eaws_region\u201c. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/64bae52f1145d3466b2e144f7507758d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dann beschreiben wir, welche Ressourcen wir erstellen m\u00f6chten. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/f1add85177c56dd1cc2a8ce68a15c35c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir f\u00fchren einige Befehle aus, insbesondere \u201eterraform init\u201c, um Abh\u00e4ngigkeiten und Provider zu laden. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/7e592e62f5666c111e1962f00b9cff9f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und wir f\u00fchren den Befehl \u201eterraform apply\u201c aus, um zu \u00fcberpr\u00fcfen, ob die angegebene Konfiguration mit den Ressourcen \u00fcbereinstimmt, die wir erstellt haben. Da wir zuvor nichts erstellt haben, schl\u00e4gt Terraform vor, diese Ressourcen zu erstellen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/8bac034477578afa59bb64db106cea2b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir best\u00e4tigen dies. So erstellen wir einen Bucket, der seasnail hei\u00dft.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/2b945542cc62066367de1695afb10ec8.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Es gibt auch einige \u00e4hnliche Tools. Viele von euch, die Amazon nutzen, kennen AWS CloudFormation oder Google Cloud Deployment Manager oder Azure Resource Manager. Jedes von ihnen hat eine eigene Implementierung zur Verwaltung von Ressourcen innerhalb dieser Public-Cloud-Anbieter. Terraform ist besonders n\u00fctzlich, da es die Verwaltung von \u00fcber 100 Anbietern erm\u00f6glicht. (Mehr erfahren) <noindex><a rel=\"nofollow\" href=\"https:\/\/www.terraform.io\/docs\/providers\/index.html\">hier<\/a><\/noindex>)<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/c2d976e74a17cf1f16af9f1bc29a3b32.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Die Ziele, die Terraform von Anfang an verfolgt hat:<\/p>\n<p><\/p>\n<ul>\n<li>Terraform bietet eine einheitliche Ansicht von Ressourcen.<\/li>\n<li>Es erm\u00f6glicht die Unterst\u00fctzung aller modernen Plattformen. <\/li>\n<li>Terraform wurde von Anfang an als ein Werkzeug konzipiert, das es erm\u00f6glicht, Infrastruktur sicher und vorhersehbar zu \u00e4ndern. <\/li>\n<\/ul>\n<p><\/p>\n<p>Im Jahr 2014 klang das Wort \u201evorhersehbar\u201c in diesem Kontext sehr ungew\u00f6hnlich. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/262def09715fa0249b5033416fd3c4e5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Terraform ist ein universelles Tool. Wenn Sie eine API haben, k\u00f6nnen Sie alles verwalten:<\/p>\n<p><\/p>\n<ul>\n<li>Sie k\u00f6nnen \u00fcber 120 Anbieter verwenden, um alles zu steuern, was Ihnen beliebt. <\/li>\n<li>Beispielsweise kann Terraform verwendet werden, um den Zugang zu GitHub-Repositories zu beschreiben. <\/li>\n<li>Man kann sogar Bugs in Jira erstellen und schlie\u00dfen.<\/li>\n<li>Es ist m\u00f6glich, New Relic-Metriken zu verwalten. <\/li>\n<li>Sie k\u00f6nnen sogar Dateien in Dropbox erstellen, wenn Ihnen danach ist. <\/li>\n<\/ul>\n<p><\/p>\n<p>All dies wird durch Terraform-Provider erreicht, die eine offene API haben und in Go beschrieben werden k\u00f6nnen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/c6d9023bdb5f622c383f8a61765825f3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Angenommen, Sie haben mit Terraform begonnen, haben etwas Dokumentation auf der Website gelesen, sich ein Video angesehen und angefangen, main.tf zu schreiben, wie ich in den vorherigen Folien gezeigt habe. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/1f7da2e6a9b8171945f8b5783b8132f1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und es l\u00e4uft alles super, Sie haben eine Datei erstellt, die ein VPC erstellt.<\/p>\n<p><\/p>\n<p>Wenn Sie ein VPC erstellen m\u00f6chten, geben Sie ungef\u00e4hr diese 12 Zeilen an. Sie beschreiben, in welcher Region Sie es erstellen m\u00f6chten und welchen CIDR-Block von IP-Adressen Sie verwenden wollen. Das war's. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/ddaf4d884a1e4b2e6b07a713b2154521.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nat\u00fcrlich wird das Projekt schrittweise wachsen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/e0a07abdf139582b50b4f117923cc2a0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und Sie werden dabei eine Menge neuer Dinge hinzuf\u00fcgen: Ressourcen, Datenquellen, Sie werden sich mit neuen Anbietern integrieren, unerwartet m\u00f6chten Sie Terraform verwenden, um die Nutzer in Ihrem GitHub-Konto zu verwalten, usw. Vielleicht m\u00f6chten Sie verschiedene DNS-Anbieter nutzen und alles miteinander kombinieren. Terraform macht das einfach. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/8f5e9ea326e1a923631da3e434810bc4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Betrachten wir folgendes Beispiel.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/8f679abff1c007372dcdf2e611708b7a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sie f\u00fcgen schrittweise ein internet_gateway hinzu, weil Sie m\u00f6chten, dass die Ressourcen aus Ihrem VPC Zugang zum Internet haben. Das ist eine gute Idee. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/6ed039e5d55b76f5189bffecf473b9c0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Am Ende sieht die main.tf so aus:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/ab739b16e0cf3ef88f84ec082020a967.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Das ist der obere Teil der main.tf.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/fea16b3d0ac6701a1503f708e9b17f63.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Das ist der untere Teil der main.tf.<\/p>\n<p><\/p>\n<p>Dann f\u00fcgen Sie ein subnet hinzu. Wenn Sie zu dem Zeitpunkt NAT-Gateways, Routen, Routing-Tabellen und eine Menge anderer Subnets hinzuf\u00fcgen m\u00f6chten, wird Ihre Datei nicht 38 Zeilen haben, sondern etwa 200-300 Zeilen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/9706450edecd5111c8adbaf01c86cdcf.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Das hei\u00dft, Ihre main.tf-Datei w\u00e4chst allm\u00e4hlich. Und ziemlich oft packen die Leute alles in eine Datei. Die main.tf erreicht 10-20 Kb. Stellen Sie sich vor, 10-20 Kb sind Textinhalte. Und alles h\u00e4ngt mit allem zusammen. Mit der Zeit wird es schwierig, damit zu arbeiten. 10-20 Kb sind ein guter Anwendungsfall, es kann auch mehr sein. Und nicht immer halten die Leute das f\u00fcr schlecht. <\/p>\n<p><\/p>\n<p>Wie im herk\u00f6mmlichen Programmieren, also nicht Infrastruktur als Code, sind wir es gewohnt, eine Menge verschiedener Klassen, Pakete, Module und Gruppierungen zu verwenden. Terraform erm\u00f6glicht im Grunde das Gleiche.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/23d406874406406577dd272b4795899d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Der Code w\u00e4chst. <\/li>\n<li>Auch die Abh\u00e4ngigkeiten zwischen den Ressourcen wachsen. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/9fe1a348f4818c6d080a77d862b6232c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und wir haben ein gro\u00dfes, dringendes Bed\u00fcrfnis. Wir erkennen, dass wir so nicht weiterleben k\u00f6nnen. Unser Code wird un\u00fcberschaubar. 10-20 Kb sind nat\u00fcrlich nicht besonders un\u00fcberschaubar, aber das sprechen wir nur \u00fcber den Netzwerkstapel, d. h. Sie haben nur Netzwerkr\u00e4ume hinzugef\u00fcgt. Wir sprechen noch nicht \u00fcber den Application Load Balancer, Deployment von ES-Clustern, Kubernetes usw., woran man leicht noch 100 Kb dran h\u00e4ngen kann. Wenn Sie all dies schreiben, werden Sie sehr schnell feststellen, dass Terraform Terraform-Module bereitstellt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/15187efbc9d48d1d2069c69b4ef1a491.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Terraform-Module sind eine eigenst\u00e4ndige Terraform-Konfiguration, die als Gruppe verwaltet wird. Das ist alles, was Sie \u00fcber Terraform-Module wissen m\u00fcssen. Sie sind nicht intelligent, sie erm\u00f6glichen Ihnen keine komplexen Verbindungen in Abh\u00e4ngigkeit von irgendetwas. Das liegt ganz in der Verantwortung der Entwickler. Das hei\u00dft, es ist einfach eine Terraform-Konfiguration, die Sie bereits geschrieben haben. Und man kann sie einfach als Gruppe aufrufen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/2c4489dc6da5a4c1f32ffea5218a902a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>So versuchen wir zu verstehen, wie wir unseren Code von 10-20-30 Kb optimieren k\u00f6nnen. Allm\u00e4hlich erkennen wir, dass wir bestimmte Module verwenden m\u00fcssen. <\/p>\n<p><\/p>\n<p>Der erste Typ von Modulen, der vorkommt, sind Ressourcenmodule. Sie verstehen nichts \u00fcber Ihre Infrastruktur, Ihr Gesch\u00e4ft, wo und unter welchen Bedingungen sie arbeiten. Das sind genau die Module, die ich zusammen mit der Open-Source-Community verwalte und die wir als die grundlegendsten Bausteine f\u00fcr Ihre Infrastruktur herausstellen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/3ee9bff297b410615d6f869bd7c05285.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ein Beispiel f\u00fcr ein Ressourcenmodul.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/db6ed597ba534cb2cde077049e73f51b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wenn wir ein Ressourcenmodul aufrufen, geben wir an, von welchem Pfad wir dessen Inhalt laden m\u00fcssen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/c4d8a9608644392c64b2171b25d83ad9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir geben an, welche Version wir laden m\u00f6chten.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/713359b956e80d43a0ea4f590959739a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir \u00fcbergeben dort eine Menge Argumente. Und das war's. Das ist alles, was wir wissen m\u00fcssen, wenn wir dieses Modul verwenden. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/8987d97aabb77238af296776588ba1a7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Viele denken, dass die Verwendung der neuesten Version alles stabil macht. Aber das ist nicht der Fall. Die Infrastruktur muss versioniert sein; wir m\u00fcssen klar beantworten, welche Version bei der Bereitstellung des jeweiligen Moduls verwendet wurde. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/bb4be602dd32b89285883643a3df2db5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hier ist der Code, der sich innerhalb dieses Moduls befindet. Modul security-group. Hier scrollt es bis zur 640. Zeile. Die Erstellung einer security-group-Ressource in Amazon in allen m\u00f6glichen Konfigurationen ist eine ziemlich komplexe Aufgabe. Es reicht nicht aus, einfach eine security-group zu erstellen und zu sagen, welche Regeln ihr \u00fcbergeben werden sollen. Das w\u00e4re viel zu einfach. Innerhalb von Amazon gibt es Millionen verschiedener Einschr\u00e4nkungen. Zum Beispiel, wenn Sie <strong>VPC-Endpunkten, Pr\u00e4fixlisten, verschiedenen APIs<\/strong> und alles zu versuchen, damit zu kombinieren, erlaubt Terraform Ihnen das nicht. Und auch die Amazon API erlaubt es nicht. Deshalb muss diese gesamte komplizierte Logik in ein Modul versteckt werden, und dem Benutzer muss ein Code pr\u00e4sentiert werden, der nur so aussieht. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/e163f0678577325b3629980ec55717f5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Der Benutzer muss nicht wissen, wie es intern funktioniert. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/36188061b996aa7e559bdfc3afada4a9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Der zweite Modultyp besteht aus Ressourcenmodulen und l\u00f6st bereits Aufgaben, die besser f\u00fcr Ihr Unternehmen geeignet sind. Oft handelt es sich um einen Ort, der eine Erweiterung f\u00fcr Terraform darstellt und bestimmte feste Werte f\u00fcr Tags und Unternehmensstandards festlegt. Zudem k\u00f6nnen dort Funktionen hinzugef\u00fcgt werden, die derzeit nicht mit Terraform verwendet werden k\u00f6nnen. Das ist genau jetzt der Fall. Aktuell ist Version 0.11, die bald in der Vergangenheit liegen wird. Dennoch sind Preprozessoren, jsonnet, cookiecutter und viele andere Dinge die unterst\u00fctzenden Mechanismen, die f\u00fcr eine vollst\u00e4ndige Nutzung erforderlich sind. <\/p>\n<p><\/p>\n<p>Ich werde Ihnen nun einige Beispiele daf\u00fcr zeigen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/96764177d72cd9835f1a007eccedcc05.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Das Infrastrukturmodul wird genau auf die gleiche Weise aufgerufen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/0e036ea86279651179f18d0c5394442f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Die Quelle, von der der Inhalt geladen werden soll, wird angegeben.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/d33adefbe446554c952d15f8883b73e2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Eine Reihe von Werten wird \u00fcbergeben, die in dieses Modul gehen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/a9bd3ed71cdb0524faec83cb942e4e3d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Innerhalb dieses Moduls werden dann mehrere Ressourcenmodule zum Erstellen von VPC, Application Load Balancer oder zum Erstellen von Sicherheitsgruppen oder f\u00fcr einen Elastic Container Service-Cluster aufgerufen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/df6955fc8f2fe94eac3226966faf987c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Es gibt zwei Arten von Modulen. Das ist wichtig zu verstehen, denn die meisten Informationen, die ich in diesem Vortrag zusammengefasst habe, sind nicht in der Dokumentation aufgef\u00fchrt. <\/p>\n<p><\/p>\n<p>Die Dokumentation in Terraform ist momentan ziemlich problematisch, da sie lediglich sagt, dass es solche Funktionen gibt, die Sie verwenden k\u00f6nnen. Sie erkl\u00e4rt jedoch nicht, wie diese Funktionen genutzt werden sollten oder warum sie besser sind. Daher schreiben viele Leute etwas, mit dem sie sp\u00e4ter nicht leben k\u00f6nnen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/619e1bd78d84d966c03d5eedab6671c8.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lassen Sie uns nun ansehen, wie man diese Module schreibt. Danach schauen wir, wie man sie aufruft und wie man mit dem Code arbeitet. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/7bf5015edc75c0a15a8915439a5fc56b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Terraform Registry \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/registry.terraform.io\/\">https:\/\/registry.terraform.io\/<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Tipp Nr. 0 \u2013 schreiben Sie keine Ressourcennutzer-Module. Die meisten dieser Module wurden bereits f\u00fcr Sie geschrieben. Wie ich sagte, sie sind Open Source, sie enthalten keine Ihrer Gesch\u00e4ftslogiken, und es sind keine fest codierten Werte f\u00fcr IP-Adressen, Passw\u00f6rter usw. enthalten. Ein Modul ist sehr flexibel. Und es wurde h\u00f6chstwahrscheinlich bereits geschrieben. F\u00fcr Amazon-Ressourcen gibt es viele Module. Etwa 650. Und die meisten von ihnen sind von guter Qualit\u00e4t. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/b68827405b2202e597852905c6475bc0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>In diesem Beispiel kommt jemand zu Ihnen und sagt: \u201eIch m\u00f6chte in der Lage sein, eine Datenbank zu verwalten. Erstelle ein Modul, damit ich eine Datenbank anlegen kann.\u201c Die Person kennt die Details der Implementierung weder von Amazon noch von Terraform. Sie sagt einfach: \u201eIch m\u00f6chte MSSQL verwalten.\u201c Das hei\u00dft, wir gehen davon aus, dass sie unser Modul aufruft, den Typ des Engines \u00fcbergibt und die Zeitzone angibt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/8d3892958b9067c1996b7c9115b97f08.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Die Person sollte nicht wissen, dass wir innerhalb dieses Moduls zwei verschiedene Ressourcen erstellen werden: eine f\u00fcr MSSQL und die andere f\u00fcr alles andere, nur weil man in Terraform 0.11 keine optionalen Zeitzonenwerte angeben kann. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/612b070a57244ac65d4ae6fdce78f218.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Am Ende dieses Moduls wird die Person einfach die Adresse abrufen k\u00f6nnen. Sie wird nicht wissen, von welcher Datenbank oder von welcher Ressource wir das alles im Hintergrund erstellen. Dies ist ein sehr wichtiger Aspekt der Verschleierung. Und das gilt nicht nur f\u00fcr die Module, die \u00f6ffentlich im Open Source bereitstehen, sondern auch f\u00fcr die Module, die Sie innerhalb Ihrer eigenen Projekte und Teams schreiben werden. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/bebb8510b0137faf16b4f02320eb69c0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dies ist das zweite Argument, das ziemlich wichtig ist, wenn Sie Terraform schon eine Weile verwenden. Sie haben ein Repository, in dem Sie alle Ihre Terraform-Module f\u00fcr Ihr Unternehmen ablegen. Es ist durchaus normal, dass dieses Projekt im Laufe der Zeit auf etwa ein bis zwei Megabyte anw\u00e4chst. Das ist in Ordnung. <\/p>\n<p><\/p>\n<p>Das Problem liegt allerdings darin, wie Terraform diese Module aufruft. Wenn Sie beispielsweise ein Modul aufrufen, um jeden einzelnen Benutzer zu erstellen, l\u00e4dt Terraform zun\u00e4chst das gesamte Repository und geht dann in den Ordner, in dem dieses spezielle Modul gespeichert ist. So laden Sie jedes Mal ein Megabyte herunter. Wenn Sie 100 oder 200 Benutzer verwalten, laden Sie also 100 oder 200 Megabyte herunter, bevor Sie in diesen Ordner wechseln. Daher m\u00f6chten Sie nat\u00fcrlich nicht jedes Mal, wenn Sie \u00abTerraform init\u00bb dr\u00fccken, eine Menge Daten herunterladen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/eee24c4c8628cf1aaf06d2f9fa88d410.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mbtproject\/mbt\">https:\/\/github.com\/mbtproject\/mbt<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Es gibt zwei L\u00f6sungen f\u00fcr dieses Problem. Die erste besteht darin, relative Pfade zu verwenden. So geben Sie im Code an, dass der Ordner lokal ist (.\/). Und bevor Sie etwas ausf\u00fchren, klonen Sie dieses Repository lokal mit Git. Damit machen Sie dies einmal. <\/p>\n<p><\/p>\n<p>Nat\u00fcrlich gibt es viele Nachteile. Zum Beispiel kann man kein Versioning verwenden. Damit muss man manchmal leben. <\/p>\n<p><\/p>\n<p>Die zweite L\u00f6sung. Wenn Sie viele Submodule haben und bereits \u00fcber eine etablierte Pipeline verf\u00fcgen, gibt es das Projekt MBT, das es erm\u00f6glicht, aus einem Monorepo viele verschiedene Pakete zu erstellen und diese auf S3 hochzuladen. Das ist eine sehr gute Methode. So wird die Datei iam-user-1.0.0.zip nur 1 Kb gro\u00df sein, weil der Code zur Erstellung dieses Ressourcen sehr klein ist. Und es wird viel schneller funktionieren. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/1402d267a4c4b7e912f4d00325e68244.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lassen Sie uns dar\u00fcber sprechen, was in Modulen nicht verwendet werden kann. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/8fbd9e6d78e72ee2fe30562453957d77.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Warum ist es b\u00f6se, in Modulen zu arbeiten? Das Schlimmste ist das Assume User. Assume User ist eine Art der Authentifizierung beim Provider, die von verschiedenen Personen genutzt werden kann. Zum Beispiel werden wir alle eine Rolle annehmen. Das bedeutet, dass Terraform diese Rolle akzeptiert und dann mit dieser Rolle die weiteren Aktionen ausf\u00fchrt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/c14e84f0bd4f8019c1cd375268ce4416.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Das Problem ist, dass wenn Vasja sich auf eine Weise mit Amazon verbindet, zum Beispiel standardm\u00e4\u00dfig \u00fcber Umgebungsvariablen, und Petja seinen geheimen shared key verwenden m\u00f6chte, der sich an einem geheimen Ort befindet, dann kann man in Terraform nicht beides gleichzeitig angeben. Um zu verhindern, dass sie leiden, sollte dieser Block nicht im Modul angegeben werden. Das muss auf einer h\u00f6heren Ebene geschehen. Das hei\u00dft, wir haben ein Ressourcenmodul, ein Infrastrukturmodul und eine dar\u00fcberliegende Komposition. Und irgendwo weiter oben sollte das angegeben werden. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/bd5ec774dfd9325c5f88b14925ed637b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Das zweite Problem liegt im Provisioner. Hier ist das Problem nicht ganz trivial, denn wenn du den Code schreibst und er f\u00fcr dich funktioniert, k\u00f6nntest du denken, dass du ihn nicht \u00e4ndern musst, wenn er funktioniert. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/4859e030d6fc22201757d6f372366261.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Das Problem besteht darin, dass du nicht immer kontrollierst, wann dieser Provisioner konkret ausgef\u00fchrt wird, erstens. Und zweitens kontrollierst du nicht, was aws ec2 bedeutet, das hei\u00dft, wir sprechen hier \u00fcber Linux oder Windows. Daher kannst du nichts schreiben, das in verschiedenen Betriebssystemen oder f\u00fcr unterschiedliche Anwendungsf\u00e4lle gleich funktioniert.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/98958fc032bcbc4bace86a6d6e74fb62.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Das am h\u00e4ufigsten genannte Beispiel, das auch in der offiziellen Dokumentation aufgef\u00fchrt ist, ist, dass wenn Sie aws_instance schreiben und eine Menge Argumente angeben, es nichts Schlimmes daran gibt, wenn Sie dort auch den Provisioner 'local-exec' angeben und Ihr ansible-playbook ausf\u00fchren.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/50d8055c66969147af3e92195b818d6e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tats\u00e4chlich \u2013 ja, es ist nichts Schlimmes daran. Aber schon bald werden Sie erkennen, dass diese local-exec-Funktion zum Beispiel in launch_configuration nicht existiert. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/47f5b5ef6433a0e2853a969ddb423883.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und wenn Sie launch_configuration verwenden und aus einer Instance eine Autoscaling-Gruppe erstellen m\u00f6chten, gibt es in launch_configuration kein Konzept von 'Provisioner'. Dort gibt es das Konzept von 'User Data'.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/eb45a5b16b0c90d5e200b4adc487d38a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Daher ist die Verwendung von User Data eine universellere L\u00f6sung. Diese wird entweder direkt auf der Instance ausgef\u00fchrt, wenn die Instance gestartet wird, oder in denselben User Data, wenn die Autoscaling-Gruppe dieses launch_configuration verwendet.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/307d665dd12a2bf67deebf3f985c62f2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wenn Sie dennoch den Provisioner ausf\u00fchren m\u00f6chten, weil er ein Verbindungsst\u00fcck ist, das ben\u00f6tigt wird, wenn eine Ressource erstellt wird und dann Ihr Provisioner, Ihr Befehl ausgef\u00fchrt werden muss. Solcher Situationen gibt es viele. <\/p>\n<p><\/p>\n<p>Die beste Ressource daf\u00fcr nennt sich null_resource. Null_resource ist eine fiktive Ressource, die in Wirklichkeit niemals erstellt wird. Sie greift auf nichts zu, es gibt keine API und kein Autoscaling. Aber sie erm\u00f6glicht es, den Zeitpunkt des Befehlsaufrufs zu steuern. In diesem Fall wird der Befehl w\u00e4hrend der Erstellung aufgerufen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/2b7d5fcfee963eb2366f6e9fb7be188b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Link <noindex><a rel=\"nofollow\" href=\"http:\/\/bit.ly\/common-traits-in-terraform-modules\">http:\/\/bit.ly\/common-traits-in-terraform-modules<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Es gibt mehrere Anzeichen. Ich werde nicht auf alle Anzeichen im Detail eingehen. Es gibt einen Artikel dar\u00fcber. Aber wenn Sie mit Terraform gearbeitet oder fremde Module verwendet haben, ist Ihnen wahrscheinlich aufgefallen, dass viele Module, wie auch der gr\u00f6\u00dfte Teil des Codes im Open Source, von Leuten f\u00fcr ihre eigenen Bed\u00fcrfnisse geschrieben werden. Eine Person hat es geschrieben, um ihr Problem zu l\u00f6sen. Sie hat es auf GitHub gepostet, damit es weiterlebt. Es wird weiterleben, aber wenn es keine Dokumentation und Beispiele gibt, wird es niemand nutzen. Und wenn es keine Funktionalit\u00e4t bietet, die mehr als nur das spezifische Problem l\u00f6st, wird es ebenfalls niemand nutzen. Es gibt sehr viele M\u00f6glichkeiten, Benutzer zu verlieren. <\/p>\n<p><\/p>\n<p>Wenn Sie etwas schreiben m\u00f6chten, das von Menschen genutzt wird, empfehle ich, diesen Anzeichen zu folgen. <\/p>\n<p><\/p>\n<p>Das sind:<\/p>\n<p><\/p>\n<ul>\n<li>Dokumentation und Beispiele.<\/li>\n<li>Vollst\u00e4ndige Funktionalit\u00e4t.<\/li>\n<li>Sinnvolle Standardwerte.<\/li>\n<li>Sauberer Code.<\/li>\n<li>Tests.<\/li>\n<\/ul>\n<p><\/p>\n<p>Tests sind eine besondere Angelegenheit, weil sie ziemlich schwierig zu schreiben sind. Ich vertraue mehr auf Dokumentation und Beispiele. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/835b3e4152a8ce5af46a0ea77187e13c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Also, wir haben uns angeschaut, wie man Module schreibt. Es gibt zwei Argumente. Das erste, das am wichtigsten ist: Schreibe nicht, wenn du es vermeiden kannst, denn viele Menschen haben diese Aufgaben bereits vorher erledigt. Und zweitens, wenn du es doch tust, versuche, in den Modulen keine Provider und Provisioner zu verwenden. <\/p>\n<p><\/p>\n<p>Das ist der graue Bereich der Dokumentation. Du k\u00f6nntest jetzt denken: \u201eDas ist nicht ganz klar. Nicht \u00fcberzeugt.\u201c Aber lass uns in sechs Monaten darauf zur\u00fcckblicken. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/ff3612aec24633ccaae8aefc24d5b04a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jetzt sprechen wir dar\u00fcber, wie man diese Module aufruft. <\/p>\n<p><\/p>\n<p>Wir verstehen, dass unser Code im Laufe der Zeit w\u00e4chst. Wir haben nicht mehr nur eine Datei, sondern bereits 20 Dateien. Alle liegen in einem Ordner. Oder vielleicht in f\u00fcnf Ordnern. Vielleicht beginnen wir, sie nach Regionen oder Komponenten zu sortieren. Dann merken wir, dass wir nun Ans\u00e4tze f\u00fcr Synchronisation und Orchestrierung ben\u00f6tigen. Das hei\u00dft, wir m\u00fcssen verstehen, was zu tun ist, wenn wir Netzwerkressourcen ge\u00e4ndert haben, was wir mit unseren anderen Ressourcen tun sollen, wie wir diese Abh\u00e4ngigkeiten aufrufen usw. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/14cc354574cf2960530d7c40fb678b52.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Es gibt zwei Extreme. Das erste Extreme ist die All-in-One-L\u00f6sung. Wir haben eine Master-Datei. Bis vor einiger Zeit war dies die offizielle Best Practice auf der Terraform-Website.<\/p>\n<p><\/p>\n<p>Aber jetzt ist es als veraltet markiert und entfernt worden. Im Lauf der Zeit hat die Terraform-Community erkannt, dass dies bei weitem nicht die Best Practice ist, da Menschen das Projekt in verschiedenen Formen nutzen. Das f\u00fchrt zu Problemen. Zum Beispiel, wenn wir alle Abh\u00e4ngigkeiten an einem Ort angeben. Es gibt Situationen, in denen wir 'Terraform plan' ausf\u00fchren und w\u00e4hrend Terraform den Status aller Ressourcen aktualisiert, kann eine Menge Zeit vergehen. <\/p>\n<p><\/p>\n<p>Eine Menge Zeit sind beispielsweise 5 Minuten. F\u00fcr manche ist das eine Menge Zeit. Ich habe F\u00e4lle gesehen, in denen es 15 Minuten dauerte. 15 Minuten lang hat das AWS-API angefragt, um herauszufinden, wie es um den Status jeder Ressource steht. Das ist ein sehr gro\u00dfer Bereich. <\/p>\n<p><\/p>\n<p>Und selbstverst\u00e4ndlich tritt ein verwandtes Problem auf, wenn Sie etwas an einer Stelle \u00e4ndern m\u00f6chten, dann 15 Minuten gewartet haben und Ihnen eine Vielzahl von \u00c4nderungen angezeigt wird. Sie haben aufgegeben, \u00bbJa\u00ab geschrieben und es ging etwas schief. Das ist ein ganz reales Beispiel. Terraform versucht nicht, Sie von Problemen abzuschotten. Das hei\u00dft, schreiben Sie, was Sie wollen. Auftretende Probleme \u2013 das sind Ihre Probleme. Bisher versucht Terraform 0.11 nicht, Ihnen zu helfen. In 0.12 gibt es einige interessante Punkte, die es Ihnen erm\u00f6glichen zu sagen: \u201eVasya, willst du das wirklich? Denk nochmal dar\u00fcber nach.\u201c <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/727b827aa9e31043e4e037e0c42a9748.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Der zweite Weg besteht darin, diesen Bereich zu reduzieren, das hei\u00dft, man kann weniger Aufrufe von einem Ort zu einem anderen binden. <\/p>\n<p><\/p>\n<p>Das einzige Problem ist, dass man mehr Code schreiben muss, das hei\u00dft, man muss Variablen in vielen Dateien beschreiben und aktualisieren. Manche m\u00f6gen das nicht. F\u00fcr mich ist das in Ordnung. Andere denken: \u201eWarum sollte ich das an verschiedenen Orten schreiben, ich k\u00f6nnte alles an einem Ort erledigen.\u201c Man kann es auch so machen, aber das ist die zweite Extreme.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/f9de423769b338726faefba886bee419.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wo lebt das alles an einem Ort? Eine, zwei, drei Personen, das hei\u00dft, irgendjemand nutzt es. <\/p>\n<p><\/p>\n<p>Wer ruft konkret eine einzelnen Komponente, ein Block oder ein Infrastrukturmodul auf? F\u00fcnf bis sieben Personen. Das ist gro\u00dfartig. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/0339f2fcf9c08ce6a70bc359bb1950ec.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Die h\u00e4ufigste Antwort ist irgendwo dazwischen. Wenn das Projekt gro\u00df ist, haben Sie h\u00e4ufig die Situation, dass keine der L\u00f6sungen geeignet ist und dort nicht alles funktioniert, sodass es eine Mischung gibt. Das ist nichts Schlechtes, solange Sie verstehen, dass sowohl das eine als auch das andere Vorteile haben. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/bf6eaf1416bd5445ca90f2cbcf0792f1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wenn sich etwas im VPC-Stack ge\u00e4ndert hat und Sie diese \u00c4nderungen in EC2 anwenden m\u00f6chten, d. h. Sie m\u00f6chten die Autoscaling-Gruppe aktualisieren, weil Sie ein neues Subnetz hinzugef\u00fcgt haben, nenne ich solche Abh\u00e4ngigkeiten Orchestrierung. Gibt es daf\u00fcr L\u00f6sungen: Wer nutzt was? <\/p>\n<p><\/p>\n<p>Ich kann Ihnen sagen, welche L\u00f6sungen es gibt. Man kann Terraform verwenden, um Magie zu vollbringen, oder Makefiles nutzen, um Terraform zu verwenden. Und man kann \u00fcberpr\u00fcfen, ob sich dort etwas ge\u00e4ndert hat, dass man es hier starten kann. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/8ff0f7f7e1fc37572749aeb1dce6e2f0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wie finden Sie diese L\u00f6sung? Glaubt jemand, dass es eine gro\u00dfartige L\u00f6sung ist? Ich sehe ein L\u00e4cheln, da sind wohl Zweifel aufgekommen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/29a2d3e1909af1c30ab4af2647d5bca2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nat\u00fcrlich, wiederholen Sie das nicht zu Hause. Terraform wurde nie entwickelt, um aus Terraform heraus ausgef\u00fchrt zu werden.<\/p>\n<p><\/p>\n<p>Jemand hat mir in einem Vortrag gesagt: \u201eNein, das wird nicht funktionieren.\u201c Das Ding ist, dass es auch nicht so funktionieren sollte. Auch wenn es beeindruckend aussieht, wenn du Terraform mit Terraform startest und da noch Terraform drin ist, solltest du das nicht so machen. Terraform sollte immer ganz einfach gestartet werden.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/1ae74b01e8cb8f7bab8bc5065b65e6c7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/gruntwork-io\/terragrunt\/\">https:\/\/github.com\/gruntwork-io\/terragrunt\/<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Wenn Sie eine Orchestrierung von Aufrufen ben\u00f6tigen, wenn sich etwas an einem Ort ge\u00e4ndert hat, dann gibt es Terragrunt.<\/p>\n<p><\/p>\n<p>Terragrunt ist ein Tool, eine Erweiterung von Terraform, das es erm\u00f6glicht, infrastrukturelle Module zu koordinieren und Aufrufe zu orchestrieren.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/60ad02b0d3e6189fa6195e43c043b3e7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Eine typische Terraform-Konfigurationsdatei sieht so aus. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/2a5f5cb7e6eaed566c526a0923d1f1e6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sie geben an, welches spezifische Modul Sie aufrufen m\u00f6chten.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/ccf0faaa01207c67201ec750666d0c87.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Welche Abh\u00e4ngigkeiten das Modul hat.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/affc9afd52aac7cc4b13337c5d7f068e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und welche Argumente dieses Modul akzeptiert. Das ist alles, was man \u00fcber Terragrunt wissen muss.<\/p>\n<p><\/p>\n<p>Die Dokumentation ist vorhanden, 1.700 Sterne auf GitHub gibt es auch. Aber in den meisten F\u00e4llen ist das alles, was man wissen muss. Und es l\u00e4sst sich sehr einfach in Unternehmen integrieren, die gerade erst mit Terraform begonnen haben.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/90a4f52c58538647a062901e6d4b5246.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Somit ist die Orchestrierung Terragrunt. Es gibt auch andere Optionen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/5d57e3de03fbe7c5fbc8592367964069.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jetzt lassen Sie uns dar\u00fcber sprechen, wie man mit dem Code arbeitet. <\/p>\n<p><\/p>\n<p>Wenn Sie Features in den Code hinzuf\u00fcgen m\u00fcssen, ist das in den meisten F\u00e4llen einfach. Sie erstellen eine neue Ressource, das ist sehr unkompliziert. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/5a927eb69b80527945b7f825f42a1bc4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wenn Sie bereits eine Ressource eingerichtet haben, beispielsweise, wenn Sie nach der Erstellung Ihres AWS-Kontos von Terraform erfahren haben und die vorhandenen Ressourcen nutzen m\u00f6chten, w\u00e4re es sinnvoll, Ihr Modul so zu erweitern, dass es die Verwendung bestehender Ressourcen unterst\u00fctzt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/754e9d2836bf82e409c52a84988c84bd.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und die Erstellung neuer Ressourcen unter Verwendung des Resource-Blocks unterst\u00fctzt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/82f388d9659dc9d20e81475aa3f9692f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Am Ende geben wir immer eine Output-ID zur\u00fcck, abh\u00e4ngig davon, was verwendet wurde.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/71dc2952996800bce6278805c76a156f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ein weiteres sehr wesentliches Problem in Terraform 0.11 ist die Arbeit mit Listen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/669cd348c88f849155bfd06192cfea72.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Die Schwierigkeit liegt darin, dass wir eine solche Liste von Benutzern haben.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/dc808aa41a3f689ba1650f2a4f862dcf.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wenn wir diese Benutzer unter Verwendung des Resource-Blocks erstellen, funktioniert alles einwandfrei. Wir gehen die gesamte Liste durch und erstellen f\u00fcr jeden eine Datei. Das l\u00e4uft gut. Und dann, zum Beispiel, wenn Benutzer 3, der in der Mitte ist, entfernt werden soll, werden alle Ressourcen, die nach ihm erstellt wurden, neu erstellt, weil sich der Index \u00e4ndern wird. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/4dfd4b4e3f902e1d63d4ba7e48ed6400.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Arbeiten mit Listen in einer stateful Umgebung. Was ist eine stateful Umgebung? Das ist die Situation, in der ein neues Wert beim Erstellen dieser Ressource entsteht. Zum Beispiel, AWS Access Key oder AWS Secret Key, d. h. wenn wir einen Benutzer anlegen, erhalten wir einen neuen Access oder Secret Key. Und jedes Mal, wenn wir einen Benutzer l\u00f6schen, wird dieser Benutzer einen neuen Schl\u00fcssel haben. Aber das ist nicht nach dem Feng Shui, denn der Benutzer m\u00f6chte nicht mit uns befreundet sein, wenn wir jedes Mal einen neuen Benutzer f\u00fcr ihn erstellen, wenn jemand das Team verl\u00e4sst.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/c1fe1eb9f5c59b85e0e3934c1a6f6c6d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Die L\u00f6sung sieht so aus. Das ist der Code, geschrieben in Jsonnet. Jsonnet ist eine Template-Sprache von Google. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/d67ae4dc51ee3e72e49692550e47653d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dieser Befehl erm\u00f6glicht es, dieses Template zu \u00fcbernehmen, und als Ausgabe erh\u00e4lt man eine JSON-Datei, die nach Ihrem Template erstellt wurde. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/52be571cf82b122265a7bd64489b874d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Das Template sieht so aus. <\/p>\n<p><\/p>\n<p>Terraform erm\u00f6glicht die Arbeit sowohl mit HCL als auch mit Json gleichwertig, daher, wenn Sie die M\u00f6glichkeit haben, Json zu generieren, k\u00f6nnen Sie es in Terraform einf\u00fcgen. Eine Datei mit der Erweiterung .tf.json wird erfolgreich geladen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/a2e9b9ecd514dc7fd178930a236f9305.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und dann arbeiten wir damit wie gewohnt: terraform init, terraform apply. Und wir erstellen zwei Benutzer.<\/p>\n<p><\/p>\n<p>Jetzt haben wir keine Angst mehr, wenn jemand das Team verl\u00e4sst. Wir bearbeiten einfach die JSON-Datei. Wanja Pupkin ist gegangen, Petja Pjatotschkin bleibt. Petja Pjatotschkin erh\u00e4lt keinen neuen Schl\u00fcssel. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/b6dcff93532446d5d06007b545df769d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Die Integration von Terraform mit anderen Tools ist im Wesentlichen keine Aufgabe von Terraform. Terraform wurde als Plattform zum Erstellen von Ressourcen entwickelt und das war's. Alles, was danach passt, ist nicht die Sorge von Terraform. Und man muss das nicht einf\u00e4deln. Es gibt Ansible, das alles erledigt, was notwendig ist. <\/p>\n<p><\/p>\n<p>Aber es gibt Situationen, in denen wir Terraform erg\u00e4nzen und einen bestimmten Befehl aufrufen m\u00f6chten, nachdem etwas ausgef\u00fchrt wurde. <\/p>\n<p><\/p>\n<p>Erste Methode. Wir erstellen einen Output, in dem wir diesen Befehl schreiben.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/63f29f850cb05bbb9605bb3d34fdd659.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und dann rufen wir diesen Befehl aus dem Shell terraform output auf und geben den Wert an, den wir m\u00f6chten. So wird der Befehl mit allen angegebenen Werten ausgef\u00fchrt. Das ist sehr praktisch. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/083f5435d85e998ac5ba63e096f82026.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Zweite Methode. Das ist die Verwendung von null_resource in Abh\u00e4ngigkeit von \u00c4nderungen in unserer Infrastruktur. Wir k\u00f6nnen dasselbe local-exec aufrufen, sobald sich die ID eines bestimmten Ressourcen \u00e4ndert. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/f0df46f403079ca865294f584d8e1da3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nat\u00fcrlich sieht das alles auf dem Papier glatt aus, denn Amazon hat wie alle anderen Public-Provider eine Menge eigener Edge Cases.<\/p>\n<p><\/p>\n<p>Der h\u00e4ufigste Edge Case besteht darin, dass es wichtig ist, welche Regionen Sie verwenden, wenn Sie ein AWS-Konto er\u00f6ffnet haben; ob diese Funktion dort aktiviert ist; m\u00f6glicherweise haben Sie es nach Dezember 2013 er\u00f6ffnet; vielleicht verwenden Sie die Standardeinstellung in VPC usw. Es gibt viele Einschr\u00e4nkungen. Und Amazon hat sie in der gesamten Dokumentation verstreut.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/0615964259654a9894770bc326ca9725.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Es gibt einige Dinge, die ich empfehle zu vermeiden.<\/p>\n<p><\/p>\n<p>Zun\u00e4chst vermeiden Sie alle nicht geheimen Argumente innerhalb des Terraform-Plans oder der Terraform-CLI. Das alles kann entweder in eine tfvars-Datei oder in Umgebungsvariablen gepackt werden. <\/p>\n<p><\/p>\n<p>Aber Sie m\u00fcssen sich nicht diesen ganzen magischen Befehl merken. Terraform plan \u2013 var und los geht's. Die erste Variable \u2013 var, die zweite Variable \u2013 var, die dritte, die vierte. Der wichtigste Grundsatz von Infrastructure as Code, den ich am h\u00e4ufigsten verwende, ist, dass ich nur einen Blick auf den Code werfen muss, um genau zu verstehen, was bereitgestellt wurde, in welchem Zustand es ist und mit welchen Werten. Deshalb muss ich nicht die Dokumentation lesen oder Wanja fragen, welche Parameter er verwendet hat, um unseren Cluster zu erstellen. Es reicht, die tfvars-Datei zu \u00f6ffnen, die h\u00e4ufig mit der Umgebung \u00fcbereinstimmt, und alles dort anzuschauen.<\/p>\n<p><\/p>\n<p>Sie sollten auch keine Zielargumente verwenden, um den Geltungsbereich zu verringern. Stattdessen ist es viel einfacher, kleine Infrastrukturmodule zu verwenden. <\/p>\n<p><\/p>\n<p>Es ist auch nicht ratsam, den Parallelismus zu begrenzen oder zu erh\u00f6hen. Wenn ich 150 Ressourcen habe und den Parallelismus von Amazon von 10 (was der Standard ist) auf 100 erh\u00f6hen m\u00f6chte, wird wahrscheinlich etwas schiefgehen. Es kann jetzt gut gehen, aber wenn Amazon sp\u00e4ter sagt, dass Sie zu viele Aufrufe machen, werden Probleme auftreten. <\/p>\n<p><\/p>\n<p>Terraform wird versuchen, die meisten dieser Probleme neu zu starten, aber Sie werden kaum etwas erreichen. Parallelismus=1 ist eine wichtige Einstellung, die verwendet werden sollte, wenn Sie auf einen Bug innerhalb der AWS API oder im Terraform-Provider sto\u00dfen. Dann sollten Sie angeben: parallelism=1 und warten, bis Terraform einen Aufruf abgeschlossen hat, dann den zweiten, dann den dritten. Es wird sie nacheinander ausf\u00fchren.<\/p>\n<p><\/p>\n<p>Oft werde ich gefragt: \u201eWarum glaube ich, dass Terraform-Arbeitsbereiche schlecht sind?\u201c. Ich glaube, dass das Prinzip von Infrastructure as Code darin besteht, zu sehen, welche Infrastruktur erstellt wurde und mit welchen Werten. <\/p>\n<p><\/p>\n<p>Workspaces wurde nicht von den Benutzern erstellt. Das bedeutet nicht, dass die Benutzer in GitHub-Issues geschrieben haben, dass sie ohne Terraform-Workspaces nicht leben k\u00f6nnen. Nein, so ist es nicht. Terraform Enterprise ist eine kommerzielle L\u00f6sung. HashiCorp hat beschlossen, dass wir Workspaces ben\u00f6tigen, also werden wir das umsetzen. Ich halte es f\u00fcr viel einfacher, dies in einen separaten Ordner zu legen. Das wird zwar etwas mehr Dateien bedeuten, aber es wird klarer sein.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/e6c0d79203c27d49f0e3c4022e515b52.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wie arbeitet man mit dem Code? Im Grunde ist die Arbeit mit Listen die einzige Herausforderung. Betrachten Sie Terraform einfacher. Es ist nicht das Tool, das alles f\u00fcr Sie gro\u00dfartig erledigt. Stecken Sie nicht alles hinein, was in der Dokumentation geschrieben steht. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/f154e25a85bdb723a5e7ad52471d88f4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>In dem Thema des Vortrags stand \"f\u00fcr die Zukunft\". Ich werde dies sehr kurz ansprechen. F\u00fcr die Zukunft \u2013 das bedeutet, dass bald Version 0.12 herauskommt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/c7f2da5d87e69fb10bf966b9258b5255.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>0.12 bringt eine Menge neuer Funktionen. Wenn Sie aus der traditionellen Programmierung kommen, dann vermissen Sie verschiedene dynamische Bl\u00f6cke, Schleifen, korrekte und bedingte Vergleichsoperationen, bei denen die linke und die rechte Seite nicht gleichzeitig ausgewertet werden, sondern abh\u00e4ngig von der Situation. Sie vermissen das sehr, und daher wird 0.12 dieses Problem f\u00fcr Sie l\u00f6sen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/63aaef065c8a641a86a9223996524d18.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aber! Wenn Sie weniger und einfacher schreiben, indem Sie vorgefertigte Module und Drittanbieter-L\u00f6sungen verwenden, m\u00fcssen Sie nicht warten und hoffen, dass 0.12 kommt und alles f\u00fcr Sie repariert. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Zukunftssichere Infrastrukturbeschreibung in Terraform. Anton Bab\u0435\u043d\u043a\u043e (2018)\" src=\"\/wp-content\/uploads\/2020\/09\/b356603f38d5eb671c473369b5e8a03b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><em>Danke f\u00fcr den Vortrag! Du hast \u00fcber Infrastruktur als Code gesprochen und hast nur ein Wort \u00fcber Tests gesagt. Sind Tests in den Modulen notwendig? Wessen Verantwortung ist das? Muss man selbst schreiben oder ist das die Verantwortung der Module?<\/em><\/p>\n<p><\/p>\n<p>Das n\u00e4chste Jahr wird voller Vortr\u00e4ge dar\u00fcber sein, dass wir alles testen wollen. Was wir testen m\u00fcssen, ist die gr\u00f6\u00dfte Frage. Es gibt viele Abh\u00e4ngigkeiten und verschiedene Einschr\u00e4nkungen von Anbietern. Wenn wir miteinander sprechen und du sagst: \"Ich brauche Tests\", frage ich: \"Was wirst du testen?\" Du sagst, dass du in deiner Region testen wirst. Dann sage ich, dass das in meiner Region nicht funktioniert. Das hei\u00dft, wir k\u00f6nnen uns nicht einmal darauf einigen. Ganz zu schweigen von den vielen technischen Problemen. Das hei\u00dft, wie man diese Tests schreibt, damit sie angemessen sind. <\/p>\n<p><\/p>\n<p>Ich besch\u00e4ftige mich aktiv mit diesem Thema, d. h. wie man Tests automatisch auf der Grundlage der Infrastruktur generiert, die du geschrieben hast. Wenn du diesen Code geschrieben hast, muss ich ihn ausf\u00fchren; darauf basierend kann ich Tests erstellen. <\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/gruntwork-io\/terratest\">Terratest<\/a><\/noindex> Das ist eine der am h\u00e4ufigsten erw\u00e4hnten Bibliotheken, die es erm\u00f6glichen, Integrations-Tests f\u00fcr Terraform zu schreiben. Es ist eines der Hilfsprogramme. Ich bevorzuge mehr den DSL-Typ, z. B. rspec.<\/p>\n<p><\/p>\n<p><em>Anton, danke f\u00fcr den Vortrag! Mein Name ist Valerij. Ich erlaube mir, eine etwas philosophische Frage zu stellen. Es gibt, sozusagen, Provisioning und Deployment. Provisioning erstellt meine Infrastruktur, im Deployment f\u00fcgen wir ihr n\u00fctzliche Dinge hinzu, wie Server, Anwendungen usw. In meinem Kopf habe ich die Vorstellung, dass Terraform mehr f\u00fcr das Provisioning gedacht ist, w\u00e4hrend Ansible mehr f\u00fcr das Deployment geeignet ist, weil Ansible auch auf physischer Infrastruktur nginx oder Postgres installieren kann. Aber gleichzeitig scheint Ansible auch das Provisioning, zum Beispiel f\u00fcr Amazon- oder Google-Ressourcen, zu erm\u00f6glichen. Allerdings kann auch Terraform mit seinen Modulen eine Software bereitstellen. Siehst du, ist da eine Grenze zwischen Terraform und Ansible, wann und wo man was besser einsetzen sollte? Oder denkst du zum Beispiel, dass Ansible nun schon obsolet ist und man versuchen sollte, Terraform f\u00fcr alles zu verwenden?<\/em><\/p>\n<p><\/p>\n<p>Gute Frage, Valery. Ich denke, dass sich Terraform seit 2014 in seiner Funktionalit\u00e4t nicht ver\u00e4ndert hat. Es wurde f\u00fcr Infrastruktur geschaffen und ist f\u00fcr Infrastruktur gedacht. Wir haben nach wie vor einen Bedarf an Configuration Management mit Ansible. Das Problem besteht darin, dass es im launch_configuration user data gibt. Und dort rufst du Ansible usw. auf. Das ist die Standardtrennung, die ich am meisten mag. <\/p>\n<p><\/p>\n<p>Wenn wir \u00fcber sch\u00f6ne Infrastruktur sprechen, gibt es Utilities wie Packer, das dieses Image erstellt. Terraform nutzt dann data source, um dieses Image zu finden und seine launch_configuration zu aktualisieren. Das hei\u00dft, der Pipeline-Prozess besteht darin, dass wir zun\u00e4chst Tracker aufrufen und dann Terraform. Und wenn ein Build stattgefunden hat, erfolgt eine neue \u00c4nderung. <\/p>\n<p><\/p>\n<p><em>Hallo! Vielen Dank f\u00fcr den Vortrag! Ich hei\u00dfe Misha, von der Firma RBS. Ansible kann \u00fcber Provisioner beim Erstellen einer Ressource aufgerufen werden. Au\u00dferdem gibt es in Ansible die Funktion des dynamischen Inventars. Man kann zuerst Terraform aufrufen und dann Ansible, das aus dem State die Ressourcen entnimmt und ausf\u00fchrt. Was ist besser?<\/em><\/p>\n<p><\/p>\n<p>Sowohl das eine als auch das andere wird von den Menschen mit gleicher Effektivit\u00e4t genutzt. Ich denke, dass Inventarverwaltung in Ansible n\u00fctzlich ist, es sei denn, wir sprechen von einer Auto-Scaling-Gruppe. Denn in einer Auto-Scaling-Gruppe haben wir bereits unser eigenes Werkzeug, das als Launch-Konfiguration bekannt ist. In der Launch-Konfiguration notieren wir alles, was gestartet werden muss, wenn wir eine neue Ressource erstellen. Daher halte ich es f\u00fcr \u00fcberfl\u00fcssig, mit Amazon ein dynamisches Inventar zu verwenden und die Terraform ts-Datei zu lesen. Wenn Sie jedoch andere Tools verwenden, bei denen es kein Konzept von \u201eAuto-Scaling-Gruppe\u201c gibt, wie zum Beispiel DigitalOcean oder einen anderen Anbieter ohne Auto-Scaling-Gruppe, dann m\u00fcssen Sie die API manuell abfragen, IP-Adressen finden, eine dynamische Inventar-Datei erstellen, und Ansible wird dann damit arbeiten. Das hei\u00dft, f\u00fcr Amazon gibt es die Launch-Konfiguration, und f\u00fcr alles andere gibt es das dynamische Inventar.<\/p>\n<p>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/517804\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u043d\u043e\u0433\u0438\u0435 \u0437\u043d\u0430\u044e\u0442 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 Terraform \u0432 \u043f\u043e\u0432\u0441\u0435\u0434\u043d\u0435\u0432\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435, \u043d\u043e \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043d\u0435 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u043b\u0443\u0447\u0448\u0438\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438. \u041a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u044b, \u043c\u0435\u0442\u043e\u0434\u044b. \u0412\u0430\u0448\u0430 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u043e\u0447\u0442\u0438 \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e: \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 + \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u0421\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u043e\u043d\u0430 \u0440\u0430\u0441\u0442\u0451\u0442 \u0432\u043e \u0432\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b. \u0412\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0441\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0432 Terraform-\u043c\u043e\u0434\u0443\u043b\u0438, \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u043f\u043e \u043f\u0430\u043f\u043a\u0430\u043c, \u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":93460,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-93459","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041c\u043d\u043e\u0433\u0438\u0435 \u0437\u043d\u0430\u044e\u0442 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 Terraform \u0432 \u043f\u043e\u0432\u0441\u0435\u0434\u043d\u0435\u0432\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435, \u043d\u043e \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043d\u0435 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u043b\u0443\u0447\u0448\u0438\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438. \u041a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u044b, \u043c\u0435\u0442\u043e\u0434\u044b. \u0412\u0430\u0448\u0430 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u043e\u0447\u0442\u0438 \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e: \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 + \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u0421\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u043e\u043d\u0430 \u0440\u0430\u0441\u0442\u0451\u0442 \u0432\u043e \u0432\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b. \u0412\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0441\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0432 Terraform-\u043c\u043e\u0434\u0443\u043b\u0438, \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u043f\u043e \u043f\u0430\u043f\u043a\u0430\u043c, \u0438\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/opisanie-infrastruktury-v-terraform-na-budushhee-anton-babenko-2018g\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0432 Terraform \u043d\u0430 \u0431\u0443\u0434\u0443\u0449\u0435\u0435. \u0410\u043d\u0442\u043e\u043d \u0411\u0430\u0431\u0435\u043d\u043a\u043e (2018\u0433) | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041c\u043d\u043e\u0433\u0438\u0435 \u0437\u043d\u0430\u044e\u0442 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 Terraform \u0432 \u043f\u043e\u0432\u0441\u0435\u0434\u043d\u0435\u0432\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435, \u043d\u043e \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043d\u0435 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u043b\u0443\u0447\u0448\u0438\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438. \u041a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u044b, \u043c\u0435\u0442\u043e\u0434\u044b. \u0412\u0430\u0448\u0430 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u043e\u0447\u0442\u0438 \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e: \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 + \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u0421\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u043e\u043d\u0430 \u0440\u0430\u0441\u0442\u0451\u0442 \u0432\u043e \u0432\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b. \u0412\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0441\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0432 Terraform-\u043c\u043e\u0434\u0443\u043b\u0438, \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u043f\u043e \u043f\u0430\u043f\u043a\u0430\u043c, \u0438\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/opisanie-infrastruktury-v-terraform-na-budushhee-anton-babenko-2018g\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-09-07T05:43:22+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-09-07T05:43:22+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Beschreibung der Infrastruktur in Terraform f\u00fcr die Zukunft. Anton Babienko (2018) | ProHoster","description":"Viele kennen und nutzen Terraform im Alltag, aber es haben sich bisher keine Best Practices herausgebildet. Jedes Team muss eigene Ans\u00e4tze und Methoden entwickeln. Ihre Infrastruktur beginnt wahrscheinlich ganz einfach: einige Ressourcen + einige Entwickler. Im Laufe der Zeit w\u00e4chst sie in alle m\u00f6glichen Richtungen. Sie finden Wege, Ressourcen in Terraform-Module zu gruppieren und den Code in Ordnern zu organisieren, und","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/opisanie-infrastruktury-v-terraform-na-budushhee-anton-babenko-2018g","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0432 Terraform \u043d\u0430 \u0431\u0443\u0434\u0443\u0449\u0435\u0435. \u0410\u043d\u0442\u043e\u043d \u0411\u0430\u0431\u0435\u043d\u043a\u043e (2018\u0433) | ProHoster","og:description":"\u041c\u043d\u043e\u0433\u0438\u0435 \u0437\u043d\u0430\u044e\u0442 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 Terraform \u0432 \u043f\u043e\u0432\u0441\u0435\u0434\u043d\u0435\u0432\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435, \u043d\u043e \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043d\u0435 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u043b\u0443\u0447\u0448\u0438\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438. \u041a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u044b, \u043c\u0435\u0442\u043e\u0434\u044b. \u0412\u0430\u0448\u0430 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u043e\u0447\u0442\u0438 \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e: \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 + \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u0421\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u043e\u043d\u0430 \u0440\u0430\u0441\u0442\u0451\u0442 \u0432\u043e \u0432\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b. \u0412\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0441\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0432 Terraform-\u043c\u043e\u0434\u0443\u043b\u0438, \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u043f\u043e \u043f\u0430\u043f\u043a\u0430\u043c, \u0438","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/opisanie-infrastruktury-v-terraform-na-budushhee-anton-babenko-2018g","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-09-07T05:43:22+00:00","article:modified_time":"2020-09-07T05:43:22+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"93459","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 11:47:31","updated":"2022-09-27 15:34:51"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/93459","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=93459"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/93459\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/93460"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=93459"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=93459"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=93459"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}