Passatu da Terraform à CloudFormation - è si dispiace

Rappresentà l'infrastruttura cum'è codice in un formatu di testu ripetibile hè una pratica simplice simplice per i sistemi chì ùn anu micca bisognu di ritruvà cù i topi. Sta pratica hà un nome - Infrastruttura cum'è Codice, è finu à avà ci sò dui strumenti populari per implementà, in particulare in AWS: Terraform и Formazione di nuvola.

Passatu da Terraform à CloudFormation - è si dispiace
Comparare l'esperienza cù Terraform è CloudFormation

Prima di vene à tic (ellu Amazon Jr.) Aghju travagliatu in una startup è hà utilizatu Terraform per trè anni. À u novu locu, aghju utilizatu ancu Terraform cù tutte e mo forza, è dopu a cumpagnia hà spintu a transizione à tuttu ciò chì hè Amazon, cumpresu CloudFormation. Aghju sviluppatu diligentemente e migliori pratiche per i dui, è aghju utilizatu i dui strumenti in flussi di travagliu assai cumplessi, in tutta l'urganizazione. In seguitu, dopu avè pensatu à pisà l'implicazioni di a migrazione da Terraform à CloudFormation, aghju cunvintu chì Terraform era probabilmente a megliu scelta per l'urganizazione.

Terraform Horrible

U software beta

Terraform ùn hà ancu publicatu a versione 1.0, chì hè una bona ragione per ùn aduprà micca. Hè cambiatu assai da quandu l'aghju pruvatu per mè stessu, ma allora terraform apply spessu si rumpiu dopu à parechje aghjurnamenti o simpricimenti dopu à un paru d'anni di usu. Diciaraghju chì "tuttu hè diversu avà", ma ... hè ciò chì tutti parenu dì, nò ? Ci sò cambiamenti chì sò incompatibili cù e versioni precedenti, ancu s'elli sò apprupriati, è ancu sente chì a sintassi è l'astrazioni di i magazzini di risorse sò avà ciò chì avemu bisognu. L'instrumentu pare avè veramente megliu, ma... :-0

Per d 'altra banda, AWS hà fattu un bonu travagliu mantenendu a cumpatibilità inversa. Questu hè prubabilmente perchè i so servizii sò spessu pruvati bè in l'urganizazione è solu dopu, rinominati, sò publicati. Allora "hanu pruvatu duru" hè un sottumessu. Mantene a cumpatibilità retrocede cù l'API per un sistema cusì variatu è cumplessu cum'è AWS hè incredibilmente difficiule. Qualchidunu chì hà avutu per mantene l'API publichi chì sò usati cum'è largamente cum'è sò deve capisce quantu hè difficiule di fà cusì per tanti anni. Ma u cumpurtamentu di CloudFormation, in a mo memoria, ùn hà mai cambiatu annantu à l'anni.

Scuntrà a gamba... hè una pallottola

In quantu à sapè, sguassate a risorsa fora Stack CloudFormation da a vostra pila CF ùn hè micca pussibule. U stessu hè veru cù Terraform. Permette di impurtà risorse esistenti in a vostra pila. A funzione si pò dì chì hè stupente, ma cù un grande putere vene una grande rispunsabilità. Solu bisognu di aghjunghje una risorsa à a pila, è mentre travagliate cù a vostra pila, ùn pudete micca sguassà o cambià sta risorsa. Un ghjornu s'hè vultatu. Un ghjornu in Twitch, qualcunu hà impurtatu accidentalmente u gruppu di sicurezza AWS di qualcunu in a so propria pila Terraform, mentre ùn era micca à l'alcuni mali. Aghju intrutu in parechji cumandamenti è ... u gruppu di sicurità (inseme cù u trafficu entrante) sparì.

Terraform Grande

Recuperazione da stati incompleti

Calchì volta CloudFormation ùn riesce a transizione cumpleta da un statu à un altru. À u listessu tempu, hà da pruvà à vultà à u precedente. Hè una pena chì questu ùn hè micca sempre fattibile. Pò esse abbastanza paura di debug ciò chì hè accadutu dopu - ùn sapete mai se CloudFormation serà felice chì hè stata piratata - ancu solu per riparà. Ch'ella sia o micca pussibule di vultà à u statu precedente, veramente ùn sapi micca cumu per determinà è, per difettu, pende per ore aspittendu un miraculu.

Terraform, invece, tende à ricuperà da e transizioni falluti assai più grazia è offre strumenti di debugging avanzati.

Cambiamenti più chjaru à u statu di u documentu

"Va bè, bilanciatore di carica, stai cambiando. Ma cumu?"

- ingegnere ansioso, prontu à appughjà u buttone "accettà".

A volte aghju bisognu di fà qualchì manipulazione cù l'equilibriu di carica in a pila di CloudFormation, cum'è aghjunghje un numeru di portu o cambià un gruppu di sicurità. ClouFormation mostra i cambiamenti pocu. Eiu, nantu à pins and needles, verificate u schedariu yaml dece volte per assicurà chì ùn aghju micca sguassatu nunda necessariu è ùn aghju micca aghjustatu nunda innecessariu.

Terraform hè assai più trasparente in questu sensu. A volte hè ancu troppu trasparenti (leghjite: boring). Fortunatamente, l'ultima versione include una visualizazione mejorata di i cambiamenti in modu chì pudete avà vede esattamente ciò chì cambia.

Flessibilità

Scrivite u software in daretu.

Per dì chjaramente, a caratteristica più impurtante di u software longu hè a capacità di adattà à u cambiamentu. Scrivite qualsiasi software in daretu. A maiò spessu, aghju sbagliatu pigliendu un serviziu "semplice", è dopu cuminciò à cram tuttu in una sola pila CloudFormation o Terraform. E di sicuru, mesi dopu hè statu revelatu chì aghju capitu tuttu di male, è u serviziu ùn era micca simplice! È avà aghju bisognu di rompe in qualchì manera una grande pila in picculi cumpunenti. Quandu travagliate cù CloudFormation, questu pò esse fattu solu da prima ricreendu a pila esistente, è ùn aghju micca fà questu cù e mo basa di dati. Terraform, invece, hà permessu di dissectà a pila è scumpressà in parti più chjuche più comprensibili.

Moduli in git

Sparte u codice Terraform in parechje pile hè assai più faciule ch'è sparte u codice CloudFormation. Cù Terraform, pudete mette u vostru còdice in un repository git è accede cù u cuntrollu di versione semantica. Qualchese chì hà accessu à stu repository pò reutilizà u codice spartutu. L'equivalente di CloudFormation hè S3, ma ùn hà micca i stessi benefici, è ùn ci hè nisuna ragiuni per quessa chì duvemu abbandunà git in favore di S3 in tuttu.

L'urganizazione hà crisciutu è a capacità di sparte stacks cumuni hà righjuntu un livellu criticu. Terraform rende questu tuttu faciule è naturali, mentri CloudFormation vi farà saltà à traversu i hoops prima di pudè ottene qualcosa cum'è questu travagliu.

Operazioni cum'è codice

"Scrittemu è va bè."

- un ingegnere 3 anni prima di inventà a bicicletta Terraform.

Quandu si tratta di u sviluppu di software, Go o un prugramma Java ùn hè micca solu codice.

Passatu da Terraform à CloudFormation - è si dispiace
Codice cum'è Code

Ci hè ancu l'infrastruttura nantu à quale travaglia.

Passatu da Terraform à CloudFormation - è si dispiace
Infrastruttura cum'è Codice

Ma da induve hè ella ? Cumu monitorà? Induve vive u vostru codice? I sviluppatori anu bisognu di permessu di accessu?

Passatu da Terraform à CloudFormation - è si dispiace
Operazioni cum'è Code

Esse un sviluppatore di software ùn significa micca solu scrive codice.

AWS ùn hè micca l'unicu: probabilmente utilizate altri fornituri. SignalFx, PagerDuty o Github. Forsi avete un servitore Jenkins internu per CI / CD o un dashboard Grafana internu per u monitoraghju. Infra as Code hè sceltu per diverse ragioni, è ognunu hè ugualmente impurtante per tuttu ciò chì riguarda u software.

Quandu aghju travagliatu in Twitch, avemu acceleratu i servizii in i sistemi misti integrati è AWS di Amazon. Avemu sbulicatu è supportatu parechji microservizi, aumentendu i costi operativi. E discussioni andavanu qualcosa cusì:

  • Я: Dannazione, sò assai gesti per overclock un microserviziu. Aghju da aduprà sta basura per creà un contu AWS (avemu andatu à 2 cunti nantu microserviziu), dopu questu per stabilisce alerti, questu per un repository di codice, è questu per una lista di email, è dopu questu ...
  • Piombu: Scrivemu è va bè.
  • Я: Va bè, ma u script stessu cambierà. Avemu bisognu di un modu per verificà chì tutti questi gizmos Amazon integrati sò aghjurnati.
  • Piombu: Pare bè. È scriveremu un script per questu.
  • Я: Perfettu! È u script hà prubabilmente bisognu di stabilisce parametri. Li accetterà ?
  • Piombu: Ch'ellu piglii induv'ellu và !
  • Я: U prucessu pò cambià è a cumpatibilità retrocede serà persa. Qualchese tipu di cuntrollu di versione semantica serà necessariu.
  • Piombu: Grande idea !
  • Я: Strumenta pò esse cambiatu manualmente, in l'interfaccia d'utilizatore. Avemu bisognu di un modu per verificà è riparà questu.

… 3 anni dopu:

  • Piombu: È avemu avutu terraform.

A morale di a storia hè: ancu s'è tù testa sopra i tacchi in tuttu Amazon, avete sempre aduprà qualcosa micca da AWS, è questi servizii anu un statu chì usa una lingua di cunfigurazione per mantene quellu statu in sincronia.

CloudFormation lambda vs moduli git terraform

lambda hè a suluzione di CloudFormation à u prublema di logica persunalizata. Cù lambda pudete creà macros o risorsa utilizatori. Stu approcciu introduce cumplessità supplementari chì ùn sò micca prisenti in a versione semantica di Terraform di i moduli git. Per mè, u prublema più pressante era a gestione di i permessi per tutti questi lambda d'utilizatori (è questi sò decine di cunti AWS). Un altru prublema impurtante era u prublema "chì hè vinutu prima, u pollulu o l'ovu?": era ligatu à u codice lambda. Sta funzione stessa hè infrastruttura è codice, è hà bisognu di monitoraghju è aghjurnamenti. U chiovu finali in u coffin era a difficultà à aghjurnà semanticamente i cambiamenti di codice lambda; avemu avutu ancu esse sicuru chì l'azzioni di stack senza un cumandamentu direttu ùn hà micca cambiatu trà e corse.

Mi ricordu una volta chì vulia creà una implementazione canaria per l'ambiente Elastic Beanstalk cun un equilibratore di carica classicu. A cosa più faciule da fà seria di fà una seconda implementazione per l'EB accantu à l'ambienti di pruduzzione, purtendu un passu più avanti: cumminendu u gruppu di implementazione di canari auto-scaling cù a implementazione LB in l'ambiente di produzzione. E postu chì Terraform usa ASG beantalk cum'è cunclusione, questu richiederà 4 linee extra di codice in Terraform. Quandu aghju dumandatu s'ellu ci era una suluzione paragunabile in CloudFormation, m'anu indicatu à un repositoriu git sanu cù una pipeline di implementazione è tuttu, tuttu per qualcosa chì poveru 4 linee di codice Terraform puderia fà.

Detecta megliu a deriva

Assicuratevi chì a realtà currisponde à e aspettative.

Rilevazione di deriva hè una operazione assai putente cum'è funzione di codice perchè aiuta à assicurà chì a realità currisponde à e aspettative. Hè dispunibule cù CloudFormation è Terraform. Ma cum'è a pila di pruduzzione cresce, a ricerca di a deriva in CloudFormation hà pruduttu sempre più falsi rilevazioni.

Cù Terraform avete ganci di ciclu di vita assai più avanzati per a rilevazione di a deriva. Per esempiu, entre u cumandamentu ignore_changes direttamente in a definizione di u compitu ECS se vulete ignurà i cambiamenti à una definizione di compitu specificu senza ignurà i cambiamenti in tutta a vostra implementazione ECS.

CDK è u futuru di CloudFormation

CloudFormation hè difficiuli di gestisce à grandi scale di infrastrutture incruciate. Parechje di sti difficultà sò ricunnisciuti è u strumentu hà bisognu di cose cum'è aws-cdk, un framework per definisce l'infrastruttura di nuvola in codice è eseguisce cù AWS CloudFormation. Serà interessante per vede ciò chì u futuru riserva per aws-cdk, ma avarà un tempu difficiuli di cumpetizione cù l'altri punti di forza di Terraform; per aghjurnà CloudFormation, i cambiamenti globale seranu necessarii.

Allora chì Terraform ùn decepisce micca

Questu hè "infrastruttura cum'è codice", è micca "cum'è testu".

A mo prima impressione di Terraform era piuttostu cattiva. Pensu chì ùn aghju micca capitu l'approcciu. Quasi tutti l'ingegneri involuntarily perceive cum'è un furmatu di testu chì deve esse cunvertitu in l'infrastruttura desiderata. Ùn fate micca cusì.

I truismi di u bonu sviluppu di u software s'applicanu ancu à Terraform.

Aghju vistu parechje pratiche aduttate per creà un bonu codice esse ignoratu in Terraform. Avete studiatu per anni per diventà un bonu programatore. Ùn lasciate micca sta sperienza solu perchè travagliate cù Terraform. I truismi di un bonu sviluppu di software s'applicanu à Terraform.

Cumu ùn pò micca esse documentatu u codice?

Aghju vistu enormi pile Terraform senza assolutamente documentazione. Cumu pudete scrive codice in pagine - senza assolutamente micca documentazione? Aghjunghjite a documentazione chì spiega u vostru codice Terraform (accentu nantu à a parolla "codice"), perchè sta rùbbrica hè cusì impurtante, è ciò chì fate.

Cumu pudemu implementà servizii chì eranu una volta una grande funzione principale () ?

Aghju vistu stacks Terraform assai cumplessi presentati cum'è un solu modulu. Perchè ùn avemu micca implementatu u software in questu modu? Perchè spartemu e grandi funzioni in più chjuche? E stesse risposte s'applicanu à Terraform. Se u vostru modulu hè troppu grande, avete bisognu di scumpressà in moduli più chjuchi.

A vostra cumpagnia ùn usa micca biblioteche?

Aghju vistu cumu l'ingegneri, spinning up a new project using Terraform, stupidly copy-pasted chunks enormi da altri prughjetti in u so propiu, è poi tinkered cun elli finu à chì cuminciò à travaglià. Vulete travaglià cusì cù u codice di "combattimentu" in a vostra cumpagnia? Ùn usemu micca solu biblioteche. Iè, micca tuttu deve esse una biblioteca, ma induve simu senza biblioteche spartute in principiu ?!

Ùn avete micca aduprà PEP8 o gofmt?

A maiò parte di e lingue anu un schema di formattazione standard accettatu. In Python questu hè PEP8. In Go - gofmt. Terraform hà u so propiu: terraform fmt. Prufittate per a vostra salute!

Aduprate React senza sapè JavaScript?

I moduli di Terraform ponu simplificà una parte di l'infrastruttura cumplessa chì create, ma questu ùn significa micca chì ùn pudete micca tinker cun ella in tuttu. Vulete aduprà Terraform currettamente senza capisce e risorse? Sò cundannati : u tempu passerà, è ùn mai padrone di Terraform.

Avete codificatu cù singletons o iniezione di dipendenza?

L'iniezione di dipendenza hè una pratica megliu ricunnisciuta per u sviluppu di software è hè preferita à i singletons. Cumu hè questu utile in Terraform? Aghju vistu moduli Terraform chì dipendenu da u statu remoto. Invece di scrive moduli chì ricuperanu u statu remoto, scrivite un modulu chì piglia paràmetri. E poi passà sti paràmetri à u modulu.

E vostre biblioteche facenu dece cose bè o una cosa grande?

I Biblioteche chì travaglianu megliu sò quelli chì si cuncentranu nantu à un compitu chì facenu assai bè. Invece di scrive grandi moduli Terraform chì pruvate à fà tuttu in una volta, custruite parti di elli chì facenu una cosa bè. E poi li combina cum'è necessariu.

Cumu fà cambiamenti à e biblioteche senza cumpatibilità inversa?

Un modulu Terraform cumunu, cum'è una biblioteca regulare, hà bisognu di cumunicà in qualchì modu i cambiamenti à l'utilizatori senza esse cumpatibili in retrocede. Hè fastidiosu quandu questi cambiamenti accadenu in e biblioteche, è hè cusì fastidiosu quandu i cambiamenti chì ùn sò micca cumpatibili sò fatti in i moduli Terraform. Hè cunsigliatu di utilizà git tags è semver quandu si usanu moduli Terraform.

U vostru serviziu di pruduzzione funziona nantu à u vostru laptop o in un centru di dati?

Hashicorp hà arnesi cum'è nuvola terraforme per eseguisce a vostra terraforma. Questi servizii centralizzati facenu fàciule di gestisce, audità è appruvà i cambiamenti di terraform.

Ùn scrive micca testi?

L'ingegneri ricunnosce chì u codice deve esse pruvatu, ma elli stessi spessu si scurdanu di pruvà quandu travaglianu cù Terraform. Per l'infrastruttura, questu hè pienu di mumenti traditori. U mo cunsigliu hè di "pruvà" o "creà esempi" di stacks usendu moduli chì ponu esse implementati currettamente per a prova durante CI / CD.

Terraform è microservizi

A vita è a morte di e cumpagnie di microservizi dipende da a rapidità, l'innuvazione è a disrupzione di i novi stacks di microservizi.

L'aspettu negativu più cumuni assuciatu cù l'architetture di microserviziu, è chì ùn pò micca esse eliminati, hè in relazione cù u travagliu, micca u codice. Se pensate à Terraform cum'è solu un modu per automatizà solu u latu di l'infrastruttura di una architettura di microservizi, allora vi mancanu i veri benefici di u sistema. Avà hè digià tuttu hè cum'è codice.

Source: www.habr.com

Add a comment