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 -
Comparare l'esperienza cù Terraform è CloudFormation
Prima di vene à
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.
Codice cum'è Code
Ci hè ancu l'infrastruttura nantu à quale travaglia.
Infrastruttura cum'è Codice
Ma da induve hè ella ? Cumu monitorà? Induve vive u vostru codice? I sviluppatori anu bisognu di permessu di accessu?
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
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
Detecta megliu a deriva
Assicuratevi chì a realtà currisponde à e aspettative.
Cù Terraform avete ganci di ciclu di vita assai più avanzati per a rilevazione di a deriva. Per esempiu, entre u cumandamentu
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'è
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è,
Ù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'è
Ù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à
Source: www.habr.com