Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

Sembra chì i sviluppatori di Terraform offrenu e migliori pratiche abbastanza convenienti per travaglià cù l'infrastruttura AWS. Ci hè solu una sfumatura. À u tempu, u numeru di ambienti aumenta, ognunu cù e so caratteristiche. Quasi una copia di a pila d'applicazioni appare in a regione vicina. È u codice Terraform deve esse copiatu cù cura è editatu sicondu i novi esigenze o fattu in un fiocco di neve.

U mo rapportu nantu à i mudelli in Terraform per cumbatte u caosu è a rutina manuale nantu à prughjetti grandi è longu.

Video:

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

Aghju 40 anni, sò in IT da 20 anni. Aghju travagliatu per Ixtens per 12 anni. Semu impegnati in u sviluppu guidatu da e-commerce. È aghju praticatu e pratiche DevOps per 5 anni.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

A mo storia serà nantu à a mo sperienza in un prughjettu in una cumpagnia chì u nome ùn diceraghju micca, ammucciatu daretu à un accordu di non divulgazione.

I numeri nantu à a slide sò indicati per capiscenu a scala di u prugettu. È tuttu ciò chì diceraghju dopu hè ligatu à Amazon.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

Aghju aghjustatu stu prughjettu 4 anni fà. È a refactoring di l'infrastruttura era in piena forza perchè u prugettu era crisciutu. È i mudelli chì anu utilizatu ùn eranu più adattati. E datu tutta a crescita pianificata di u prugettu, era necessariu di vene cun qualcosa di novu.

Grazie à Matvey, chì ieri ci hà dettu ciò chì hè accadutu à Dodo Pizza. Hè ciò chì hè accadutu quì 4 anni fà.

I sviluppatori sò ghjunti è cuminciaru à fà codice di infrastruttura.

I mutivi più evidenti per quessa era necessariu era u tempu di mercatu. Era necessariu di assicurà chì a squadra DevOps ùn era micca un collu di buttiglia durante u rollout. E frà altre cose, Terraform è Puppet sò stati usati à u primu livellu.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

Terraform hè un prughjettu open source da HashiCorp. È per quelli chì ùn sanu mancu ciò chì questu hè, i prossimi slides.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

Infrastruttura cum'è codice significa chì pudemu descriverà a nostra infrastruttura è dumandà à certi robots per assicurà chì avemu ricevutu e risorse chì avemu descrittu.

Per esempiu, avemu bisognu di una macchina virtuale. Descriveremu è aghjunghje parechji parametri necessarii.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

Dopu questu, cunfiguremu l'accessu à Amazon in a cunsola. È avemu da dumandà u pianu Terraform. U pianu Terraform dicerà: "Va bè, pudemu fà queste cose per a vostra risorsa". È almenu una risorsa serà aghjuntu. È ùn sò micca previsti cambiamenti.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

Una volta chì site cuntentu di tuttu, pudete dumandà à Terraform per applicà è Terraform creà una istanza per voi, è riceverete una macchina virtuale in u vostru nuvulu.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

In più u nostru prughjettu hè sviluppatu. Avemu aghjustatu qualchi cambiamenti quì. Dumandemu più istanze, aghjunghjemu 53 voci.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

È ripetemu. Per piacè pianificà. Videmu chì cambiamenti sò previsti. Applicamu. È cusì cresce a nostra infrastruttura.

Terraform usa qualcosa chjamati schedarii statali. Questu hè, tutti i cambiamenti chì vanu in Amazon sò salvati in un schedariu induve per ogni risorsa chì avete descrittu, ci sò risorse currispondenti chì sò stati creati in Amazon. Cusì, quandu a descrizzione di una risorsa cambia, Terraform sapi esattamente ciò chì deve esse cambiatu in Amazon.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

Questi schedarii statali eranu urigginariamenti solu schedari. E l'avemu guardatu in Git, chì era estremamente inconveniente. Qualchissia s'hè sempre scurdatu di fà cambiamenti, è parechji cunflitti nascenu.

Avà hè pussibule aduprà u backend, vale à dì Terraform hè specificatu in quale bucket è da quale chjave u schedariu statale deve esse salvatu. È Terraform stessu hà da piglià cura di ottene stu schedariu di statu, fendu tutta a magia è rimette u risultatu finali.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

A nostra infrastruttura cresce. Eccu u nostru codice. È avà ùn vulemu micca solu di creà una macchina virtuale, vulemu avè un ambiente di prova.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

Terraform permette di creà una cosa cum'è un modulu, vale à dì, discrivite a stessa cosa in qualchì cartulare.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

E, per esempiu, in a prova, chjamate stu modulu è uttene u listessu cum'è s'ellu avia eseguitu Terraform applica in u modulu stessu. Per pruvà ci sarà stu codice.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

Per a produzzione, pudemu mandà qualchi cambiamenti quì, perchè in a prova ùn avemu micca bisognu di grandi istanze; in a pruduzzione, i grandi casi sò solu utili.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

E poi turnaraghju à u prugettu. Era un compitu difficiule, l'infrastruttura prevista era assai grande. È era necessariu d'alcuni postu tuttu u codice per chì sia cunvenutu per tutti: sia per quelli chì facenu mantenimentu nantu à stu codice sia per quelli chì facenu cambiamenti. È era previstu chì qualsiasi sviluppatore puderia andà è riparà l'infrastruttura quantu necessariu per a so parte di a piattaforma.

Questu hè un arbulu di repertoriu chì hè cunsigliatu da HashiCorp stessu sè vo avete un grande prughjettu è hè sensu di dividisce tutta l'infrastruttura in qualchi pezzi chjuchi, è discrive ogni pezzu in un cartulare separatu.

Avè una vasta biblioteca di risorse, pudete chjamà apprussimatamente a stessa cosa in teste è in produzzione.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

In u nostru casu, questu ùn era micca cumplettamente adattatu, perchè a pila di teste per i sviluppatori o per a prova deve esse acquistata in modu più simplice. Ma ùn vulia micca passà per e cartulare è appricà in a sequenza necessaria, è preoccupate chì a basa di dati risusciteghja, è poi l'istanza chì usa sta basa di dati cresce. Dunque, tutte e teste sò state lanciate da un cartulare. I stessi moduli sò stati chjamati quì, ma tuttu hè statu fattu in una sola corsa.

Terraform si occupa di tutte e dipendenze. È sempre crea risorse in a sequenza in modu chì pudete uttene un indirizzu IP, per esempiu, da una istanza nova creata, è uttene stu indirizzu IP in u record di route53.

Inoltre, a piattaforma hè assai grande. È lancià una pila di teste, ancu per una ora, ancu per 8 ore, hè una impresa abbastanza caru.

È avemu automatizatu sta materia. È u travagliu di Jenkins ci hà permessu di gestisce a pila. In questu, era necessariu di lancià una dumanda di pull cù i cambiamenti chì u sviluppatore vole pruvà, specificà tutte l'opzioni, cumpunenti è dimensioni necessarii. S'ellu vole teste di rendiment, allora pò piglià più casi. S'ellu hà solu bisognu di verificà chì una forma si apre, allora puderia principià à u salariu minimu. È ancu indicà se un cluster hè necessariu o micca, etc.

È dopu Jenkins hà imbuttatu un script di shell, chì hà mudificatu pocu u codice in u cartulare Terraform. Aghju eliminatu i fugliali inutili è aghjustatu i schedarii necessarii. È dopu cù una corsa di Terraform applicà a pila hè stata alzata.

E poi ci sò stati altri passi chì ùn vogliu micca andà.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

A causa di u fattu chì per a prova avemu bisognu di un pocu più d'opzioni chè in a pruduzzione, avemu avutu à fà copie di i moduli per chì in queste copie pudemu aghjunghje quelli funziunalità chì eranu necessarii solu per a prova.

È hè accadutu chì, in a prova, vogliu pruvà quelli cambiamenti chì eventualmente entreranu in produzzione. Ma in fattu, una cosa hè stata pruvata, è un pocu sfarente hè stata utilizata in a produzzione. È ci era una piccula ruttura in u mudellu chì in a produzzione tutti i cambiamenti sò stati applicati da u squadra di l'operazione. E qualchì volta si hè risultatu chì quelli cambiamenti chì duveranu passà da a prova à a pruduzzione fermanu in una altra versione.

Inoltre, ci era un tale prublema chì hè statu aghjuntu un novu serviziu, chì era un pocu sfarente di qualchì digià esistente. E invece di mudificà un modulu esistente, avemu avutu da fà una copia di questu è aghjunghje i cambiamenti necessarii.

Essenzialmente, Terraform ùn hè micca una lingua vera. Questa hè una dichjarazione. Se avemu bisognu di dichjarà qualcosa, allora a dichjarà. È tuttu travaglia.

À un certu puntu, quandu una di e mo dumande di pull hè stata discussa, unu di i mo culleghi hà dettu chì ùn ci era micca bisognu di creà fiocchi di neve. Mi dumandu ciò chì vulia dì. Ci hè un fattu scientificu chì ùn ci sò micca dui fiocchi di neve idèntici in u mondu, sò tutti ligeramente diffirenti. E appena aghju intesu questu, aghju subitu sentitu u pesu pienu di u codice Terraform. Perchè quandu era necessariu di passà da a versione à a versione, Terraform hà bisognu di cambiamenti di catena di rottura, vale à dì chì u codice ùn era più cumpatibile cù a versione successiva. È avemu avutu à fà una dumanda di pull, chì copre quasi a mità di i schedari in l'infrastruttura, per purtà l'infrastruttura à a prossima versione di Terraform.

È dopu chì un tale fiocco di neve apparsu, tuttu u codice di Terraform chì avemu avutu turnatu in una grande, grande pila di neve.

Per un sviluppatore esternu chì hè fora di l'operazione, questu ùn importa micca assai per ellu, perchè hà fattu una dumanda di pull, a so risorsa hà cuminciatu. È questu hè tuttu, ùn hè più a so preoccupazione. È a squadra DevOps, chì assicura chì tuttu hè bè, hè obligatu à fà tutti questi cambiamenti. È u costu di sti cambiamenti cresce assai, assai cù ogni fioccu di neve supplementu.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

Ci hè una storia di cumu un studiente in un seminariu disegna dui cerchi perfetti cù u gesso nantu à a lavagna. È u maestru hè surprised cumu hà sappiutu disegnà cusì lisamente senza bussola. U studiente risponde: "Moltu simplice, aghju passatu dui anni in l'esercitu per trasfurmà un macinatu di carne".

È di i quattru anni chì aghju participatu à stu prughjettu, aghju fattu Terraform per circa dui anni. E, sicuru, aghju qualchì truccu, qualchi cunsiglii per simplificà u codice Terraform, travaglià cun ellu cum'è una lingua di prugrammazione è riduce a carica nantu à i sviluppatori chì deve mantene stu codice à ghjornu.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

A prima cosa chì mi piacerebbe principià hè Symlinks. Terraform hà assai codice ripetitivu. Per esempiu, a chjama à u fornitore in quasi ogni puntu induve creamu un pezzu di infrastruttura hè a stessa. È hè logicu di mette in un cartulare separatu. È induve u fornitore hè necessariu di fà ligami simbolichi à stu schedariu.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

Per esempiu, in a produzzione utilizate assume u rolu, chì vi permette di acquistà diritti d'accessu à qualchì contu Amazon esternu. È avè cambiatu un schedariu, tutti i restanti in l'arbulu di risorse avarà i diritti necessarii per chì Terraform sapi quale segmentu di Amazon accede.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

Induve i Symlinks fallenu? Comu dissi, Terraform hà schedarii statali. È sò assai, assai cool. Ma a cosa hè chì Terraform inizializza u backend in u primu locu. È ùn pò micca aduprà variàbili in questi paràmetri; deve esse sempre scritti in testu.

È in u risultatu, quandu qualchissia face una nova risorsa, copia un pocu di u codice da altri cartulare. È pò fà un sbagliu cù a chjave o cù u bucket. Per esempiu, face una cosa di sandbox da sandbox, è poi face in a produzzione. È cusì pò esse chì u bucket in a pruduzzione serà utilizatu da sandbox. Di sicuru, truveranu prestu. Serà pussibule di riparà questu in una certa manera, ma quantunque hè una perdita di tempu è, in una certa misura, risorse.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

Chì pudemu fà dopu ? Prima di travaglià cù Terraform, avete bisognu di inizializà. À l'inizializazione, Terraform scarica tutti i plugins. À un certu puntu si sò spartuti da un monolitu à una architettura più microserviziu. È avete sempre bisognu di fà Terraform init in modu chì tira tutti i moduli, tutti i plugins.

È pudete aduprà un script shell, chì, prima, pò uttene tutte e variàbili. U script di shell ùn hè micca limitatu in ogni modu. È, secondu, i camini. Se avemu sempre aduprà u percorsu chì hè in u repositoriu cum'è a chjave per u schedariu statale, allora, per quessa, l'errore quì serà eliminatu.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

Induve possu piglià i dati? file JSON. Terraform permette di scrive infrastruttura micca solu in hcl (HashiCorp Configuration Language), ma ancu in JSON.

JSON hè faciule da leghje da un script di shell. Per quessa, pudete mette u schedariu di cunfigurazione cù bucket in un locu. È utilizate stu bucket in u codice Terraform è in u script di shell per l'inizializazione.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

Perchè hè impurtante avè un bucket per Terraform? Perchè ci hè una cosa cum'è i schedarii di u statu remoto. Vale à dì, quandu aghju suscitatu qualchì risorsa, per dì à Amazon: "Per piacè risaltà l'istanza", aghju bisognu di specificà assai parametri richiesti.

È questi identificatori sò guardati in un altru cartulare. È possu andà è dì: "Terraform, per piacè corre à u schedariu statale di quella stessa risorsa è pigliami questi identificatori". È cusì si vede una certa unificazione trà e diverse regioni o ambienti.

Ùn hè micca sempre pussibule di utilizà un schedariu di statu remoto. Per esempiu, avete creatu un VPC da a manu. È u codice Terraform chì crea u VPC crea tali VPC diffirenti chì duverà assai tempu è avete da aghjustà unu à l'altru, cusì pudete aduprà u truccu seguenti.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

Questu hè, fate un modulu chì pare fà un VPC è, per esse, vi dà identificatori, ma in fattu ci hè solu un schedariu cù valori codificati chì ponu esse usatu per creà a stessa istanza.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

Ùn hè micca sempre necessariu di salvà u schedariu di statu in u nuvulu. Per esempiu, quandu teste moduli, pudete aduprà l'inizializazione backend, induve u schedariu serà simplicemente salvatu nantu à u discu à u mumentu di a prova.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

Avà un pocu nantu à a prova. Chì pudete pruvà in Terraform? Probabilmente assai hè pussibule, ma parleraghju di queste 4 cose.

HashiCorp hà capitu cumu u codice Terraform deve esse furmatu. È Terraform fmt permette di furmà u codice chì edità secondu sta credenza. In cunsiquenza, i testi devenu necessariamente verificà se u furmatu currisponde à ciò chì HashiCorp hà legatu, in modu chì ùn ci hè bisognu di cambià u locu di parentesi, etc.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

U prossimu hè Terraform validate. Hè pocu più chè verificà a sintassi - ala, se tutti i parentesi sò pari. Cosa hè impurtante quì? A nostra infrastruttura hè assai vasta. Ci sò assai diversi papà in questu. È in ogni avete bisognu di eseguisce Terraform validate.

In cunsiquenza, per accelerà a prova, eseguimu parechji prucessi in parallelu utilizendu paralleli.

Parallel hè una cosa assai bella, aduprate.

Ma ogni volta chì Terraform inizializza, va à HashiCorp è dumanda: "Quali sò l'ultime versioni di plugin? È u plugin chì aghju in u cache - hè u dirittu o u sbagliatu?" È questu rallenta à ogni passu.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

Se dite à Terraform induve sò i plugins, allora Terraform diciarà: "Va bè, questu hè probabilmente l'ultima cosa chì ci hè. Ùn andaraghju da nudda parte, cumminciaraghju subitu à validà u vostru codice Terraform.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

In ordine per riempia u cartulare cù i plugins nicissariu, avemu un codice Terraform assai sèmplice chì solu deve esse inizializatu. Quì, sicuru, avete bisognu di specificà tutti i fornituri chì in qualchì manera participanu à u vostru codice, altrimenti Terraform dicerà: "Ùn cunnosci micca un certu fornitore perchè ùn hè micca in u cache".

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

Dopu hè u pianu Terraform. Comu dissi, u sviluppu hè ciclicu. Facemu cambiamenti à u codice. E poi avete bisognu di sapè chì cambiamenti sò previsti per l'infrastruttura.

È quandu l'infrastruttura hè assai, assai grande, pudete cambià un modulu, riparà un ambiente di prova o una regione specifica è rompe un pocu vicinu. Dunque, u pianu Terraform deve esse fattu per tutta l'infrastruttura è mostra ciò chì i cambiamenti sò previsti.

Pudete fà questu intelligente. Per esempiu, avemu scrittu un script Python chì risolve i dependenzii. E sicondu ciò chì hè statu cambiatu: un modulu Terraform o solu un cumpunente specificu, face piani per tutti i cartulare dipindenti.

I piani Terraform deve esse fattu nantu à dumanda. Almenu hè ciò chì facemu.

Di sicuru, hè bonu per fà teste per ogni cambiamentu, per ogni impegnu, ma i piani sò abbastanza caru. È in una dumanda di pull, dicemu: "Per piacè dammi i piani". U robot principia. È manda in cumenti o aghjunghje tutti i piani chì sò previsti da i vostri cambiamenti.

Un pianu hè abbastanza caru. Ci vole tempu perchè Terraform và in Amazon è dumanda: "Questa istanza esiste sempre? Questu autoscale hà esattamente i stessi parametri?" È per accelerà questu, pudete aduprà un paràmetru cum'è refresh=false. Questu significa chì Terraform scaricarà u statu da S3. È crede chì u statu currisponderà esattamente ciò chì hè in Amazon.

Un tali pianu Terraform và assai più veloce, ma u statu deve currisponde à a vostra infrastruttura, vale à dì in un locu, in qualchì tempu, u rinfrescante Terraform deve principià. Terraform refresh face esattamente questu: u statu currisponde à ciò chì hè in l'infrastruttura attuale.

È avemu bisognu di parlà di sicurità. Questu hè induve duvemu principià. Induve eseguite Terraform è Terraform corre nantu à a vostra infrastruttura ci hè una vulnerabilità. Questu hè, esse essenzialmente esecutà u codice. È se a dumanda di pull cuntene un tipu di codice maliziusu, allura pò esse eseguitu nantu à una infrastruttura chì hà troppu accessu. So esse attenti induve vo curriri pianu Terraform.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

A prossima cosa chì vogliu parlà hè a prova di dati d'utilizatori.

Chì sò i dati di l'utilizatori? In Amazon, quandu creemu una istanza, pudemu mandà una certa lettera cù l'istanza - meta data. Quandu l'istanza principia, di solitu cloud init hè sempre presente in questi casi. Cloud init leghje sta lettera è dice: "OK, oghje sò u bilanciatore di carica". È in cunfurmità cù questi patti, faci qualchi azzioni.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

Ma, sfurtunatamenti, quandu facemu u pianu Terraform è Terraform applicà, i dati di l'utilizatori s'assumiglia à stu tipu di mush di numeri. Questu hè, ellu vi manda solu l'hash. È tuttu ciò chì pudete vede in u pianu hè s'ellu ci saranu cambiamenti o se l'hash resterà u listessu.

È s'ellu ùn fate micca attente à questu, allora qualchì schedariu di testu rottu pò finisce in Amazon, nantu à a vera infrastruttura.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

In alternativa, quandu eseguite, pudete specificà micca tutta l'infrastruttura, ma solu u mudellu. È in u codice dite: "Per piacè vede stu mudellu nantu à a mo schermu". È in u risultatu, pudete ottene una stampata di ciò chì i vostri dati seranu in Amazon.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

Un'altra opzione hè di utilizà un modulu per generà dati d'utilizatori. Puderete applicà stu modulu. Ricevete u schedariu nantu à u discu. Paragunate cù u riferimentu. È cusì, se un tippu decide di curregà un pocu i dati di l'utilizatori, allora i vostri testi diceranu: "OK, ci sò qualchi cambiamenti quì è quì - questu hè normale".

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

A prossima cosa chì vogliu parlà hè Automate Terraform applica.

Di sicuru, hè abbastanza paura di fà Terraform applicà in modu automaticu, perchè chì sà chì cambiamenti sò ghjunti quì è quantu distruttivi ponu esse per l'infrastruttura vivente.

Per un ambiente di prova, questu hè tuttu normale. Questu hè, un travagliu chì crea un ambiente di prova hè ciò chì tutti i sviluppatori necessitanu. È una espressione cum'è "tuttu hà travagliatu per mè" ùn hè micca un meme divertente, ma una prova chì una persona hè stata cunfusa, hà risuscitatu una pila, è hà realizatu alcune teste nantu à sta pila. È hà assicuratu chì tuttu era bè quì è hà dettu: "Va bè, u codice chì aghju liberatu hè statu pruvatu".

In a pruduzzione, sandbox è altri ambienti chì sò più critichi di l'affari, pudete aduprà parzialmente alcune risorse in modu abbastanza sicuru perchè ùn resulta micca in morte di nimu. Quessi sò: gruppi autoscale, gruppi di sicurità, roles, route53, è a lista ci pò esse abbastanza grande. Ma tene un ochju nantu à ciò chì succede, leghjite i rapporti di l'applicazione automatizati.

Induve hè periculosa o spaventosa per applicà, per esempiu, s'ellu si tratta di qualchì risorsa persistente da una basa di dati, dopu riceve rapporti chì ci sò cambiamenti micca applicati in qualchì pezzu di l'infrastruttura. È l'ingegnere, sottu supervisione, principia i travaglii per applicà o fà da a so cunsola.

Amazon hà una cosa cum'è Terminate a prutezzione. È pò prutege in certi casi da cambiamenti chì ùn sò micca necessariu per voi. Hè, Terraform si n'andò in Amazon è disse: "Aghju bisognu di tumbà sta istanza per fà una altra". È Amazon dice: "Scusate, micca oghje. Avemu a prutezzione di Terminate ".

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

È a ciliegina nantu à a torta hè l'ottimisazione di codice. Quandu avemu travagliatu cù u codice Terraform, avemu da passà un gran numaru di parametri à u modulu. Quessi sò i paràmetri chì sò necessarii per creà un tipu di risorsa. È u codice si trasforma in una larga lista di paràmetri chì deve esse passatu da u modulu à u modulu, da u modulu à u modulu, soprattuttu se i moduli sò nidificati.

È hè assai difficiule di leghje. Hè assai difficiule di rivisione questu. È assai spessu si trova chì certi paràmetri sò sottumessi à rivisione è ùn sò micca esattamente ciò chì hè necessariu. E questu custa tempu è soldi per riparà dopu.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

Per quessa, vi cunsigliu di utilizà una cosa cum'è un paràmetru cumplessu chì include un certu arbre di valori. Vale à dì, avete bisognu di qualchì tipu di cartulare induve avete tutti i valori chì vulete avè in qualchì ambiente.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

È chjamendu stu modulu, pudete ottene un arbre chì hè generatu in un modulu cumuni, vale à dì in un modulu cumuni chì travaglia u listessu per tutta l'infrastruttura.

In questu modulu pudete fà qualchi calculi utilizendu una funzione cusì recente in Terraform cum'è lucali. È dopu, cù una sola output, dà qualchì paràmetru cumplessu, chì pò include array hashes, etc.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

Questu hè induve tutte e migliori scuperte chì aghju finitu. È vogliu cuntà una storia di Culumbus. Quand'ellu cercava soldi per a so spidizioni per scopre l'India (cum'ellu pensava allora), nimu u cridia è pensanu chì era impussibile. Allora disse: "Assicuratevi chì l'ovu ùn cascà micca". Tutti i banchieri, assai ricchi è prubabilmente intelligenti, anu pruvatu à mette in qualchì manera l'ovu, è cuntinuò à cascà. Allora Culumbu pigliò l'ovu è pressu un pocu. A cunchiglia s'arrugava è l'ovu restò immobile. Dicianu: "Oh, hè troppu faciule!" È Culumbus hà rispostu: "Iè, hè troppu simplice. È quandu apre l'India, tutti aduprà sta strada cummerciale ".

È ciò chì vi aghju dettu hè probabilmente cose abbastanza simplici è triviali. È quandu amparate nantu à elli è cuminciate à aduprà, hè in l'ordine di e cose. Allora apprufittate. E s'ellu sò cose cumplettamente normale per voi, almenu sapete cumu mette l'ovu per ùn cascà.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

Semu a summa:

  • Pruvate per evità i fiocchi di neve. E menu fiocchi di neve, menu risorse avete bisognu di fà cambiamenti in tutta a vostra grande infrastruttura.
  • Cambiamenti custanti. Vale à dì, quandu alcuni cambiamenti accadenu in u codice, avete bisognu di mette a vostra infrastruttura in cunfurmità cù questi cambiamenti u più prestu pussibule. Ùn deve esse una situazione induve qualchissia vene à circà à Elasticsearch dui o trè mesi dopu, face un pianu Terraform, è ci sò una mansa di cambiamenti chì ùn hà micca aspittatu. È ci vole assai tempu per mette tuttu in ordine.
  • Testi è automatizazione. Più u vostru codice hè cupartu di testi è funzioni, più cunfidenza avete chì fate tuttu bè. È a consegna automatica aumenterà a vostra fiducia parechje volte.
  • U codice per l'ambienti di prova è di produzzione deve esse quasi u listessu. In pratica, perchè a pruduzzione hè sempre un pocu sfarente è ci saranu sempre alcune sfumature chì andaranu oltre l'ambiente di prova. Ma in ogni modu, più o minus, questu pò esse assicuratu.
  • È s'è vo avete assai di codice Terraform è si pigghia assai tempu à tena stu codice à data, tandu ùn hè mai troppu tardu à refactor è arrivare lu in bona forma.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

  • Infrastruttura immutable. Consegna AMI in u calendariu.
  • Struttura per route53 quandu avete assai entrate è vulete chì esse in un ordine coherente.
  • Combatte i limiti di freccia API. Questu hè quandu Amazon dice: "Eccu, ùn possu micca accettà più richieste, per piacè aspettate". È a mità di l'uffiziu aspetta finu à pudè lancià a so infrastruttura.
  • Spot instances. Amazon ùn hè micca un avvenimentu economicu è i spots permettenu di salvà assai. È quì pudete cuntà un rapportu sanu nantu à questu.
  • Ruoli di sicurezza è IAM.
  • A ricerca di risorse perse, quandu avete casi di origine scunnisciuta in Amazone, manghjanu soldi. Ancu s'è i casi custanu $ 100-150 per mese, questu hè più di $ 1 per annu. Truvà tali risorse hè un affari prufittu.
  • E istanze riservate.

Modelli in Terraform per cumbatte u caosu è a rutina manuale. Maxim Kostrikin (Ixtens)

Hè tuttu per mè. Terraform hè assai cool, l'utilizate. Grazie!

I vostri dumanni

Grazie per u rapportu! U vostru schedariu di statu hè in S3, ma cumu si risolve u prublema chì parechje persone ponu piglià stu schedariu di statu è pruvate à espansione?

Prima di tuttu, ùn avemu micca fretta. Siconda, ci sò bandiere, in quale avemu infurmatu chì avemu travagliatu annantu à qualchì pezzu di codice. Questu hè, malgradu u fattu chì l'infrastruttura hè assai grande, questu ùn significa micca chì qualchissia hè sempre aduprà qualcosa. È quandu ci era una fase attiva, questu era un prublema; avemu almacenatu i fugliali di statu in Git. Questu era impurtante, altrimenti qualcunu faria un schedariu di statu, è avemu avutu à mette inseme manualmente per chì tuttu cuntinueghja. Avà ùn ci hè micca un tali prublema. In generale, Terraform risolviu stu prublema. È se qualcosa hè cambiatu constantemente, pudete aduprà chjusi, chì impediscenu ciò chì avete dettu.

Aduprate open source o impresa?

Nisuna impresa, vale à dì tuttu ciò chì pudete andà è scaricà gratuitamente.

Mi chjamu Stanislav. Vuliu fà una piccula aghjunta. Avete parlatu di una funzione di Amazon chì vi permette di fà una istanza unkillable. Questu hè ancu in Terraform stessu; in u bloccu Life Second pudete specificà una prohibizione di cambiamenti o una prohibizione di distruzzione.

U tempu era limitatu. Bon puntu.

Vuliu ancu dumandà duie cose. Prima, avete parlatu di teste. Avete utilizatu qualsiasi strumentu di prova? Aghju intesu parlà di u plugin Test Kitchen. Forse ci hè qualcosa di più. È vogliu ancu dumandà à i Valori Locali. Cumu sò fundamentalmente differenti da e Variabili di input? E perchè ùn possu micca parametrizzà qualcosa solu per i Valori Locali ? Aghju pruvatu à capisce stu tema, ma in qualchì modu ùn pudia micca capisce da mè stessu.

Pudemu parlà in più dettu fora di sta stanza. I nostri strumenti di prova sò completamente fatti da sè stessu. Ùn ci hè nunda da pruvà. In generale, ci sò l'opzioni quandu i testi automatizati piglianu l'infrastruttura in qualchì locu, verificate chì hè bè, è poi distrugge tuttu cù un rapportu chì a vostra infrastruttura hè sempre in bona forma. Ùn avemu micca questu perchè e pile di teste sò eseguite ogni ghjornu. È basta. È se qualcosa cumencia à rompe, cumminciarà à rompe senza chì noi a verificate in un altru locu.

In quantu à i Valori Locali, cuntinuemu a conversazione fora di a stanza.

Bonghjornu! Grazie per u rapportu! Moltu informativu. Avete dettu chì avete assai di u listessu tipu di codice per discrive l'infrastruttura. Avete pensatu à generà stu codice?

Grande dumanda, grazie! U puntu hè chì quandu usemu l'infrastruttura cum'è codice, assumemu chì fighjemu u codice è capiscenu quale infrastruttura si trova daretu à quellu codice. Se u codice hè generatu, allora avemu bisognu di imagine quale codice serà generatu per capisce chì tipu d'infrastruttura serà quì. O generemu codice, cummettemu, è essenzialmente a listessa cosa succede. Allora avemu seguitu u percorsu chì avemu scrittu, avemu avutu. I generatori Plus apparsu un pocu dopu quandu avemu cuminciatu à fà. È era digià troppu tardi per cambià.

Avete intesu qualcosa di jsonnet ?

No.

Fighjate, questu hè una cosa assai bella. Veju un casu specificu induve pudete applicà è generà una struttura di dati.

I generatori sò boni quandu avete, cum'è in u scherzu nantu à una macchina di rasatura. Questu hè, a prima volta a faccia hè diversa, ma dopu tutti anu a stessa faccia. I generatori funzionanu assai bè. Ma, sfurtunatamenti, i nostri visi sò un pocu sfarente. Questu hè u prublema.

Basta à vede. Grazie!

Mi chjamu Maxim, sò di Sberbank. Avete parlatu un pocu di cumu avete pruvatu à purtà Terraform à l'equivalente di una lingua di prugrammazione. Ùn hè micca più faciule d'utilizà Ansible?

Quessi sò cose assai diverse. Pudete creà risorse in Ansible, è Puppet pò creà risorse in Amazon. Ma Terraform hè ghjustu affilata.

Avete solu Amazon?

Ùn hè micca chì avemu solu Amazon. Avemu quasi solu Amazon. Ma a funzione chjave hè chì Terraform ricorda. In Ansible, se dite: "Datemi 5 istanze", allora suscitarà, è poi dite: "E avà aghju bisognu di 3". È Terraform dicerà: "Va bè, uccideraghju 2", è Ansible diciarà: "Va bè, eccu 3 per voi". Totale 8.

Bonghjornu! Grazie per u vostru rapportu! Era assai interessante per sente di Terraform. Vogliu fà subitu un pocu cummentariu annantu à u fattu chì Terraform ùn hà ancu una liberazione stabile, cusì trattate Terraform cun grande prudenza.

Una bona cucchiara per cena. Vale à dì, s'è vo avete bisognu di una suluzione, tandu qualchì volta si mette fora ciò chì hè inestabile, etc., ma travaglia è ci hà aiutatu.

A quistione hè questu. Aduprate backend Remote, utilizate S 3. Perchè ùn utilizate micca u backend ufficiale?

Ufficiale?

Terraform Cloud.

Quandu hè apparsu ?

Circa 4 mesi fà.

S'ellu era apparsu 4 anni fà, allora probabilmente averia rispostu à a vostra dumanda.

Ci hè digià una funzione integrata è chjusi, è pudete almacenà un schedariu di statu. Pruvate. Ma ùn aghju micca pruvatu ancu.

Viaghjàmu in un grande trenu chì si move à grande velocità. È ùn pudete micca solu piglià uni pochi di vitture è scaccià.

Avete parlatu di fiocchi di neve, perchè ùn avete micca usatu branch ? Perchè ùn hà micca travagliatu cusì?

U nostru approcciu hè chì tutta l'infrastruttura hè in un repository. Terraform, Puppet, tutti i scripts chì sò in qualchì modu ligati à questu, sò tutti in un repository. Questu modu pudemu assicurà chì i cambiamenti incrementali sò pruvati unu dopu l'altru. S'ellu era una mansa di rami, allora un tali prughjettu seria quasi impussibile di mantene. Passanu sei mesi, è si divergenu tantu chì hè solu una sorta di punizione. Hè ciò chì vulia scappà prima di refactoring.

Allora ùn viaghja micca?

Questu ùn viaghja micca in tuttu.

In ramu aghju tagliatu u slide di u cartulare. Questu hè, se fate per ogni pila di teste, per esempiu, a squadra A hà u so propiu cartulare, a squadra B hà u so propiu cartulare, allora questu ùn funziona micca. Avemu creatu un codice di l'ambiente di prova unificatu chì era abbastanza flessibile per adattà à tutti. Questu hè, avemu servitu un codice.

Bonghjornu! Mi chjamu Yura! Grazie per u rapportu! Quistioni nantu à i moduli. Dite chì avete aduprà moduli. Cumu risolve u prublema si sò stati fatti cambiamenti in un modulu chì ùn sò micca cumpatibili cù u cambiamentu di l'altru? Avete in qualchì modu versione di i moduli o pruvate à purtà un wunderwaffle per risponde à dui esigenze?

Questu hè un grande prublema di pila di neve. Hè ciò chì soffremu quandu qualchì cambiamentu innocu pò rompe una parte di l'infrastruttura. È questu serà notu solu dopu à un bellu pezzu.

Questu hè, ùn hè micca statu risoltu ancu?

Fate moduli universali. Evite i fiocchi di neve. È tuttu hà da travaglià. A seconda mità di u rapportu hè nantu à cumu per evità questu.

Bonghjornu! Grazie per u rapportu! Vogliu chjarificà. In daretu à e scene ci era una grande pila chì aghju vinutu per. Cumu sò integrati a distribuzione di pupi è di rolu?

User-dati.

Hè, basta à sputà u schedariu è in qualchì manera eseguite?

User-data hè una nota, vale à dì quandu facemu un clone di l'imaghjini, Daemon si alza quì è, circannu di capisce quale hè, leghje a nota chì hè un equilibratore di carica.

Questu hè, hè questu un tipu di prucessu separatu chì hè datu?

Ùn avemu micca inventatu. Avemu aduprà.

Bonghjornu! Aghju solu una quistione di User - data. Avete dettu chì ci sò prublemi quì, chì qualchissia puderia mandà qualcosa à u locu sbagliatu. Ci hè un modu per almacenà i dati di l'utilizatori in u stessu Git, cusì chì hè sempre chjaru ciò chì i dati di l'utilizatori si riferiscenu?

Generemu User-data da u mudellu. Questu hè, un certu numaru di variàbili sò usati quì. È Terraform genera u risultatu finali. Per quessa, ùn pudete micca solu fighjà u mudellu è dì ciò chì succede, perchè tutti i prublemi sò ligati à u fattu chì u sviluppatore pensa chì ellu passa una stringa in questa variàbile, ma un array hè utilizatu quì. È ellu - bam è eiu - cusì è cusì, cusì è cusì, a linea dopu, è tuttu si ruttu. S'ellu hè una nova risorsa è una persona piglia è vede chì qualcosa ùn hè micca travagliatu, allora hè risolta rapidamente. È se stu gruppu autoscale hè aghjurnatu, allora à qualchì puntu l'istanze in u gruppu autoscale cumincianu à esse rimpiazzate. E bang, qualcosa ùn funziona. Fa male.

Ci hè chì l'unica suluzione hè di pruvà?

Iè, vi vede u prublema, aghjunghje passi di prova quì. Questu hè, a pruduzzioni pò ancu esse pruvata. Forsi ùn hè cusì còmuda, ma vi ponu dinù mette qualchi marchi - verificate chì User-dati hè chiovu quì sottu.

Mi chjamu Timur. Hè assai bellu chì ci sò rapporti nantu à cumu organizà bè Terraform.

Ùn aghju mancu principiatu.

Pensu chì forse à a prossima cunferenza ci sarà. Aghju una quistione simplice. Perchè codificà u valore in un modulu separatu invece di utilizà tfvars, vale à dì perchè hè un modulu cù valori megliu cà tfvars?

Questu hè, duverebbe scrive quì (slide: Production/environment/settings.tf): domain = variable, domain vpcnetwork, variable vpcnetwork è stvars - possu avè u listessu cosa?

Hè esattamente ciò chì facemu. Avemu riferitu à u modulu fonte di paràmetri, per esempiu.

Essenzialmente, questu hè tali tfvars. Tfvars hè assai convenientu in un ambiente di prova. Aghju tfvars per i grandi casi, per i chjuchi. È aghju lanciatu un schedariu in u cartulare. È aghju avutu ciò chì vulia. Quandu avemu tagliatu l'infrastruttura, vulemu chì sia pussibule di guardà è capisce immediatamente tuttu. È cusì risulta chì avete bisognu di fighjà quì, dopu fighjate à tfvars.

Hè pussibule avè tuttu in un locu?

Iè, tfvars hè quandu avete un codice. È hè usatu in parechji lochi diffirenti cù sfumaturi diffirenti. Allora ti tirassi tfvars è uttene e vostre sfumature. È simu infrastruttura cum'è codice in a so forma più pura. Aghju vistu è capitu.

Bonghjornu! Avete scontru situazioni induve u fornitore di nuvola interferiscenu cù ciò chì avete fattu Terraform? Diciamu chì edità i metadati. Ci sò chjavi ssh. E Google mette constantemente i so metadati è e so chjave. È Terraform sempre scrive chì hà cambiatu. Dopu ogni corsa, ancu s'ellu ùn cambia nunda, sempre dice chì aghjurnà stu campu avà.

Cù i chjavi, ma iè, una parte di l'infrastruttura hè affettata da questa cosa, vale à dì Terraform ùn pò micca cambià nunda. Ùn pudemu micca cambià nunda cù e nostre mani. Avemu campà cun ella per avà.

Questu hè, avete scontru qualcosa cum'è questu, ma ùn avete micca ghjuntu cù nunda, cumu si fa è si face ellu stessu?

Sfurtunatamente iè.

Bonghjornu! Mi chjamu Starkov Stanislav. Mail. ru Gruppu. Cumu risolve u prublema di generà un tag nantu à..., cumu si passa in l'internu ? Cum'è l'aghju capitu, attraversu User - data per specificà u nome d'ospitu, mette Puppet on? È a seconda parte di a quistione. Cumu risolve stu prublema in SG, vale à dì quandu generate SG, centinaie di casi di u listessu tipu, quale hè u nome currettu per elli?

Quelli casi chì sò assai impurtanti per noi, li nominemu bè. Quelli chì ùn sò micca necessariu, ci hè una nota chì questu hè un gruppu autoscale. È in teoria pudete chjappà è uttene un novu.

In quantu à u prublema cù u tag, ùn ci hè micca un tali prublema, ma ci hè un tali compitu. E usamu tags assai, assai pisanti, perchè l'infrastruttura hè grande è caru. È avemu bisognu di guardà induve andanu i soldi, cusì i tags ci permettenu di scumpressà ciò chì hè andatu induve. È, dunque, a ricerca di qualcosa chì significa assai soldi hè spesu quì.

Chì altru era a quistione?

Quandu SG crea centinaie di istanze, anu da esse distinti in qualchì manera?

Innò, micca. In ogni casu ci hè un agente chì informa chì aghju un prublema. Se un agente informa, allora l'agente sapi di ellu è, à u minimu, u so indirizzu IP esiste. Pudete digià scappà. Siconda, usemu Consul for Discovery, induve Kubernetes ùn hè micca. È Consul mostra ancu l'indirizzu IP di l'istanza.

Vale à dì, vi cuncintrate specificamente nantu à l'IP, è micca in u nome di l'ospite?

Hè impussibile di navigà per nome d'ospite, vale à dì chì ci sò assai. Ci sò identificatori di esempiu - AE, etc. Pudete truvà in un locu, pudete scaccià in a ricerca.

Bonghjornu! Aghju realizatu chì Terraform hè una bona cosa, adattatu per i nuvuli.

Micca solu.

Questa hè precisamente a quistione chì m'interessa. Sè decide di trasfurmà, dì, à Bare Metal in massa cù tutti i vostri casi? Ci sarà qualchì prublema ? O avete sempre aduprà altri prudutti, per esempiu, u listessu Ansible chì hè statu mintuatu quì?

Ansible hè un pocu di qualcosa altru. Vale à dì, Ansible funziona digià quandu l'istanza hà iniziatu. È Terraform funziona prima chì l'istanza cumencia. Passà à Bare Metal - no.

Micca avà, ma l'affari venenu è dicenu: "Venite".

Passà à un altru nuvulu - iè, ma ci hè un truccu pocu sfarente quì. Avete bisognu di scrive u codice Terraform in tale manera chì pudete passà à qualchì altru nuvola cù menu sforzu.

Inizialmente, u compitu hè statu stabilitu chì tutta a nostra infrastruttura era agnostica, vale à dì chì ogni nuvola duveria esse adattatu, ma à un certu puntu l'affari rinunziò è disse: "Va bè, in i prossimi N anni ùn andemu da nudda parte, pudemu aduprà servizii. da Amazon "

Terraform permette à voi di creà impieghi Front-End, cunfigurà PagerDuty, dati doc, etc. It hà assai di coda. Pò cuntrullà praticamente u mondu sanu.

Grazie per u rapportu! Aghju ancu aduprà Terraform per 4 anni. À u palcuscenicu di una transizione liscia à Terraform, à l'infrastruttura, à una descrizzione dichjarazione, avemu statu affruntatu cù una situazione induve qualchissia facia qualcosa cù a manu, è avete pruvatu à fà un pianu. È aghju avutu qualchì tipu d'errore quì. Cumu si tratta di tali prublemi? Cumu truvà risorse perse chì sò state listate?

Principalmente cù e nostre mani è l'ochji, se vedemu qualcosa di stranu in u rapportu, allora analizemu ciò chì succede quì, o simpricimenti uccidemu. In generale, e richieste di pull sò una cosa cumuni.

Se ci hè un errore, fate un rollback? Avete pruvatu à fà questu?

No, questu hè a decisione di una persona in u mumentu chì vede un prublema.

Source: www.habr.com