Vun Terraform op CloudFormation gewiesselt - a bedauert et

D'Representatioun vun Infrastruktur als Code an engem widderhuelende Textformat ass eng einfach bescht Praxis fir Systemer déi net mat Mais fiddelen erfuerderen. Dës Praxis huet en Numm - Infrastruktur als Code, a bis elo ginn et zwee populär Tools fir et ëmzesetzen, besonnesch an AWS: Terraform и CloudFormatioun.

Vun Terraform op CloudFormation gewiesselt - a bedauert et
Vergläicht Erfahrung mat Terraform a CloudFormation

Ier Dir kommt Twitch (aka Amazon Jr.) Ech hunn geschafft an engem Startup a benotzt Terraform fir dräi Joer. Op der neier Plaz hunn ech och Terraform mat all menger Kraaft benotzt, an dunn huet d'Firma den Iwwergank op alles a la Amazon gedréckt, dorënner CloudFormation. Ech hunn fläisseg bescht Praktiken fir béid entwéckelt, an hu béid Tools a ganz komplexen, Organisatiounsbreet Workflows benotzt. Méi spéit, nodeems ech d'Implikatioune vun der Migratioun vun Terraform op CloudFormation nodenklech gewien hunn, gouf ech iwwerzeegt datt Terraform wahrscheinlech déi bescht Wiel fir d'Organisatioun war.

Terraform Schrecklech

Beta Software

Terraform huet nach net emol d'Versioun 1.0 verëffentlecht, wat e gudde Grond ass et net ze benotzen. Et huet vill geännert zënter ech et selwer probéiert hunn, awer deemools terraform apply dacks gebrach no e puer Updates oder einfach no e puer Joer Gebrauch. Ech géif soen datt "alles anescht ass elo", awer ... dat ass wat jidderee schéngt ze soen, nee? Et ginn Ännerungen déi mat fréiere Versiounen inkompatibel sinn, obwuel se passend sinn, an et fillt sech souguer wéi d'Syntax an d'Abstraktioune vu Ressourcengeschäfter elo sinn wat mir brauchen. D'Instrument schéngt wierklech besser ginn ze sinn, mee... :-0

Op der anerer Säit huet AWS eng gutt Aarbecht gemaach fir Réckkompatibilitéit z'erhalen. Dëst ass méiglecherweis well hir Servicer dacks grëndlech an der Organisatioun getest ginn an nëmmen dann ëmbenannt ginn, publizéiert ginn. Also "si hu schwéier probéiert" ass en Understatement. Réckkompatibilitéit mat APIen erhalen fir e System esou variéiert a komplex wéi AWS ass onheemlech schwéier. Jiddereen deen ëffentlech APIen erhalen huet, déi sou wäit benotzt gi wéi se sinn, soll verstoen wéi schwéier et ass fir sou vill Joren ze maachen. Awer d'Behuele vu CloudFormation, a menger Erënnerung, huet sech ni iwwer d'Jore geännert.

Trefft d'Been ... et ass eng Kugel

Sou wäit wéi ech weess, läschen der Ressource Auslänner CloudFormation Stack vun Ärem CF Stack ass net méiglech. Datselwecht ass wouer mat Terraform. Et erlaabt Iech existent Ressourcen an Äre Stack z'importéieren. D'Funktioun kann erstaunlech gesot ginn, awer mat grousser Kraaft kënnt grouss Verantwortung. Dir musst just eng Ressource op de Stack addéieren, a wärend Dir mat Ärem Stack schafft, kënnt Dir dës Ressource net läschen oder änneren. Enges Daags huet et zréckgezunn. Enges Daags op Twitch, huet een zoufälleg een aneren seng AWS Sécherheetsgrupp an hiren eegene Terraform Stack importéiert, während net zu engem Mëssbrauch war. Ech hunn e puer Kommandoen aginn an ... d'Sécherheetsgrupp (zesumme mam ankommende Verkéier) verschwonnen.

Terraform Great

Erhuelung vun onkomplett Staaten

Heiansdo klappt d'CloudFormation net komplett vun engem Staat an en aneren iwwer. Zur selwechter Zäit wäert hien probéieren op déi virdrun zréckzekommen. Et ass schued, datt dat net ëmmer machbar ass. Et kann zimlech grujeleg sinn ze debuggen wat spéider geschitt ass - Dir wësst ni ob CloudFormation frou ass datt et gehackt gëtt - och just fir et ze fixéieren. Egal ob et méiglech ass an de fréiere Staat zréckzekommen, weess hien wierklech net wéi ze bestëmmen an, par défaut, hänkt fir Stonnen op e Wonner ze waarden.

Terraform, op der anerer Säit, tendéiert sech vu gescheiterten Iwwergäng vill méi graziéis ze erholen a bitt fortgeschratt Debugging Tools.

Méi kloer Ännerungen am Dokumentstaat

"Okay, Lastbalancer, Dir ännert Iech. Mee wéi?"

- Angschtgefiller Ingenieur, prett fir den "akzeptéieren" Knäppchen ze drécken.

Heiansdo muss ech e puer Manipulatioune mam Lastbalancer am CloudFormation Stack maachen, sou wéi eng Portnummer derbäisetzen oder eng Sécherheetsgrupp änneren. ClouFormation weist Ännerungen schlecht. Ech, op Pins an Nadelen, iwwerpréift d'Yaml Datei zéng Mol fir sécher ze stellen datt ech näischt néideg geläscht hunn an näischt onnéideg bäigefüügt hunn.

Terraform ass vill méi transparent an dësem Sënn. Heiansdo ass hien souguer ze transparent (liesen: langweileg). Glécklecherweis enthält déi lescht Versioun verbesserte Display vun Ännerungen, sou datt Dir elo genau gesinn wat ännert.

Flexibilitéit

Schreift Software no hannen.

Fir et kloer ze soen, ass déi wichtegst Charakteristik vu laangliewege Software d'Fäegkeet sech un d'Verännerung unzepassen. Schreift all Software no hannen. Meeschtens hunn ech Feeler gemaach andeems ech en "einfache" Service huelen, an dann ugefaang alles an engem eenzegen CloudFormation oder Terraform Stack ze kräischen. An natierlech, Méint méi spéit gouf verroden datt ech alles falsch verstanen hunn, an de Service war eigentlech net einfach! An elo muss ech iergendwéi e grousse Stack a kleng Komponenten briechen. Wann Dir mat CloudFormation schafft, kann dëst nëmme gemaach ginn andeems Dir den existente Stack nei erstallt, awer ech maachen dat net mat mengen Datenbanken. Terraform, op der anerer Säit, huet et méiglech gemaach de Stack ze dissektéieren an a méi verständlech méi kleng Deeler ze briechen.

Moduler an git

Terraform Code iwwer multiple Stacks deelen ass vill méi einfach wéi CloudFormation Code deelen. Mat Terraform kënnt Dir Äre Code an engem Git-Repository setzen an et mat der semantescher Versiounskontroll zougräifen. Jiddereen mat Zougang zu dësem Repository kann de gedeelt Code weiderbenotzen. D'Äquivalent vun CloudFormation ass S3, awer et huet net déiselwecht Virdeeler, an et gëtt kee Grond firwat mir Git zugonschte vum S3 iwwerhaapt sollten opginn.

D'Organisatioun ass gewuess an d'Fäegkeet fir gemeinsame Stacks ze deelen huet e kriteschen Niveau erreecht. Terraform mécht dëst alles einfach an natierlech, wärend CloudFormation Iech duerch Hoops sprange wäert ier Dir esou eppes funktionnéiert.

Operatiounen als Code

"Komm mir schreiwen et an ok."

-en Ingenieur 3 Joer ier hien den Terraform Vëlo erfonnt huet.

Wann et ëm Softwareentwécklung kënnt, ass Go oder e Java Programm net nëmme Code.

Vun Terraform op CloudFormation gewiesselt - a bedauert et
Code als Code

Et gëtt och d'Infrastruktur op där et funktionnéiert.

Vun Terraform op CloudFormation gewiesselt - a bedauert et
Infrastruktur als Code

Awer vu wou kënnt hatt? Wéi et ze iwwerwaachen? Wou leeft Äre Code? Brauchen d'Entwéckler Zougangserlaabnes?

Vun Terraform op CloudFormation gewiesselt - a bedauert et
Operatiounen als Code

Softwareentwéckler ze sinn heescht net nëmmen Code schreiwen.

AWS ass net deen eenzegen: Dir benotzt wahrscheinlech aner Ubidder. SignalFx, PagerDuty oder Github. Vläicht hutt Dir eng intern Jenkins Server fir CI / CD oder eng intern Grafana Dashboard fir Iwwerwachung. Infra als Code gëtt aus verschiddene Grënn gewielt, a jidderee ass gläich wichteg fir alles wat mat Software verbonnen ass.

Wéi ech bei Twitch geschafft hunn, hu mir d'Servicer an den gemëschte Embedded an AWS Systemer vun Amazon beschleunegt. Mir hunn vill Mikrodéngschter ausgeschwat an ënnerstëtzt, wat d'Operatiounskäschte erhéicht huet. D'Diskussiounen sinn esou ausgelaf:

  • Я: Verdammt, dat si vill Gesten fir ee Mikroservice ze iwwerklocken. Ech muss dësen Dreck benotzen fir en AWS Kont ze kreéieren (mir sinn op 2 Konten gaang microservice), dann dës fir Alarm opzestellen, dësen fir e Code Repository, an dësen fir eng E-Mail Lëscht, an dann dës ...
  • Féierung: Loosst eis et schreiwen an okay.
  • Я: Okay, mä de Skript selwer wäert änneren. Mir brauchen e Wee fir ze kontrolléieren ob all dës agebaute Amazon Gizmos aktuell sinn.
  • Féierung: Kléngt gutt. A mir schreiwen e Skript fir dëst.
  • Я: Super! An de Skript wäert wahrscheinlech nach ëmmer Parameteren astellen. Wäert hien hinnen akzeptéieren?
  • Féierung: Loosst hien huelen wou hien geet!
  • Я: De Prozess kann änneren a Réckkompatibilitéit wäert verluer goen. Eng Aart vu semantescher Versiounskontroll wäert erfuerderlech sinn.
  • Féierung: Super Iddi!
  • Я: Tools kënnen manuell geännert ginn, bannent der User-Interface. Mir brauchen e Wee fir dëst ze kontrolléieren an ze fixéieren.

... 3 Joer méi spéit:

  • Féierung: A mir hunn terraform.

D'Moral vun der Geschicht ass: och wann Dir Kapp iwwer Tallongen an alles Amazon, Dir benotzt nach ëmmer eppes net vun AWS, an dës Servicer hunn e Staat deen eng Konfiguratiounssprooch benotzt fir dësen Zoustand synchroniséiert ze halen.

CloudFormation Lambda vs Git Moduler Terraform

lambda ass d'CloudFormation Léisung fir de personaliséierte Logik Thema. Mat Lambda kënnt Dir schafen macros oder Benotzer Ressource. Dës Approche stellt zousätzlech Komplexitéiten vir, déi net an Terraform senger semantescher Versioun vu git Moduler präsent sinn. Fir mech war deen dréngendste Problem d'Gestioun vun Permissiounen fir all dës Benotzer Lambdas (an dëst sinn Dosende vun AWS Konten). En anere wichtege Problem war de "wat koum als éischt, de Poulet oder d'Ee?" Problem: et war am Zesummenhang mam Lambda Code. Dës Funktioun selwer ass Infrastruktur a Code, an et brauch selwer Iwwerwaachung an Updates. Déi lescht Nol am Sarg war d'Schwieregkeet fir semantesch Lambda Code Ännerungen ze aktualiséieren; mir haten och sécherstellen, datt d'Stack Aktiounen ouni direkt Kommando net tëscht Lafen änneren.

Ech erënnere mech datt ech eemol e Kanaresch Deployment fir d'Elastic Beanstalk Ëmfeld mat engem klassesche Lastbalancer wollt erstellen. Déi einfachst Saach fir ze maachen wier eng zweet Deployment fir den EB nieft dem Produktiounsëmfeld ze maachen, et e Schrëtt weider ze huelen: d'Kombinatioun vun der Auto-Scaling Canary Deployment Group mat der Deployment LB an d'Produktiounsëmfeld. An zënter Terraform benotzt ASG beantalk als Conclusioun, Dëst erfuerdert 4 extra Zeilen Code an Terraform. Wéi ech gefrot hunn ob et eng vergläichbar Léisung an der CloudFormation gëtt, hunn se mech op e ganze Git Repository mat enger Deployment Pipeline an alles gewisen, alles fir eppes wat schlecht 4 Zeilen Terraform Code kéinte maachen.

Et detektéiert Drift besser

Gitt sécher datt d'Realitéit d'Erwaardungen entsprécht.

Drift Detectioun ass eng ganz mächteg Operatiounen als Code Feature well et hëlleft ze garantéieren datt d'Realitéit d'Erwaardungen entsprécht. Et ass verfügbar mat béide CloudFormation an Terraform. Awer wéi de Produktiounsstack gewuess ass, huet d'Sich no Drift an der CloudFormation ëmmer méi falsch Detektiounen produzéiert.

Mat Terraform hutt Dir vill méi fortgeschratt Liewenszyklus Haken fir Drifterkennung. Zum Beispill gitt Dir de Kommando ignore_changes direkt an der ECS Aufgab Definitioun wann Dir Ännerunge vun enger spezifescher Aufgab Definitioun ignoréiere wëllt ouni Ännerungen op Är ganz ECS Détachement ignoréieren.

CDK an d'Zukunft vu CloudFormation

CloudFormation ass schwéier ze verwalten op grouss, cross-infrastruktur Skala. Vill vun dëse Schwieregkeeten ginn unerkannt an d'Instrument brauch Saachen wéi asw-cdk, e Kader fir Cloud Infrastruktur am Code ze definéieren an duerch AWS CloudFormation ze lafen. Et wäert interessant sinn ze gesinn wat d'Zukunft fir aws-cdk hält, awer et wäert schwéier mat Terraform seng aner Stäerkten konkurréiere; fir CloudFormation up to date ze bréngen, wäerte global Ännerungen erfuerderlech sinn.

Also datt Terraform net enttäuscht

Dëst ass "Infrastruktur als Code", an net "als Text".

Meng éischt Androck vun Terraform war éischter schlecht. Ech mengen ech hunn d'Approche just net verstanen. Bal all Ingenieuren gesinn et onfräiwëlleg als en Textformat deen an déi gewënscht Infrastruktur ëmgewandelt muss ginn. MACHT DET NET DES WEI.

D'Truismen vu gudder Softwareentwécklung gëllen och fir Terraform.

Ech hu vill Praktiken gesinn ugeholl fir e gudde Code ze kreéieren an Terraform ignoréiert ginn. Dir hutt fir Joer studéiert fir e gudde Programméierer ze ginn. Gitt dës Erfahrung net op just well Dir mat Terraform schafft. D'Truismen vu gudder Softwareentwécklung gëllen fir Terraform.

Wéi kann de Code net dokumentéiert ginn?

Ech hunn enorm Terraform Stacks mat absolut keng Dokumentatioun gesinn. Wéi kënnt Dir Code op Säiten schreiwen - mat absolut keng Dokumentatioun? Dobäizemaachen Dokumentatioun datt erkläert Är code Terraform (Betonung op d'Wuert "Code"), firwat dës Sektioun sou wichteg ass, a wat Dir maacht.

Wéi kënne mir Servicer ofsetzen déi eemol eng grouss Haaptfunktioun waren ()?

Ech hu ganz komplex Terraform Stacks als eenzege Modul presentéiert. Firwat deployéiere mir keng Software op dës Manéier? Firwat trenne mir grouss Funktiounen a méi kleng? Déi selwecht Äntwerten gëlle fir Terraform. Wann Äre Modul ze grouss ass, musst Dir et a méi kleng Moduler opbriechen.

Benotzt Är Firma keng Bibliothéiken?

Ech hu gesinn wéi d'Ingenieuren, en neie Projet mat Terraform dréinen, domm rieseg Stécker vun anere Projeten an hir eege kopéieren-paste, an duerno mat hinnen gepickt hunn bis et ugefaang huet ze schaffen. Géif Dir esou mat "Kampf" Code an Ärer Firma schaffen? Mir benotzen net nëmmen Bibliothéiken. Jo, net alles muss eng Bibliothéik sinn, mee wou si mer am Prinzip ouni gemeinsame Bibliothéiken?!

Benotzt Dir net PEP8 oder gofmt?

Déi meescht Sproochen hunn e Standard, akzeptéiert Formatéierungsschema. Am Python ass dëst PEP8. An Go - gofmt. Terraform huet seng eege: terraform fmt. Genéisst et fir Är Gesondheet!

Wäert Dir React benotzen ouni JavaScript ze kennen?

Terraform Moduler kënnen en Deel vun der komplexer Infrastruktur vereinfachen, déi Dir erstellt, awer dëst heescht net datt Dir guer net mat der manipuléiere kënnt. Wëllt Terraform richteg benotzen ouni Ressourcen ze verstoen? Dir sidd veruerteelt: Zäit wäert passéieren, an Dir wäert Terraform ni beherrschen.

Sidd Dir codéiert mat Singletonen oder Ofhängegkeetsinjektioun?

Ofhängegkeetsinjektioun ass eng unerkannt bescht Praxis fir Softwareentwécklung a gëtt léiwer iwwer Singletonen. Wéi ass dëst nëtzlech an Terraform? Ech hunn Terraform Moduler gesinn, déi vum Fernzoustand ofhängeg sinn. Amplaz Moduler ze schreiwen déi Remote Staat recuperéieren, schreift e Modul deen Parameteren hëlt. An dann dës Parameteren un de Modul weiderginn.

Maachen Är Bibliothéike zéng Saachen gutt oder eng Saach super?

Bibliothéiken déi am Beschten funktionnéieren sinn déi déi sech op eng Aufgab konzentréieren déi se ganz gutt maachen. Amplaz grouss Terraform Moduler ze schreiwen déi probéieren alles op eemol ze maachen, bauen Deeler vun hinnen déi eng Saach gutt maachen. An dann kombinéieren se wéi néideg.

Wéi maacht Dir Ännerungen u Bibliothéiken ouni Réckkompatibilitéit?

E gemeinsame Terraform Modul, wéi eng regulär Bibliothéik, muss iergendwéi Ännerungen un d'Benotzer kommunizéieren ouni zréckkompatibel ze sinn. Et ass désagréabel wann dës Ännerungen an Bibliothéiken geschéien, an et ass grad esou désagréabel wann net-zeréck-kompatibel Ännerungen an Terraform Moduler gemaach ginn. Et ass recommandéiert git Tags a Semver ze benotzen wann Dir Terraform Moduler benotzt.

Laaft Äre Produktiounsservice op Ärem Laptop oder an engem Rechenzentrum?

Hashicorp huet Tools wéi terraform Wollek Är terraform ze lafen. Dës zentraliséiert Servicer maachen et einfach ze verwalten, ze kontrolléieren an d'Terraform Ännerungen z'accordéieren.

Schreifs du keng Tester?

Ingenieuren erkennen datt de Code muss getest ginn, awer si selwer vergiessen dacks iwwer Testen wann se mat Terraform schaffen. Fir d'Infrastruktur ass dëst voller verréider Momenter. Mäi Rot ass "Test" oder "Erstellt Beispill" Stacks mat Moduler déi richteg agesat kënne fir Testen während CI / CD.

Terraform a Mikroservicer

D'Liewen an den Doud vu Mikroservicefirmen hänkt vun der Geschwindegkeet, Innovatioun an der Stéierung vun neie Mikroservice Workstacks of.

Deen heefegsten negativen Aspekt ass verbonne mat Mikroservicearchitekturen, an deen net eliminéiert ka ginn, ass mat der Aarbecht verbonnen, net dem Code. Wann Dir un Terraform denkt als just e Wee fir nëmmen d'Infrastruktur Säit vun enger Mikroservicearchitektur ze automatiséieren, da verpasst Dir déi richteg Virdeeler vum System. Elo ass et schonn alles ass wéi Code.

Source: will.com

Setzt e Commentaire