Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Parechje persone cunnoscenu è utilizanu Terraform in u so travagliu di ogni ghjornu, ma i migliori pratichi per questu ùn sò micca stati formati. Ogni squadra hà da inventà i so approcci è metudi.

A vostra infrastruttura quasi certamente principia simplice: uni pochi di risorse + uni pochi di sviluppatori. À u tempu, cresce in ogni tipu di direzzione. Truvate manere di aggrupà risorse in moduli Terraform, urganizà u codice in cartulare, è chì altru pò esse sbagliatu? (ultime parole famose)

U tempu passa è senti chì a vostra infrastruttura hè a vostra nova mascota, ma perchè? Avete preoccupatu di cambiamenti inspiegabili in l'infrastruttura, avete paura di tuccà l'infrastruttura è u codice - in u risultatu, ritardate una nova funziunalità o riduce a qualità ...

Dopu trè anni di gestione di una cullizzioni di moduli di a cumunità Terraform per AWS in Github è u mantenimentu longu di Terraform in a produzzione, Anton Babenko hè prontu à sparte a so sperienza: cumu scrive moduli TF in modu chì ùn sia micca male in u futuru.

À a fine di a conversazione, i participanti seranu più familiarizati cù i principii di gestione di risorse in Terraform, e pratiche megliu assuciate à i moduli in Terraform, è certi principii di integrazione cuntinuu assuciati à a gestione di l'infrastruttura.

clausole: Aghju nutatu chì stu rapportu hè di nuvembre 2018-2 anni sò digià passatu. A versione di Terraform 0.11 discussa in u rapportu ùn hè più supportata. In l'ultimi anni 2, 2 novi versioni sò stati liberati, chì cuntenenu assai innovazioni, migliure è cambiamenti. Fate attente à questu è verificate a documentazione.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Referenze:

Mi chjamu Anton Babenko. Qualchidunu di voi prubabilmente utilizatu u codice chì aghju scrittu. Ora parleraghju di questu cun più cunfidenza chè mai, perchè aghju accessu à statistiche.

U travagliu nantu à Terraform è sò statu un participante attivu è cuntributore à un gran numaru di prughjetti open source ligati à Terraform è Amazon da 2015.

Da tandu aghju scrittu abbastanza codice per mette in modu interessante. È pruvaraghju di parlà di questu avà.

Parlaraghju di l'intricacies è e specificità di travaglià cù Terraform. Ma questu ùn hè micca veramente u sughjettu di HighLoad. È avà capirete perchè.

À u tempu, aghju cuminciatu à scrive moduli Terraform. L'utilizatori anu scrittu e dumande, l'aghju riscritta. Allora aghju scrittu diverse utilità per furmà u codice cù un ganciu pre-commit, etc.

Ci era parechji prughjetti interessanti. Mi piace a generazione di codice perchè mi piace l'urdinatore per fà più è più travagliu per mè è per u programatore, per quessa, aghju travagliatu in un generatore di codice Terraform da diagrammi visuali. Forse alcuni di voi l'avete vistu. Quessi sò belli scatuli cù frecce. E pensu chì hè grande s'ellu pudete cliccà u buttone "Export" è uttene tuttu cum'è codice.

Sò d'Ucraina. Aghju campatu in Norvegia per parechji anni.

Inoltre, l'infurmazioni per stu rapportu sò stati raccolti da e persone chì cunnoscenu u mo nome è mi trovanu nantu à e rete suciale. Aghju quasi sempre u listessu soprannome.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

https://github.com/terraform-aws-modules
https://registry.terraform.io/namespaces/terraform-aws-modules

Cumu l'aghju citatu, sò u mantenitore principalu di i moduli Terraform AWS, chì hè unu di i più grandi repositori in GitHub induve ospitemu moduli per i travaglii più cumuni: VPC, Autoscaling, RDS.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

È ciò chì avete intesu avà hè u più basicu. Sè avete dubbitu chì avete capitu ciò chì Terraform hè, allora hè megliu per passà u vostru tempu in un altru locu. Ci saranu assai termini tecnichi quì. È ùn aghju micca esitatu à dichjarà u livellu di u rapportu per esse u più altu. Questu significa chì possu parlà cù tutti i termini pussibuli senza assai spiegazione.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Terraform hè apparsu in 2014 cum'è una utilità chì permette di scrive, pianificà è gestisce l'infrastruttura cum'è codice. U cuncettu chjave quì hè "infrastruttura cum'è codice".

Tutta a documentazione, cum'è aghju dettu, hè scritta terraform.io. Spergu chì a maiò parte di a ghjente cunnosce stu situ è ​​avè lettu a documentazione. Sì cusì, allora site in u locu ghjustu.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Questu hè un schedariu di cunfigurazione regulare di Terraform, induve avemu definitu prima alcune variàbili.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

In questu casu avemu definitu "aws_region".

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Allora descrivemu quali risorse vulemu creà.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Eseguimu alcuni cumandamenti, in particulare "terraform init" per carricà dipendenze è fornituri.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

È eseguimu u cumandimu "terraform apply" per verificà se a cunfigurazione specifica currisponde à e risorse chì avemu creatu. Siccomu ùn avemu micca creatu nunda prima, Terraform ci invita à creà sti risorse.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Cunfirmemu questu. Cusì creamu un bucket chjamatu seasnail.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Ci hè ancu parechje utilità simili. Parechji di voi chì utilizanu Amazon cunnoscenu AWS CloudFormation o Google Cloud Deployment Manager o Azure Resource Manager. Ognunu di elli hà a so propria implementazione di qualchì tipu per gestisce e risorse in ognunu di questi fornitori di nuvola publica. Terraform hè particularmente utile perchè vi permette di gestisce più di 100 fornituri. (Più dettagli ccà)

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

I scopi chì Terraform hà perseguitu da u principiu:

  • Terraform furnisce una vista unica di risorse.
  • Permette di sustene tutte e plataforme muderne.
  • È Terraform hè statu cuncepitu da u principiu cum'è una utilità chì vi permette di cambià l'infrastruttura in modu sicuru è prevedibile.

In u 2014, a parolla "previsible" pareva assai inusual in questu cuntestu.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Terraform hè una utilità universale. Se tenete una API, pudete cuntrullà assolutamente tuttu:

  • Pudete aduprà più di 120 fornituri per gestisce tuttu ciò chì vulete.
  • Per esempiu, pudete aduprà Terraform per descriverà l'accessu à i repositori GitHub.
  • Pudete ancu creà è chjude bug in Jira.
  • Pudete gestisce e metriche di New Relic.
  • Pudete ancu creà schedari in dropbox se vulete veramente.

Tuttu chistu hè ottenutu cù i fornituri Terraform, chì anu una API aperta chì pò esse descritta in Go.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Diciamu chì avemu principiatu à aduprà Terraform, leghje una certa documentazione nantu à u situ, fighjatu qualchi video, è cuminciaru à scrive main.tf, cum'è aghju dimustratu nantu à e diapositive previ.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

È tuttu hè grande, avete un schedariu chì crea un VPC.

Se vulete creà un VPC, allora specificate circa queste 12 linee. Descrivite in quale regione vulete creà, quale cidr_block di indirizzi IP à utilizà. Eccu tuttu.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Naturalmente, u prugettu cresce gradualmente.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

È vi aghjunghje una tonna di cose novi quì: risorse, fonti di dati, sarete integrate cù novi fornituri, di colpu vi vulete aduprà Terraform per gestisce l'utilizatori in u vostru contu GitHub, etc. Pudete vulete usà. diversi fornitori di DNS, cruciate tuttu. Terraform facilita questu.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Fighjemu l'esempiu seguente.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Aghjunghjite gradualmente internet_gateway perchè vulete risorse da u vostru VPC per avè accessu à Internet. Questa hè una bona idea.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

U risultatu hè questu main.tf:

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Questa hè a parte superiore di main.tf.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Questa hè a parte di fondu di main.tf.

Allora aghjunghje subnet. À u tempu chì vulete aghjunghje gateway NAT, rotte, tavule di routing è un munzeddu di altre subnets, ùn avete micca 38 linee, ma circa 200-300 linee.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Questu hè, u vostru schedariu main.tf cresce gradualmente. È abbastanza spessu a ghjente mette tuttu in un schedariu. 10-20 Kb appare in main.tf. Imagine chì 10-20 Kb hè cuntenutu testu. È tuttu hè cunnessu à tuttu. Questu hè gradualmente diventendu difficiule di travaglià. 10-20 Kb hè un bonu casu d'utilizatore, à volte più. È a ghjente ùn pensa micca sempre chì questu hè male.

Cum'è in a prugrammazione regulare, vale à dì micca infrastruttura cum'è codice, simu abituati à aduprà una mansa di diverse classi, pacchetti, moduli, raggruppamenti. Terraform permette di fà assai a stessa cosa.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

  • U codice hè in crescita.
  • Dipendenze trà e risorse sò ancu in crescita.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

È avemu un grande, grande bisognu. Capemu chì ùn pudemu micca campà cusì più. U nostru codice hè diventatu immensu. 10-20 Kb hè, sicuru, micca assai vastu, ma parlemu solu di a pila di rete, vale à dì chì avete solu aghjustatu risorse di rete. Ùn parlemu micca di l'Applicazione Load Balancer, u cluster ES di implementazione, Kubernetes, etc., induve 100 Kb ponu esse facilmente intrecciati. Sè vo scrivite tuttu chistu, assai prestu amparà chì Terraform furnisce moduli Terraform.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

I moduli Terraform sò una cunfigurazione Terraform autonoma chì hè amministrata cum'è un gruppu. Hè tuttu ciò chì avete bisognu di sapè nantu à i moduli Terraform. Ùn sò micca intelligenti in tuttu, ùn permettenu micca di fà alcuna cunnessione cumplessa secondu qualcosa. Tuttu chistu casca nantu à e spalle di i sviluppatori. Questu hè, questu hè solu un tipu di cunfigurazione Terraform chì avete digià scrittu. È pudete simpricimenti chjamà cum'è un gruppu.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Allora circhemu di capiscenu cumu ottimisimu i nostri 10-20-30 Kb di codice. Ci hè gradualmente capitu chì avemu bisognu di utilizà qualchi moduli.

U primu tipu di moduli chì incontru sò moduli di risorse. Ùn capiscenu micca ciò chì hè a vostra infrastruttura, ciò chì hè a vostra attività, induve è quali sò e cundizioni. Quessi sò esattamente i moduli chì aghju amministratu, inseme cù a cumunità open source, è chì avemu presentatu cum'è i blocchi di custruzzione assai iniziali per a vostra infrastruttura.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Un esempiu di un modulu di risorse.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Quandu chjamemu un modulu di risorsa, specifiemu da quale percorsu duvemu carricà u so cuntenutu.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Indichemu quale versione vulemu scaricà.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Passemu una mansa di argumenti quì. Eccu tuttu. Hè tuttu ciò chì avemu bisognu di sapè quandu usemu stu modulu.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Parechje persone pensanu chì si usanu l'ultima versione, tuttu serà stabile. Ma nò. L'infrastruttura deve esse versionata; avemu da risponde chjaramente à quale versione hè stata implementata questu o quellu cumpunente.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Eccu u codice chì hè in stu modulu. Modulu di gruppu di sicurità. Quì u scroll va à a linea 640th. Crià una risorsa di croup di sicurezza in Amazon in ogni cunfigurazione pussibule hè un compitu assai micca trivial. Ùn hè micca abbastanza solu per creà un gruppu di sicurità è dite chì regule per passà. Saria assai simplice. Ci hè un milione di restrizioni diverse in Amazon. Per esempiu, sè vo aduprate Endpoint VPC, lista di prefissi, diverse API è prova di cumminà tuttu questu cù tuttu u restu, allora Terraform ùn vi permette micca di fà questu. È l'API Amazon ùn permette micca ancu questu. Dunque, avemu bisognu di ammuccià tutta sta logica terribili in un modulu è dà u codice d'utilizatore chì pare cusì cusì.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

L'utilizatore ùn hà micca bisognu di sapè cumu hè fattu in l'internu.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

U sicondu tipu di moduli, chì hè custituitu di moduli di risorse, risolve digià i prublemi chì sò più applicabili à a vostra attività. Spessu questu hè un locu chì hè una estensione per Terraform è stabilisce qualchi valori rigidi per i tags, per i normi di a cumpagnia. Pudete ancu aghjunghje funziunalità quì chì Terraform ùn vi permette micca di utilizà. Questu hè avà. Avà a versione 0.11, chì hè per diventà una cosa di u passatu. Ma sempre, i preprocessori, jsonnet, cookiecutter è una mansa di altre cose sò u mecanismu ausiliariu chì deve esse usatu per u travagliu pienu.

In seguitu vi mustraraghju alcuni esempi di questu.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

U modulu di l'infrastruttura hè chjamatu esattamente in u listessu modu.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

A fonte da induve scaricà u cuntenutu hè indicatu.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Una mansa di valori sò passati è passati in stu modulu.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

In seguitu, in stu modulu, una mansa di moduli di risorsa sò chjamati per creà un VPC o un equilibratore di carica di l'applicazioni, o per creà un gruppu di sicurezza o per un cluster di Serviziu Elastic Container.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Ci sò dui tipi di moduli. Questu hè impurtante per capiscenu perchè a maiò parte di l'infurmazioni chì aghju raggruppatu in stu rapportu ùn hè micca scrittu in a documentazione.

È a documentazione in Terraform avà hè abbastanza problematica perchè dice solu chì ci sò queste caratteristiche, pudete aduprà. Ma ella ùn dice micca cumu utilizà sti funziunalità, perchè hè megliu aduprà. Dunque, un gran numaru di persone scrive qualcosa chì ùn ponu micca campà.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Fighjemu un ochju à cumu scrive sti moduli dopu. Allora avemu da vede cumu si chjamanu è cumu travaglià cù u codice.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Registru Terraform - https://registry.terraform.io/

Tip #0 hè di ùn scrive micca moduli di risorse. A maiò parte di sti moduli sò digià scritti per voi. Cumu l'aghju dettu, sò open source, ùn cuntenenu alcuna di a vostra logica cummerciale, ùn anu micca valori codificati per indirizzi IP, password, etc. U modulu hè assai flexible. È assai prubabilmente hè digià statu scrittu. Ci sò parechji moduli per risorse da Amazon. Circa 650. E a maiò parte di elli sò di bona qualità.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

In questu esempiu, qualchissia ghjunse à voi è hà dettu: "Vogliu esse capace di gestisce una basa di dati. Crea un modulu per pudè creà una basa di dati ". A persona ùn cunnosci micca i dettagli di implementazione di Amazon o Terraform. Ellu dice solu: "Vogliu gestisce MSSQL". Vale à dì, vulemu dì chì chjamarà u nostru modulu, passà u tipu di mutore quì, è indicà u fusu orariu.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

È una persona ùn deve micca sapè chì creeremu duie risorse diverse in stu modulu: unu per MSSQL, u sicondu per tuttu u restu, solu perchè in Terraform 0.11 ùn pudete micca specificà i valori di u fusu orariu cum'è opcional.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

È à a surtita da stu modulu, una persona hà da pudè riceve solu un indirizzu. Ùn saperà micca da quale basa di dati, da quale risorsa creamu tuttu questu internamente. Questu hè un elementu assai impurtante di dissimulazione. È questu ùn hè micca solu per quelli moduli chì sò publichi in open source, ma ancu per quelli moduli chì scriverete in i vostri prughjetti è squadre.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Questu hè u sicondu argumentu, chì hè abbastanza impurtante si avete usatu Terraform per un tempu. Avete un repository in quale mette tutti i vostri moduli Terraform per a vostra cumpagnia. È hè abbastanza normale chì cù u tempu stu prughjettu cresce à una dimensione di unu o dui megabyte. Questu hè bè.

Ma u prublema hè cumu Terraform chjama questi moduli. Per esempiu, se chjamate un modulu per creà ogni utilizatore individuale, Terraform prima caricarà u repositoriu sanu è dopu navigà à u cartulare induve si trova quellu modulu specificu. In questu modu, scaricate un megabyte ogni volta. Sè vo gestisce 100 o 200 utilizatori, tandu vi scaricà 100 o 200 megabytes, e poi vai à stu cartulare. Dunque, naturalmente, ùn vulete micca scaricà una mansa di cose ogni volta chì culpisce "Terraform init".

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

https://github.com/mbtproject/mbt

Ci sò dui suluzioni à stu prublema. U primu hè di utilizà percorsi relative. Questu modu indicà in u codice chì u cartulare hè lucale (./). È prima di lancià qualcosa, fate un clone Git di stu repositoriu in u locu. In questu modu, fate una volta.

Ci hè, sicuru, assai svantaghji. Per esempiu, ùn pudete micca aduprà versioning. È questu hè qualchì volta difficiule di campà.

Seconda suluzione. Se tenete assai sottomoduli è avete digià un tipu di pipeline stabilitu, allora ci hè u prughjettu MBT, chì vi permette di cullà parechji pacchetti diffirenti da un monorepository è caricate à S3. Questu hè un modu assai bonu. Cusì, u schedariu iam-user-1.0.0.zip pesa solu 1 Kb, perchè u codice per creà sta risorsa hè assai chjuca. È hà da travaglià assai più veloce.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Parlemu di ciò chì ùn pò micca esse usatu in moduli.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Perchè hè questu male in moduli? U peghju hè di assume l'utilizatori. Assume chì l'utente hè una opzione di autentificazione di u fornitore chì pò esse aduprata da diverse persone. Per esempiu, tutti assimileremu u rolu. Questu significa chì Terraform hà da piglià stu rolu. E poi cù stu rolu hà da fà altre azzioni.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

È u male hè chì se Vasya li piace à cunnette à Amazon in un modu, per esempiu, utilizendu a variabile di l'ambiente predeterminatu, è Petya li piace à utilizà a so chjave spartuta, chì hà in un locu secretu, ùn pudete micca specificà tramindui in. Terraform. È per ùn avè micca soffrenu, ùn ci hè bisognu di indicà stu bloccu in u modulu. Questu deve esse indicatu à un livellu più altu. Questu hè, avemu un modulu di risorse, un modulu di infrastruttura è una cumpusizioni in cima. È questu deve esse indicatu in un locu più altu.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

U sicondu male hè u pruvisoriu. Quì u male ùn hè micca cusì trivial, perchè s'è vo scrivite codice è travaglia per voi, allura vi pò pinsà chì si travaglia, allura perchè canciari lu.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

U male hè chì ùn avete micca sempre cuntrullatu quandu questu furnitore serà lanciatu, prima. È in segundu, ùn cuntrullà micca ciò chì significa aws ec2, vale à dì, parlemu di Linux o Windows avà. Allora ùn pudete micca scrive qualcosa chì hà da travaglià u listessu in diversi sistemi operativi o per diversi casi d'utilizatori.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

L'esempiu più cumuni, chì hè ancu indicatu in a ducumentazione ufficiale, hè chì se scrive aws_instance è specificate una mansa di argumenti, allora ùn ci hè nunda di male in questu se specificate u provisioner "local-exec" quì è eseguite u vostru ansible- libru di ghjocu.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

In fatti, sì, ùn ci hè nunda di male in questu. Ma littiralmente prestu vi capisce chì sta cosa di execu lucale ùn esiste micca, per esempiu, in launch_configuration.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

È quandu utilizate launch_configuration, è vulete creà un gruppu autoscaling da una istanza, allora in launch_configuration ùn ci hè micca cuncettu di "provisioner". Ci hè u cuncettu di "dati d'utilizatore".

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Dunque, una suluzione più universale hè di utilizà dati di l'utilizatori. È serà lanciatu sia nantu à l'istanza stessu, quandu l'istanza hè attivata, o in i stessi dati di l'utilizatori, quandu u gruppu autoscaling usa stu launch_configuration.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Sè vo vulete ancu eseguisce u provisioner, perchè hè un cumpunente gluing, quandu una risorsa hè creatu, in quellu momentu avete bisognu di eseguisce u vostru provisioner, u vostru cumandamentu. Ci sò assai di tali situazioni.

È a risorsa più curretta per questu hè chjamatu null_resource. Null_resource hè una risorsa falsa chì ùn hè mai veramente creata. Ùn tocca nunda, nè API, nè autoscaling. Ma vi permette di cuntrullà quandu eseguisce u cumandamentu. In questu casu, u cumandamentu hè eseguitu durante a creazione.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

a lea http://bit.ly/common-traits-in-terraform-modules

Ci sò parechji segni. Ùn andaraghju in tutti i segni in grande dettagliu. Ci hè un articulu nantu à questu. Ma s'è vo avete travagliatu cù Terraform o utilizatu moduli di l'altri, allora avete spessu nutatu chì parechji moduli, cum'è a maiò parte di u codice in open source, sò scritti da e persone per i so bisogni. Un omu hà scrittu è risolviu u so prublema. L'aghju appiccicatu in GitHub, lasciate vive. Viverà, ma s'ellu ùn ci hè micca ducumentazione è esempii, allora nimu l'utilizarà. È s'ellu ùn ci hè micca funziunalità chì vi permette di risolve un pocu più di u so compitu specificu, allora nimu ùn l'utilizarà. Ci sò tanti maneri di perde utilizatori.

Se vulete scrive qualcosa in modu chì e persone l'utilizanu, allora vi cunsigliu di seguità questi segni.

Queste sò:

  • Documentazione è esempi.
  • Funzionalità piena.
  • Predefiniti ragiunate.
  • codice pulito.
  • Testi.

I testi sò una situazione diversa perchè sò abbastanza difficiuli di scrive. Credu più in documentazione è esempi.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Allora, avemu vistu cumu scrive moduli. Ci sò dui argumenti. U primu, chì hè u più impurtante, ùn hè micca di scrive s'ellu pudete, perchè una mansa di persone hà digià fattu sti travaglii davanti à voi. E in segundu, sè ancu decide, pruvate micca di utilizà i fornituri in moduli è furnituri.

Questa hè a parte grisa di a documentazione. Puderete avà pensà: "Qualcosa ùn hè micca chjaru. Ùn hè micca cunvinta ". Ma videremu in sei mesi.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Avà parlemu di cumu chjamà sti moduli.

Capemu chì u nostru codice cresce cù u tempu. Ùn avemu più un schedariu, avemu digià 20 schedari. Sò tutti in un cartulare. O forse cinque cartelle. Forse simu cuminciati à sparghje in una certa manera per regione, per certi cumpunenti. Allora capimu chì avà avemu qualchì rudimentu di sincronizazione è orchestrazione. Vale à dì, avemu da capisce ciò chì duvemu fà si avemu cambiatu e risorse di rete, ciò chì duvemu fà cù u restu di i nostri risorse, cumu per causà sti dependenzii, etc.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Ci sò dui estremi. U primu estremu hè tuttu in unu. Avemu un schedariu maestru. Per u mumentu, questu era a megghiu pratica ufficiale nantu à u situ Terraform.

Ma avà hè scrittu cum'è deprecated è sguassatu. À u tempu, a cumunità di Terraform hà capitu chì questu era luntanu da a megliu pratica, perchè a ghjente hà cuminciatu à aduprà u prugettu in modi diffirenti. È ci sò prublemi. Per esempiu, quandu listemu tutte e dipendenze in un locu. Ci sò situazioni quandu clicchemu "pianu Terraform" è finu à chì Terraform aghjurnà i stati di tutte e risorse, assai tempu pò passà.

Un saccu di tempu hè, per esempiu, 5 minuti. Per alcuni questu hè assai tempu. Aghju vistu casi induve hà pigliatu 15 minuti. L'API AWS hà passatu 15 minuti per pruvà à capisce ciò chì succede cù u statu di ogni risorsa. Questa hè una zona assai grande.

E, naturalmente, un prublema cunnessu apparirà quandu vulete cambià qualcosa in un locu, dopu aspettate 15 minuti, è vi dà un canvas di qualchi cambiamenti. Avete sputatu, hà scrittu "Iè", è qualcosa hè andatu male. Questu hè un esempiu assai veru. Terraform ùn prova micca à prutege da i prublemi. Questu hè, scrivite ciò chì vulete. Ci sarà prublemi - i vostri prublemi. Mentre Terraform 0.11 ùn hè micca pruvatu à aiutà vi in ​​ogni modu. Ci sò certi posti interessanti in 0.12 chì vi permettenu di dì: "Vasya, vulete veramente questu, pudete vene à i vostri sensi?"

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

A seconda manera hè di riduce stu spaziu, vale à dì, i chjamati da un locu pò esse menu cunnessi da un altru locu.

L'unicu prublema hè chì avete bisognu di scrive più codice, vale à dì chì avete bisognu di discrìviri variabili in un gran numaru di schedari è aghjurnà questu. Qualchidunu ùn li piace micca. Questu hè normale per mè. E certi pirsuni pensanu: "Perchè scrive questu in diversi posti, metteraghju tuttu in un locu". Questu hè pussibule, ma questu hè u sicondu estremu.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Quale hà tuttu questu vive in un locu? Una, duie, trè persone, vale à dì chì qualchissia l'utiliza.

E quale chjama un cumpunente particulari, un bloccu o un modulu di infrastruttura? Cinque à sette persone. Questu hè cool.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

A risposta più cumuna hè in un locu in u mezu. Se u prughjettu hè grande, allora avete spessu una situazione induve nisuna suluzione hè adattata è micca tuttu u travagliu fora, perchè finiscinu cù una mistura. Ùn ci hè nunda di male in questu, sempre chì capisce chì i dui anu vantaghji.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Se qualcosa hà cambiatu in a pila VPC è vulete applicà questi cambiamenti à EC2, vale à dì chì vulete aghjurnà u gruppu autoscaling perchè avete una nova subnet, allora chjamu stu tipu d'orchestrazione di dependenza. Ci sò qualchi suluzioni: quale usa chì?

Puderaghju suggerisce chì suluzione ci sò. Pudete aduprà Terraform per fà a magia, o pudete aduprà makefiles per aduprà Terraform. È vede s'ellu ci hè cambiatu qualcosa, pudete lancià quì.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Cumu ti piace sta decisione? Qualchissia crede chì questa hè una suluzione cool? Vecu un surrisu, apparentemente i dubbii sò infilati.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Di sicuru, ùn pruvate micca questu in casa. Terraform ùn hè mai statu cuncepitu per esse gestitu da Terraform.

À un rapportu m'anu dettu: "No, questu ùn funziona micca". U puntu hè chì ùn deve micca travaglià. Ancu s'ellu pare cusì impressiunanti quandu pudete lancià Terraform da Terraform, è dopu Terraform, ùn deve micca fà. Terraform deve sempre principià assai facilmente.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

https://github.com/gruntwork-io/terragrunt/

Sè avete bisognu di chjamà orchestrazione quandu qualcosa hà cambiatu in un locu, allora ci hè Terragrunt.

Terragrunt hè una utilità, un add-on à Terraform, chì vi permette di coordinà è orchestrate e chjama à i moduli di l'infrastruttura.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Un schedariu tipicu di cunfigurazione di Terraform pare cusì.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Specificate quale modulu specificu vulete chjamà.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Chì dipendenze hà u modulu?

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

E chì argumenti accetta stu modulu. Hè tuttu ciò chì ci hè da sapè di Terragrunt.

A documentazione hè quì, è ci sò 1 stelle in GitHub. Ma in a maiò parte di i casi, questu hè ciò chì avete bisognu di sapè. È questu hè assai faciule da implementà in cumpagnie chì sò appena cuminciati à travaglià cù Terraform.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Allora l'orchestrazione hè Terragrunt. Ci sò altre opzioni.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Avà parlemu di cumu travaglià cù u codice.

Sè avete bisognu di aghjunghje novi funziunalità à u vostru codice, in a maiò parte di i casi hè faciule. Scrivite una nova risorsa, tuttu hè simplice.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Sì avete qualchì risorsa chì avete creatu in anticipu, per esempiu, avete amparatu nantu à Terraform dopu avè apertu un contu AWS è vulete usà e risorse chì avete digià, allora saria appruvatu per allargà u vostru modulu in questu modu, in modu chì sustene l'usu di e risorse esistenti.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

È supportatu a creazione di novi risorse usendu a risorsa di bloccu.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Nantu à l'output, vultemu sempre l'ID di output secondu ciò chì hè stata utilizata.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

U sicondu prublema assai significativu in Terraform 0.11 hè di travaglià cù listi.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

A difficultà hè chì si avemu un tali listinu di utilizatori.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

È quandu creamu questi utilizatori usendu risorse di bloccu, allora tuttu va bè. Passemu tutta a lista, creendu un schedariu per ognunu. Tuttu hè bè. È dopu, per esempiu, user3, chì hè in u mezu, deve esse sguassatu da quì, allora tutti i risorsi chì sò stati creati dopu à ellu seranu ricreati perchè l'indici cambierà.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

U travagliu cù listi in un ambiente stateful. Cosa hè un ambiente stateful? Questa hè a situazione induve un novu valore hè creatu quandu sta risorsa hè creata. Per esempiu, AWS Access Key o AWS Secret Key, vale à dì quandu creemu un utilizatore, ricevemu un novu Access o Secret Key. È ogni volta chì sguassemu un utilizatore, questu utilizatore averà una nova chjave. Ma questu ùn hè micca feng shui, perchè l'utilizatore ùn vulerà micca esse amici cun noi se creemu un novu utilizatore per ellu ogni volta chì qualchissia abbanduneghja a squadra.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Questa hè a suluzione. Questu hè u codice scrittu in Jsonnet. Jsonnet hè una lingua di mudellu da Google.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Stu cumanda permette di accettà stu mudellu è cum'è output torna un schedariu json chì hè fattu secondu u vostru mudellu.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

U mudellu pare cusì.

Terraform vi permette di travaglià cù HCL è Json in u listessu modu, perchè se avete a capacità di generà Json, pudete sbulicà in Terraform. U schedariu cù l'estensione .tf.json serà telecaricatu bè.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

E poi travagliammu cun ellu cum'è di solitu: terraform init, terramorm applica. È creemu dui utilizatori.

Avà ùn avemu micca paura se qualchissia abbanduneghja a squadra. Avemu da solu edità u schedariu json. Vasya Pupkin partì, Petya Pyatochkin restava. Petya Pyatochkin ùn riceve micca una nova chjave.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

L'integrazione di Terraform cù altre arnesi ùn hè micca veramente u travagliu di Terraform. Terraform hè stata creata cum'è una piattaforma per creà risorse è questu hè. È tuttu ciò chì vene dopu ùn hè micca a preoccupazione di Terraform. È ùn ci hè bisognu di tessillu in quì. Ci hè Ansible, chì face tuttu ciò chì avete bisognu.

Ma e situazioni si sviluppanu quandu vulemu allargà Terraform è chjamà qualchì cumanda dopu chì qualcosa hè cumpletu.

Primu modu. Creemu un output induve scrivemu stu cumandamentu.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

E poi chjamemu stu cumandamentu da a pruduzzioni di terraform di shell è specifichi u valore chì vulemu. Cusì, u cumandamentu hè eseguitu cù tutti i valori sustituiti. Hè assai còmode.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Seconda manera. Questu hè l'usu di null_resource secondu i cambiamenti in a nostra infrastruttura. Pudemu chjamà u listessu locale-exe appena l'ID di qualchì risorsa cambia.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Naturalmente, questu hè tuttu lisu nantu à a carta, perchè Amazon, cum'è tutti l'altri fornituri publichi, hà una mansa di i so casi di punta.

U casu di bordu più cumuni hè chì quandu avete apertu un contu AWS, importa quale rigioni utilizate; hè sta funzione attivata quì; forsi l'avete apertu dopu à dicembre 2013; forsi vi sò usu predeterminatu in VPC etc. Ci hè parechje restrizioni. È Amazon li sparghje in tutta a documentazione.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Ci hè uni pochi di cose chì vi cunsigliu di evità.

Per principià, evite tutti l'argumenti micca sicreti in u pianu Terraform o Terraform CLI. Tuttu chistu pò esse messu in un schedariu tfvars o in una variabile d'ambiente.

Ma ùn avete micca bisognu di memorizà tuttu stu cumandamentu magicu. Pianu Terraform - var and off we go. A prima variabile hè var, a seconda variabile hè var, a terza, quarta. U principiu più impurtante di l'infrastruttura cum'è codice chì aghju utilizatu più spessu hè chì solu fighjendu u codice, duverebbe avè un capiscenu chjaru di ciò chì hè implementatu quì, in quale statu è cù quali valori. È cusì ùn aghju micca bisognu di leghje a ducumentazione o di dumandà à Vasya quale parametri hà utilizatu per creà u nostru cluster. Solu bisognu di apre un schedariu cù l'estensione tfvars, chì spessu currisponde à l'ambiente, è fighjate tuttu quì.

Inoltre, ùn utilizate micca argumenti di destinazione per riduce u scopu. Per questu hè assai più faciule d'utilizà moduli infrastrutturali chjuchi.

Inoltre, ùn ci hè bisognu di limità è cresce u parallelismu. Se aghju risorse 150 è vogliu aumentà u parallelismu di Amazon da u predeterminatu 10 à 100, allura più prubabilmente qualcosa andarà male. O puderia andà bè avà, ma quandu Amazon dice chì fate troppu chjama, sarete in prublemi.

Terraform hà da pruvà à ripiglià a maiò parte di sti prublemi, ma ùn uttene quasi nunda. Parallelismu = 1 hè una cosa impurtante da aduprà se scuprite qualchì bug in l'API AWS o in u fornitore Terraform. È dopu avete bisognu di specificà: parallelismu = 1 è aspettate finu à chì Terraform finisci una chjama, dopu a seconda, dopu a terza. Li lanciarà unu à unu.

A ghjente mi dumanda spessu: "Perchè pensu chì i spazii di travagliu Terraform sò mali?" Credu chì u principiu di l'infrastruttura cum'è codice hè di vede quale infrastruttura hè stata creata è cù quale valori.

I spazii di travagliu ùn sò micca stati creati da l'utilizatori. Questu ùn significa micca chì l'utilizatori anu scrittu in prublemi di GitHub chì ùn pudemu micca campà senza spazii di travagliu Terraform. Innò ùn hè micca cusì. Terraform Enterprise hè una suluzione cummerciale. Terraform da HashiCorp hà decisu chì avemu bisognu di spazii di travagliu, cusì l'avemu archiviatu. Mi pare assai più faciule di mette in un cartulare separatu. Allora ci sarà un pocu di più schedari, ma serà più chjaru.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Cumu travaglià cù u codice? In fatti, travaglià cù listi hè u solu dolore. È pigliate Terraform più faciule. Questu ùn hè micca ciò chì farà tuttu grande per voi. Ùn ci hè bisognu di scaccià tuttu ciò chì hè scrittu in a documentazione quì.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

U tema di u rapportu hè statu scrittu "per u futuru". Parlaraghju di questu assai brevemente. Per u futuru, questu significa chì 0.12 serà liberatu prestu.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

0.12 hè una tonna di cose novi. Sè vi vene da a prugrammazione regulare, allora vi manca ogni tipu di blocchi dinamichi, loops, operazioni di paragone currettu è cundizionale, induve i lati manca è destra ùn sò micca calculati simultaneamente, ma secondu a situazione. Ti manca assai, cusì 0.12 risolverà per voi.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Ma! Sè vo scrivite menu è più simpliciamente, utilizendu moduli pronti è suluzioni di terzu, allura ùn vi tuccherà à aspittà è speru chì 0.12 vi vene è riparà tuttu per voi.

Descrizzione di l'infrastruttura in Terraform per u futuru. Anton Babenko (2018)

Grazie per u rapportu! Avete parlatu di l'infrastruttura cum'è codice è hà dettu literalmente una parolla nantu à e teste. I testi sò necessarii in i moduli? Di quale hè questa rispunsabilità ? Aghju bisognu di scrive stessu o hè a rispunsabilità di i moduli ?

L'annu dopu serà pienu di rapporti chì avemu decisu di pruvà tuttu. Chì pruvà hè a quistione più grande. Ci hè parechje dipendenze, assai restrizioni da diversi fornituri. Quandu tu è eiu parlemu è dite: "Aghju bisognu di teste", allora vi dumandu: "Chì testerete?" Dite chì testerete in a vostra regione. Allora dicu chì questu ùn funziona micca in a mo regione. Questu hè, ùn pudemu ancu esse d'accordu annantu à questu. Per ùn dì chì ci sò assai prublemi tecnichi. Questu hè, cumu scrive sti testi in modu chì sò adattati.

Sò attivamente ricerca in questu tema, vale à dì cumu generà automaticamente testi basati nantu à l'infrastruttura chì avete scrittu. Questu hè, sè vo avete scrittu stu codice, allora aghju bisognu di eseguisce, basatu annantu à questu possu creà testi.

Terratest hè una di e biblioteche più freti chì vi permette di scrive testi di integrazione per Terraform. Questu hè unu di l'utilità. Preferite u tipu DSL, per esempiu, rspec.

Anton, grazie per u rapportu ! Mi chjamu Valery. Lasciami fà una piccula quistione filosofica. Ci hè, in cundizzioni, pruvisione, ci hè implementazione. L'approvvigionamentu crea a mo infrastruttura, in u dispiegamentu l'avemu riempitu cù qualcosa d'utile, per esempiu, servitori, applicazioni, etc. È hè in u mo capu chì Terraform hè più per a pruvista, è Ansible hè più per l'implementazione, perchè Ansible hè ancu per l'infrastruttura fisica. permette di installà nginx, Postgres. Ma à u listessu tempu, Ansible pare chì permette di furnisce, per esempiu, risorse di Amazon o Google. Ma Terraform permette ancu di implementà qualchì software utilizendu i so moduli. Da u vostru puntu di vista, ci hè un tipu di cunfini chì corre trà Terraform è Ansible, induve è chì hè megliu aduprà? O, per esempiu, pensate chì Ansible hè digià basura, avete da pruvà à aduprà Terraform per tuttu?

Bona dumanda, Valery. Credu chì Terraform ùn hà micca cambiatu in termini di scopu da 2014. Hè statu creatu per l'infrastruttura è hè mortu per l'infrastruttura. Avemu sempre avutu è averemu bisognu di gestione di cunfigurazione Ansible. A sfida hè chì ci sò dati d'utilizatori in launch_configuration. È quì ti tira Ansible, etc. Questa hè a distinzione standard chì mi piace più.

Se parlemu di una bella infrastruttura, allora ci sò utilità cum'è Packer chì recullanu sta maghjina. È dopu Terraform usa a fonte di dati per truvà sta maghjina è aghjurnà a so launch_configuration. Questu hè, in questu modu u pipeline hè chì prima tirà Tracker, poi tirà Terraform. È se a custruzzione si faci, allora un novu cambiamentu accade.

Bonghjornu! Grazie per u rapportu! Mi chjamu Misha, cumpagnia RBS. Pudete chjamà Ansible via provisioner quandu crea una risorsa. Ansible hà ancu un tema chjamatu inventariu dinamicu. È pudete prima chjamà Terraform, è poi chjamà Ansible, chì piglià risorse da u statu è eseguisce. Cosa hè megliu?

A ghjente usa i dui cù uguali successu. Mi pare chì l'inventariu dinamicu in Ansible hè una cosa cunvene, se ùn parlemu micca di gruppu autoscaling. Perchè in u gruppu autoscaling avemu digià u nostru propiu toolkit, chì hè chjamatu launch_configuration. In launch_configuration registremu tuttu ciò chì deve esse lanciatu quandu creemu una nova risorsa. Dunque, cù Amazon, utilizendu l'inventariu dinamicu è leghje u schedariu Terraform ts, in my opinion, hè overkill. È se utilizate altre arnesi induve ùn ci hè micca cuncettu di "gruppu autoscaling", per esempiu, utilizate DigitalOcean o un altru fornitore induve ùn ci hè micca un gruppu autoscaling, allora vi tuccherà à tirà manualmente l'API, truvà indirizzi IP, creà un schedariu d'inventariu dinamicu, è Ansible hà digià persu per ellu. Questu hè, per Amazon ci hè launch_configuration, è per tuttu ciò chì ci hè un inventariu dinamicu.

Source: www.habr.com

Add a comment