Infrastruktuuri esitamine koodina korduvates tekstivormingutes on parim tava sĂŒsteemide jaoks, millega ei pea vaeva nĂ€gema. Selle praktika nimeks on , ja seni on selle rakendamiseks, eriti AWS-is, kaks populaarset tööriista: ja .

VÔrdlen oma kogemusi Terraformi ja CloudFormationiga
Enne kui tulin (samuti ) töötasin ja kolm aastat kasutasin Terraformi. Uues kohas kasutasin samuti Terraformi, kuid siis sai ettevĂ”te lĂ€biviidud ĂŒle kĂ”ik a'la Amazonisse, sealhulgas CloudFormationi. Töötasin kĂ”vasti parimate praktikate vĂ€ljatöötamise nimel mĂ”lemal, ja kasutasin mĂ”lemat tööriista vĂ€ga keerulistes protsessides organisatsiooni mastaabis. Hiljem, kaaludes mĂ”jusid ĂŒleminekust Terraformilt CloudFormationile, olin ma veendunud, et Terraform on tĂ”enĂ€oliselt parim valik organisatsiooni jaoks.
Terraform Kohutav
Beta versioon
Terraformil pole veel isegi versiooni 1.0, ja see on tugev pĂ”hjus seda mitte kasutada. Alates hetkest, kui ma esimese korda seda proovisin, on see palju muutunud, kuid sel ajal terraform apply saged korduvalt katkenud pĂ€rast mitmeid uuendusi vĂ”i lihtsalt paar aastat kasutamist. Ma ĂŒtleksin, et "nĂŒĂŒd on kĂ”ik teisiti", aga... nii rÀÀgivad ju kĂ”ik, eks? On muudatusi, mis ei ĂŒhti varasemate versioonidega, kuid need on vajalikud, ja isegi tunne on nagu sĂŒnteesis ja ressursside abstraktsioonides on nĂŒĂŒd asi paika pandud. Tööriist tundub tĂ”esti paremaks muutunud, aga... :-0
Teiselt poolt on AWS tublisti vaeva nĂ€inud, et sĂ€ilitada ĂŒhilduvus varasemate versioonidega. KĂ”ik ilmselt seetĂ”ttu, et nende teenuseid testitakse sageli korralikult organisatsiooni sees ja alles siis, kui nad on need ĂŒmber nimetanud, avaldatakse. Nii et 'hĂ€sti on vaeva nĂ€htud' on veel pehme ĂŒtlemine. Ăhilduvuse sĂ€ilitamine varasemate versioonidega API jaoks nii mitme variandi ja keerulise sĂŒsteemi, nagu AWS, puhul on uskumatult keeruline. IgaĂŒks, kellel on tulnud sĂ€ilitada avalikku API-d, mida kasutatakse sama laialdaselt, peaks mĂ”istma, kui raske on seda teha nii kaua. Aga CloudFormationi kĂ€itumine ei ole minu mĂ€letamise jĂ€rgi mitte kordagi aastate jooksul muutunud.
Tutvu, jalg... see on kuuli
Nii palju kui ma tean, on ressursi eemaldamine vÔÔras CloudFormationi stack'ist ei ole vĂ”imalik oma CF stack'i. Samuti on asjad samamoodi Terraformiga. See vĂ”imaldab olemasolevaid ressursse oma stack'i importida. Ăks funktsioon, mida vĂ”ib öelda, et on hĂ€mmastav, kuid suurt jĂ”udu toob endaga kaasa ka suur vastutus. Alles jÀÀb ainult salvestada ressursi stack'i ja samal ajal, kui töötad oma stack'iga, ei saa seda ressurssi kustutada ega muuta. Ăks kord tuli see kĂ€tte. Kord Twitchi lehe peal keegi, mitte midagi halba mĂ”eldes, importis kogemata kellegi AWS turvagruppi oma Terraformi stack'i. Sisestas mitu kĂ€sku ja⊠turvagrupp (koos sissetuleva liiklusega) kadus.
Terraform Suur
Taastamine puudulikest olekutest
MĂ”nikord ei saa CloudFormation tĂ€ielikult ĂŒhelt olekult teisele ĂŒle minna. Sel juhul pĂŒĂŒab ta naasta eelmisest. Kahju, et see ei ole alati vĂ”imalik. Hiljem on see, mis saadakse, hirmutav â kunagi ei tea, kas CloudFormation on Ă”nnelik, et teda hackitakse â olgu see parandamiseks. Ja kas on vĂ”imalik tagasi minna eelnevale olekule, ei oska ta korralikult mÀÀratleda ning vaikimisi ripub ta tunde, oodates imet.
Terraform on seevastu, et taastuda ebaĂ”nnestunud ĂŒleminekest elegantselt ning pakub laiemat tĂ”rkeotsingu tööriistade komplekti.
Selgemad muudatused dokumendi staatustes
âOkei, koormuse tasakaalustaja, sa muutud. Kuidas?â
âmurelik insener, kes on valmis nupule âaktsepteeriâ vajutama.
MĂ”nikord pean ma CloudFormationi virnas koormuse tasakaalustajaga mĂ”ned manipulatsioonid tegema â nĂ€iteks lisama pordinumbri vĂ”i muutma turgruppe. CloudFormationi muudatused on nĂ”rgalt kajastatud. Olen nagu nĂ”eltele, kontrollin kĂŒmme korda yaml-faili, et veenduda, et ma ei ole midagi vajalikku Ă€ra kustutanud ega midagi liigset lisanud.
Terraform on siin palju lĂ€bipaistvam. MĂ”nikord on ta isegi liiga lĂ€bipaistev (loe: tĂŒĂŒtu). Ănneks on viimasest versioonist kaasatud parendatud muudatuste kuvamine â nĂŒĂŒd on selge, mis muutub.
Paindlikkus
Kirjutage tarkvara tagurpidi.
Otse öeldes on pikaealise tarkvara kĂ”ige olulisem eripĂ€ra selle kohanemisvĂ”ime muutustega. Kirjutage igasugune tarkvara tagurpidi. Minu kogemus nĂ€itab, et olen sageli eksinud, valides 'lihtsa' teenuse ja seejĂ€rel pĂŒĂŒdnud seda kuidagi mahutada ĂŒhte CloudFormation'i vĂ”i Terraform'i kuhja. Ja muidugi, pĂ€rast kuude möödumist selgus, et ma pole kĂ”ik Ă”igesti mĂ”istnud ja teenus ei olnudki tegelikult lihtne! NĂŒĂŒd on mul vaja mĂ”nel viisil suur kuhja vĂ€ikesteks osadeks jagada. CloudFormation'i puhul on see vĂ”imalik vaid siis, kui eelnevalt taaskonserveerite olemasoleva kuhja ning seda ma oma andmebaasidega ei tee. Terraform seevastu vĂ”imaldas kuhja lahata ja jagada seda arusaadavamateks vĂ€iksemateks osadeks.
Modulid git'is
Terraform'i koodi jagamine mitme kuhjaga on palju lihtsam kui CloudFormation'i koodi jagamine. Terraform'i abil saab koodi paigutada git'i repositoriumisse ja sellele viidata, kasutades semantilist versioonikontrolli. IgaĂŒhel, kellel on juurdepÀÀs sellele repositoriumile, on vĂ”imalik jagatud koodi uuesti kasutada. CloudFormation'i ekvivalent on S3, kuid sellel ei ole samu eeliseid ja pole mingit pĂ”hjust, miks peaksime git'ist loobuma S3 kasuks.
Organisatsioon kasvas ja vĂ”ime jagada ĂŒhiseid tehnoloogiaid jĂ”udis kriitilisse tasemesse. Terraformiga on see kĂ”ik lihtne ja loomulik, samas kui CloudFormation paneb teid hĂŒppama lĂ€bi rinngate, enne kui midagi sarnast tööle hakkab.
Operations as code
"Kripteerime ja ongi kÔik."
â insener kolm aastat enne, kui ta Terraformi jalgratta leiutas.
Kui jutt on tarkvaraarendusest, ei ole Go vÔi Java programm lihtsalt kood.

Code as Code
Siin on veel infrastruktuur, mille peal see töötab.

Infrastruktuur kui kood
Aga kust see seal on? Kuidas seda jÀlgida? Kus elab teie kood? Kas arendajatel on juurdepÀÀsu lubamine vajalik?

Operations as Code
Olles tarkvaraarendaja, ei tÀhenda see lihtsalt koodi kirjutamist.
Ainult AWS ei piira: te kasutate tĂ”enĂ€oliselt ka teiste teenusepakkujate teenuseid. SignalFx, PagerDuty vĂ”i GitHub. VĂ”ib-olla on teil CI/CD jaoks sisemine Jenkins server vĂ”i sisemine Grafana juhtpaneel jĂ€lgimiseks. Infra as Code valitakse erinevatel pĂ”hjustel, ja igaĂŒhel on sama tĂ€htsus tarkvaraga seotud asjade jaoks.
Kui ma töötasin Twitchis, kiirendasime teenuseid segatud integreeritud sĂŒsteemides ja AWS Amazonâi sĂŒsteemides. Me lĂ”ime ja sĂ€ilitasime hulgaliselt mikroteenuseid, suurendades opereerimiskulusid. Vestlused kĂ€isid umbes sellises vaimus:
- Mina: Oh, liiga palju liigutusi ĂŒhe mikroteenuse kĂ€ivitamiseks. Mul on vaja selle asja kaudu AWS kontot luua (me liikusime kahe konto suunas mikroteenus), seejĂ€rel selle kaudu hĂ€irete seadistamiseks, veel selle kaudu koodirepositooriumiks, ja selle kaudu e-posti aadresside nimekirja, ja veel selleâŠ
- Juht: Skripteerime ja olgu.
- Mina: Hea kĂŒll, aga skript peab muutuma. Vaja on viisi, kuidas kontrollida, et kĂ”ik need Amazonâi integreeritud asjad on ajakohases seisundis.
- Juht: Tundub hea. Ja selle jaoks kirjutame skripti.
- Mina: SuurepÀrane! Kas skript vajab tÔenÀoliselt veel parameetreid? Kas ta vÔtab need vastu?
- Juht: Jah, vÔtab, kuhu ta sellest escaping lÀheb!
- Mina: Protsess vĂ”ib muutuda, tagasiside ĂŒhilduvus vĂ”ib kaduda. Vaja on mingit semantilist versioonikontrolli.
- Juht: SuurepÀrane idee!
- Mina: Tööriistad saab muuta kÀsitsi kasutajaliideses. Me vajame viisi, kuidas seda kontrollida ja parandada.
âŠ3 aastat hiljem:
- Juht: Ja meil on terraform.
Muinasjutu moraal on selline: isegi kui oled kuni kĂ”rvad amazonâlikus maailmas,, kasutad sa ikkagi midagi, mis ei ole AWS-i toode, ja nendel teenustel on olek, mis kasutab keelt selle oleku sĂŒnkroniseerimiseks.
CloudFormation lambda vs git-moduulid terraform
lambda on CloudFormation lahendus kasutaja loogika probleemile. Lambda abil on vĂ”imalik vĂ”i . Selline lĂ€henemine toob kaasa tĂ€iendavaid keerukusi, mida pole Terraformi git'i moodulite semantilise versioonihalduse puhul. Minu jaoks on kĂ”ige aktuaalsem probleem olnud nende kasutaja lambda-de Ă”iguste haldamine (neid on kĂŒmneid AWS-i kontosid). Teiseks oluliseks kĂŒsimuseks kujunes «mis oli enne â kana vĂ”i muna?»: see oli seotud lambda koodiga. See funktsioon on infrastruktuur ja kood, ning vajab samuti jĂ€lgimist ja uuendusi. Viimaseks mÔÔgaks on saanud koodi lambda semantilise uuendamise raskus; samuti pidi olema tagatud, et stacki toimingud ei muutuks kĂ€ivituste vahel ilma otsese kĂ€suta.
MĂ€letan, kuidas mul tekkis soov luua kanarialennukeid Elastic Beanstalk keskkonna jaoks klassikalise koormuse tasakaalustajaga. Lihtsaim oleks olnud teha teine juurutamine EB kĂ”rval tootmiskeskkonna jaoks, tehes veel ĂŒhe sammu: ĂŒhendades automaatselt skaleeritava kanarideploy grupi tasuta juurutamisega tootmiskeskkonna koormuse tasakaalustaja. Ja kuna Terraform kasutab , see nĂ”uab Terraformis 4 lisarealise koodi kirjutamist. Kui ma kĂŒsisin, kas CloudFormationis on sarnane lahendus, viidati mulle tervele git-repositooriumile, mis sisaldab juurutuskanalit ja muud: ja kĂ”ik see, et teha Ă”nnetud 4 rida Terraformi koodi.
Ta tuvastab paremini triivi.
Veenduge, et tegelikkus vastab ootustele.
â vĂ€ga vĂ”imas operations as code funktsioon, kuna see aitab veenduda, et tegelikkus vastab ootustele. See on saadaval nii CloudFormationis kui ka Terraformis. Kuid töölaudade suurenedes annab CloudFormation triivi otsimisel jĂ€rjest rohkem valepositiive.
Terraformiga on teil palju tĂ€iustatud elutsĂŒkli harju triivi tuvastamiseks. NĂ€iteks sisestate kĂ€su otse ECS-i ĂŒlesande mÀÀratlusesse, kui soovite ignoreerida muudatusi konkreetse ĂŒlesande mÀÀratluses, jĂ€ttes samas tĂ€helepanuta muudatused kogu ECS-i juurutuses.
CDK ja CloudFormatsiooni tulevik
CloudFormationi haldamine suurtes, infrastruktuuridevaheline ulatus on keeruline. Paljusid neist raskustest on tunnustatud ja tööriist vajab selliseid asju nagu , struktuur pilveinfrastruktuuri mÀÀratlemiseks koodis ja selle rakendamiseks AWS CloudFormationis. Huvitav on vaadata, mis ootab aws-cdk tulevikus, kuid tal on keeruline konkureerida Terraformi teiste eelistega; CloudFormationi tÔukamiseks on vaja globaalseid muudatusi.
Et Terraform ei pettuks
See on ju 'infrastruktuur kui KOOD', mitte 'kui tekst'.
Minu esimene mulje Terraformist oli ĂŒsna halb. Arvan, et ma lihtsalt ei saanud lĂ€henemisest aru. Peaaegu kĂ”ik insenerid tajuvad seda esialgu tahtmatult teksti formaatena, mille tuleb muuta soovitud infrastruktuuriks. SELLEKS EI TOHI KUNAGI NII OLLA.
Koodiarenduse head tavad kehtivad ka Terraformi kohta
Olen nĂ€inud, kuidas paljusid tavasid, mida kasutatakse hea koodi loomisel, ignoteeritakse Terraformis. Olete aastate jooksul Ă”ppinud, et saada heaks programmeerijaks. Ărge loobuge sellest kogemusest lihtsalt seetĂ”ttu, et töötate Terraformiga. Koodiarenduse head tavad kehtivad ka Terraformi kohta.
Kuidas saab koodi ja mitte dokumenteerida?
Mulle on ette tulnud hiiglaslikke Terraform steke, millel ei ole mingit dokumentatsiooni. Kuidas on vĂ”imalik kirjutada koode lehekĂŒlgedena â tĂ€iesti ilma dokumentatsioonita? Lisage dokumentatsioon, mis selgitab teie kood Terraform (rĂ”hk sĂ”nal "kood"), miks on see jaotis nii oluline ja mida teete.
Kuidas on vĂ”imalik arendada teenuseid, mis olid kunagi ĂŒks suur main() funktsioon?
Olen kohanud vĂ€ga keerulisi Terraform steke, mis on esitatud ĂŒhtse moodulina. Miks me ei arenda tarkvara nii? Miks me jagame suuri funktsioone vĂ€iksemateks? Need samad vastused kehtivad ka Terraformi puhul. Kui moodul on liiga suur, tuleb see jagada vĂ€iksemateks mooduliteks.
Kas teie ettevÔte ei kasuta raamatukogusid?
Olen nĂ€inud, kuidas insenerid, arendades uut projekti Terraformi abil, kopeerisid suurtes kogustes koodi teistest projektidest oma töödesse ning siis nokkisid neid, kuni need hakkasid toimima. Kas teie ettevĂ”ttes töötaksite selliselt "tootmis" koodiga? Me ei kasuta raamatukogusid lihtsalt niisama. Jah, aga kuhu me ilma ĂŒldiste raamatukogudeta ĂŒldse jÀÀme?!
Kas te ei kasuta PEP8 vÔi gofmt?
Enamikus keeltes on standardne vastuvÔetud vormindus. Pythonis on see PEP8. Go puhul on see gofmt. Terraformil on oma: terraform fmt. Kasutage vabalt!
Kas hakkate Reacti kasutama, teadmata JavaScripti?
Terraformi moodulid vĂ”ivad lihtsustada teatud osa teie loodud keerulisest infrastruktuurist, kuid see ei tĂ€henda, et te ei peaks sellest ĂŒldse aru saama. Kas soovite kasutada Terraformi Ă”igesti ilma ressurssidest arusaamiseta? Olete hukule mÀÀratud: aeg möödub, aga te ei Ă”pigi Terraformi selgeks.
Kas kodeerite singletoone vÔi rakendate sÔltuvusi?
SÔltuvuste rakendamine on tunnustatud parim praktika tarkvaraarenduses, mida eelistatakse singletoonide puhul. Kuidas see Terraformis kasuks tuleb? Olen kohanud Terraformi mooduleid, mis sÔltuvad kaugest olekust. Selle asemel, et kirjutada mooduleid, mis vÔetakse kaugest olekust, kirjutage moodul, mis vÔtab parameetreid. Ja seejÀrel edastage need parameetrid moodulisse.
Kas teie raamatukogud teevad kĂŒmmet asja hĂ€sti vĂ”i ĂŒhte â suurepĂ€raselt?
Parimad raamatukogud töötavad tĂ”husalt ĂŒhel konkreetsel ĂŒlesandel. Selle asemel, et kirjutada suuri Terraform mooduleid, mis ĂŒritavad teha kĂ”ike korraga, koostage komponendid, mis teevad midagi ĂŒksikuna hĂ€sti. SeejĂ€rel saate neid vajaduse jĂ€rgi omavahel kombineerida.
Kuidas te muudate raamatukogusid ilma tagasipöördumise ĂŒhilduvust sĂ€ilitamata?
Ăldine Terraform moodul, nagu ka tavaline raamatukogu, peab leidma viisi, kuidas kasutajatele teatada tagasipöördumise ĂŒhilduvuse muutustest. Kui raamatukogudes toimuvad sellised muutused, on see hĂ€iriv, ja sama hĂ€iriv on, kui Terraform moodulites tehakse muutusi, mis ei ole ĂŒhilduvad. Soovitav on kasutada git siltide ja semver'i rakendamist Terraform moodulite puhul.
Kas teie tooteteenus töötab sĂŒlearvutis vĂ”i andmekeskuses?
Hashicorp'il on sellised tööriistad nagu , et kÀivitada teie terraform. Need tsentraliseeritud teenused lihtsustavad terraformi haldamist, auditit ja muudatuste kinnitamist.
Kas te siis tÔesti ei kirjuta teste?
Insenerid tunnistavad, et koodi tuleb testida, kuid sageli unustavad nad ise kontrollida, töötades Terraformi abil. Infrastruktuuri jaoks on see salakaval. Soovitan "testida" vÔi "luua nÀiteid" steke, kasutades mooduleid, mida saab Ôigesti juurutada kontrollimiseks CI/CD ajal.
Terraform ja mikroteenused
MikroteenusettevÔtete elu ja surm sÔltub kiirusest, uuendamisest ja uute mikroteenuste töösteekide hÀvitamisest.
KĂ”ige levinum negatiivne aspekt, mis on seotud mikroteenuse arhitektuuridega ja millest ei saa lahti, puudutab tööd, mitte koodi. Kui vaadata Terraformi ainult kui viisi automatiseerida ainult mikroteenuse arhitektuuri infrastruktuuri kĂŒlge, siis jĂ€tate end ilma tĂ”elistest sĂŒsteemi eelistest. Praegu on juba .
Allikas: habr.com
