LĂ€ksin Terraformilt CloudFormationile — ja kahetsen seda.

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

LĂ€ksin Terraformilt CloudFormationile — ja kahetsen seda.
VÔrdlen oma kogemusi Terraformi ja CloudFormationiga

Enne kui tulin Twitch (samuti Amazon Jr.) töötasin ĂŒhes idufirmas 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.

LĂ€ksin Terraformilt CloudFormationile — ja kahetsen seda.
Code as Code

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

LĂ€ksin Terraformilt CloudFormationile — ja kahetsen seda.
Infrastruktuur kui kood

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

LĂ€ksin Terraformilt CloudFormationile — ja kahetsen seda.
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 luua makrosid vĂ”i kasutajaressurssi. 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 ASG-beantalk kui vĂ€ljund, 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.

Triivi tuvastamine — 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 ignore_changes 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 aws-cdk, 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, mitte kĂ”ik ei pea olema raamatukogu, 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 terraform cloud , 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 kĂ”ik — kui kood.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster