Gibalhin gikan sa Terraform ngadto sa CloudFormation - ug nagbasol niini

Ang pagrepresentar sa imprastraktura isip code sa usa ka balik-balik nga format sa teksto usa ka yano nga labing maayo nga praktis alang sa mga sistema nga wala magkinahanglan og paglitok sa mga ilaga. Kini nga praktis adunay ngalan - Imprastraktura isip Code, ug hangtod karon adunay duha ka sikat nga himan aron ipatuman kini, labi na sa AWS: Terraform и CloudFormation.

Gibalhin gikan sa Terraform ngadto sa CloudFormation - ug nagbasol niini
Pagkumpara sa kasinatian sa Terraform ug CloudFormation

Sa wala pa moabut sa Labnot (siya kay Amazon Jr.) Nagtrabaho ko sa usa ka pagsugod ug gigamit ang Terraform sulod sa tulo ka tuig. Sa bag-ong lugar, gigamit usab nako ang Terraform sa tanan nakong kusog, ug dayon giduso sa kompanya ang pagbalhin sa tanan nga a la Amazon, lakip ang CloudFormation. Makugi kong nakaugmad ug labing maayong mga gawi alang sa duha, ug migamit sa duha ka himan sa komplikado kaayo, tibuok-organisasyon nga mga workflow. Sa ulahi, human mahunahunaon nga timbangtimbangon ang mga implikasyon sa paglalin gikan sa Terraform ngadto sa CloudFormation, nakombinsir ko nga ang Terraform mao tingali ang pinakamaayong pagpili alang sa organisasyon.

Terraform Makalilisang

Beta software

Ang Terraform wala pa gani nagpagawas sa bersyon 1.0, nga usa ka maayong rason nga dili kini gamiton. Daghan na kaayog nabag-o sukad sa una nakong pagsulay sa akong kaugalingon, pero niadto terraform apply kanunay nga naguba pagkahuman sa daghang mga pag-update o pagkahuman sa pila ka tuig nga paggamit. Moingon ko nga "ang tanan lahi na karon," apan ... kana ang giingon sa tanan, no? Adunay mga pagbag-o nga dili uyon sa nangaging mga bersyon, bisan kung kini angay, ug gibati pa gani nga ang syntax ug abstraction sa mga resource store mao na ang atong gikinahanglan. Ang instrumento morag mas maayo pa, apan... :-0

Sa laing bahin, ang AWS nakahimo og maayong trabaho sa pagpadayon sa atrasado nga pagkaangay. Kini tingali tungod kay ang ilang mga serbisyo kanunay nga hingpit nga gisulayan sa sulod sa organisasyon ug pagkahuman, gibag-o ang ngalan, gipatik. Busa ang "naningkamot sila pag-ayo" usa ka gamay nga pahayag. Ang pagpadayon sa atrasado nga pagkaangay sa mga API alang sa usa ka sistema nga lainlain ug komplikado sama sa AWS lisud kaayo. Bisan kinsa nga kinahanglan nga magmentinar sa mga publiko nga API nga gigamit nga ingon ka kaylap kung unsa sila kinahanglan nga makasabut kung unsa ka lisud ang pagbuhat niini sa daghang mga tuig. Apan ang pamatasan sa CloudFormation, sa akong panumduman, wala gyud mausab sa daghang mga tuig.

Himamata ang bitiis... bala

Sa akong nahibaw-an, delete ang resource taga gawas CloudFormation stack gikan sa imong CF stack dili mahimo. Tinuod usab kini sa Terraform. Kini nagtugot kanimo sa pag-import sa kasamtangan nga mga kapanguhaan ngadto sa imong stack. Ang function mahimong giingon nga talagsaon, apan uban sa dako nga gahum moabut dako nga responsibilidad. Kinahanglan ka lang magdugang usa ka kapanguhaan sa stack, ug samtang nagtrabaho ka sa imong stack, dili nimo mapapas o usbon kini nga kapanguhaan. Usa ka adlaw nibalik kini. Usa ka adlaw sa Twitch, adunay usa nga aksidente nga nag-import sa grupo sa seguridad sa AWS sa usa ka tawo sa ilang kaugalingon nga stack sa Terraform samtang wala’y bisan unsang kadaotan. Gisulod nako ang daghang mga sugo ug... ang grupo sa seguridad (uban ang umaabot nga trapiko) nawala.

Nindot ang Terraform

Pagbawi gikan sa dili kompleto nga mga estado

Usahay ang CloudFormation mapakyas sa hingpit nga pagbalhin gikan sa usa ka estado ngadto sa lain. Sa samang higayon, siya mosulay sa pagbalik sa nauna. Makapasubo nga kini dili kanunay mahimo. Makahadlok kaayo nga i-debug kung unsa ang nahitabo sa ulahi - dili nimo mahibal-an kung malipay ba ang CloudFormation nga kini gi-hack - bisan aron ayohon kini. Posible ba o dili nga mobalik sa miaging estado, wala gyud siya mahibal-an kung giunsa pagtino ug, sa kasagaran, nagbitay sa daghang oras nga naghulat alang sa usa ka milagro.

Ang Terraform, sa laing bahin, lagmit nga makabawi gikan sa napakyas nga mga transisyon nga labi ka matahum ug nagtanyag mga advanced nga gamit sa pag-debug.

Mas klaro nga mga pagbag-o sa estado sa dokumento

“Sige, load balancer, nag-ilis ka. Pero unsaon?"

—mabalak-on nga inhenyero, andam nga ipadayon ang buton nga "dawaton".

Usahay kinahanglan nako nga buhaton ang pipila ka mga manipulasyon sa load balancer sa CloudFormation stack, sama sa pagdugang sa numero sa port o pagbag-o sa usa ka grupo sa seguridad. Ang ClouFormation nagpakita sa mga pagbag-o nga dili maayo. Ako, sa mga lagdok ug dagom, doble-check ang yaml file sa napulo ka beses aron sa pagsiguro nga ako wala mapapas bisan unsa nga gikinahanglan ug wala makadugang bisan unsa nga wala kinahanglana.

Ang Terraform labi ka transparent bahin niini. Usahay gani transparent kaayo siya (read: annoying). Maayo na lang, ang pinakabag-o nga bersyon naglakip sa gipaayo nga pagpakita sa mga pagbag-o aron makita nimo karon kung unsa ang nagbag-o.

Flexibility

Isulat ang software pabalik.

Sa prangka nga pagkasulti, ang labing hinungdanon nga kinaiya sa dugay na nga software mao ang abilidad sa pagpahiangay sa pagbag-o. Isulat ang bisan unsang software pabalik. Kasagaran nakahimo ko og mga sayop pinaagi sa pagkuha sa usa ka "yano" nga serbisyo, ug dayon nagsugod sa pag-cram sa tanan ngadto sa usa ka CloudFormation o Terraform stack. Ug siyempre, mga bulan ang milabay kini gipadayag nga akong nasabtan ang tanan nga sayup, ug ang serbisyo sa pagkatinuod dili yano! Ug karon kinahanglan nako nga putlon ang usa ka dako nga stack sa gagmay nga mga sangkap. Kung nagtrabaho ka sa CloudFormation, mahimo ra kini pinaagi sa una nga paghimo pag-usab sa naglungtad nga stack, ug dili nako kini buhaton sa akong mga database. Ang Terraform, sa laing bahin, nagpaposible sa pag-dissect sa stack ug pagbungkag niini ngadto sa mas masabtan nga gagmay nga mga bahin.

Mga module sa git

Ang pagpaambit sa Terraform code sa daghang mga stack labi ka dali kaysa pagpaambit sa CloudFormation code. Uban sa Terraform, mahimo nimong ibutang ang imong code sa usa ka git repository ug ma-access kini gamit ang semantic version control. Bisan kinsa nga adunay access sa kini nga repository mahimong magamit pag-usab ang gipaambit nga code. Ang katumbas sa CloudFormation mao ang S3, apan wala kini parehas nga mga benepisyo, ug wala’y hinungdan ngano nga kinahanglan naton biyaan ang git pabor sa S3.

Ang organisasyon mitubo ug ang abilidad sa pagpaambit sa komon nga mga stack nakaabot sa kritikal nga lebel. Ang Terraform naghimo niining tanan nga sayon ​​ug natural, samtang ang CloudFormation mohimo kanimo sa paglukso sa mga singsing sa dili pa nimo makuha ang usa ka butang nga sama niini nga nagtrabaho.

Mga operasyon isip code

"Atong i-script ug okay."

—usa ka inhenyero 3 ka tuig sa wala pa maimbento ang Terraform nga bisikleta.

Kung bahin sa pagpalambo sa software, ang Go o usa ka Java nga programa dili lang code.

Gibalhin gikan sa Terraform ngadto sa CloudFormation - ug nagbasol niini
Code isip Code

Anaa usab ang imprastraktura diin kini nagtrabaho.

Gibalhin gikan sa Terraform ngadto sa CloudFormation - ug nagbasol niini
Imprastraktura isip Code

Apan diin siya gikan? Unsaon pagmonitor niini? Asa nagpuyo imong code? Kinahanglan ba sa mga developer ang pagtugot sa pag-access?

Gibalhin gikan sa Terraform ngadto sa CloudFormation - ug nagbasol niini
Mga operasyon isip Code

Ang pagkahimong usa ka software developer wala lang nagpasabut sa pagsulat sa code.

Dili lang ang AWS: lagmit mogamit ka sa ubang mga provider. SignalFx, PagerDuty o Github. Tingali adunay usa ka internal nga server sa Jenkins alang sa CI / CD o usa ka internal nga dashboard sa Grafana alang sa pag-monitor. Ang Infra as Code gipili alang sa lainlaing mga hinungdan, ug ang matag usa parehas nga hinungdanon alang sa tanan nga may kalabotan sa software.

Sa dihang nagtrabaho ko sa Twitch, gipadali namo ang mga serbisyo sulod sa gisagol nga embedded ug AWS nga sistema sa Amazon. Naghimo kami ug nagsuporta sa daghang mga microservice, nagdugang sa gasto sa operasyon. Ang mga panaghisgot ingon niini:

  • Я: Damn, kana daghang mga lihok sa pag-overclock sa usa ka microservice. Kinahanglan nako nga gamiton kini nga basura aron makahimo usa ka AWS account (miadto kami sa 2 nga mga account sa microservice), unya kini alang sa pag-set up sa mga alerto, kini alang sa usa ka code repository, ug kini alang sa usa ka lista sa email, ug kini usa ...
  • Tingga: Let's script it ug okay.
  • Я: Okay, pero ang script mismo mausab. Kinahanglan namon ang usa ka paagi aron masusi nga ang tanan nga kini nga mga built-in nga gizmos sa Amazon hangtod karon.
  • Tingga: Nindot paminawon. Ug magsulat kami usa ka script alang niini.
  • Я: Nindot! Ug ang script tingali kinahanglan pa nga magbutang mga parameter. Dawaton ba niya sila?
  • Tingga: Pasagdi siya kung asa siya moadto!
  • Я: Mahimong mausab ang proseso ug mawala ang paatras nga pagkaangay. Ang pipila ka matang sa semantic version control gikinahanglan.
  • Tingga: Nindot nga ideya!
  • Я: Ang mga himan mahimong usbon sa mano-mano, sulod sa user interface. Kinahanglan namon ang usa ka paagi sa pagsusi ug pag-ayo niini.

… 3 ka tuig ang milabay:

  • Tingga: Ug kami adunay terraform.

Ang moral sa istorya mao ang: bisan kung ikaw ulo sa tikod sa tanan nga Amazon, naggamit ka gihapon og usa ka butang nga dili gikan sa AWS, ug kini nga mga serbisyo adunay usa ka estado nga naggamit sa usa ka pinulongan sa pag-configure aron mapadayon ang kana nga estado sa pag-sync.

CloudFormation lambda vs git modules terraform

Ang lambda mao ang solusyon sa CloudFormation sa kostumbre nga isyu sa lohika. Uban sa lambda mahimo nimo paghimo macros o kapanguhaan sa tiggamit. Kini nga pamaagi nagpaila sa dugang nga pagkakomplikado nga wala sa Terraform nga semantiko nga bersyon sa git modules. Alang kanako, ang labing dinalian nga problema mao ang pagdumala sa mga permiso para sa tanan nga mga lambdas sa mga gumagamit (ug kini mga dosena nga mga account sa AWS). Laing importante nga problema mao ang "unsay nauna, ang manok o ang itlog?" problema: kini may kalabutan sa lambda code. Kini nga function mismo mao ang imprastraktura ug code, ug kini mismo nanginahanglan pag-monitor ug pag-update. Ang kataposang lansang sa lungon mao ang kalisod sa semantikong pag-update sa mga kausaban sa lambda code; kinahanglan usab namon nga sigurohon nga ang mga aksyon sa stack nga wala’y direkta nga mando wala magbag-o taliwala sa mga pagdagan.

Nahinumdom ko sa higayon nga gusto nako nga maghimo usa ka pag-deploy sa canary alang sa Elastic Beanstalk nga palibot nga adunay usa ka klasiko nga balanse sa pagkarga. Ang labing sayon ​​nga butang nga buhaton mao ang paghimo sa ikaduhang deployment para sa EB sunod sa production environment, paghimo niini sa usa ka lakang nga dugang: paghiusa sa auto-scaling canary deployment group uban sa deployment LB ngadto sa production environment. Ug tungod kay gigamit sa Terraform ASG beantalk isip konklusyon, magkinahanglan kini og 4 ka dugang nga linya sa code sa Terraform. Sa diha nga ako nangutana kon adunay usa ka susama nga solusyon sa CloudFormation, sila nagtudlo kanako ngadto sa usa ka tibuok git repository uban sa usa ka deployment pipeline ug sa tanan, ang tanan alang sa usa ka butang nga dili maayo nga 4 linya sa Terraform code mahimo.

Mas maayo nga makit-an ang pag-anod

Siguroha nga ang realidad mohaum sa mga gilauman.

Pag-detect sa drift usa ka gamhanan kaayo nga mga operasyon isip feature sa code tungod kay kini makatabang sa pagsiguro nga ang kamatuoran mohaum sa mga gilauman. Anaa kini sa CloudFormation ug Terraform. Apan samtang nagkadako ang production stack, ang pagpangita sa drift sa CloudFormation nagpatunghag mas daghang sayop nga detection.

Sa Terraform aduna kay mas abante nga lifecycle hooks para sa drift detection. Pananglitan, ikaw mosulod sa sugo ibaliwala_kausaban direkta sa kahulugan sa buluhaton sa ECS kung gusto nimo nga ibalewala ang mga pagbag-o sa usa ka piho nga kahulugan sa buluhaton nga dili ibaliwala ang mga pagbag-o sa imong tibuuk nga pag-deploy sa ECS.

CDK ug ang kaugmaon sa CloudFormation

Ang CloudFormation lisud pagdumala sa dako, cross-infrastructure scales. Daghan niini nga mga kalisdanan ang giila ug ang himan nagkinahanglan sa mga butang nga sama aws-cdk, usa ka balangkas alang sa pagtino sa cloud infrastructure sa code ug pagpadagan niini pinaagi sa AWS CloudFormation. Makapaikag nga tan-awon kung unsa ang umaabot alang sa aws-cdk, apan maglisud kini nga makigkompetensya sa ubang mga kusog sa Terraform; aron madala ang CloudFormation nga labing bag-o, kinahanglan ang mga pagbag-o sa kalibutan.

Aron ang Terraform dili makapahigawad

Kini ang "imprastraktura ingon usa ka code", ug dili "ingon usa ka teksto".

Ang akong unang impresyon sa Terraform kay dili maayo. Nagtuo ko nga wala lang ko kasabot sa pamaagi. Hapit tanan nga mga inhenyero dili boluntaryo nga nakasabut niini ingon usa ka format sa teksto nga kinahanglan nga mabag-o sa gusto nga imprastraktura. AYAW NIINI HIMUOT.

Ang mga kamatuoran sa maayong software development magamit usab sa Terraform.

Nakita nako ang daghang mga gawi nga gisagop sa paghimo og maayong code nga wala gibalewala sa Terraform. Nagtuon ka sulod sa daghang katuigan aron mahimong maayong programmer. Ayaw biyai kini nga kasinatian tungod lang kay nagtrabaho ka sa Terraform. Ang mga kamatuoran sa maayong software development magamit sa Terraform.

Sa unsang paagi dili madokumento ang kodigo?

Nakita nako ang dagkong mga stack sa Terraform nga wala’y dokumentasyon. Giunsa nimo pagsulat ang code sa mga panid - nga wala’y dokumentasyon? Idugang ang dokumentasyon nga nagpatin-aw sa imong code Terraform (pagpasiugda sa pulong "code"), nganong kini nga seksyon importante kaayo, ug unsay imong gibuhat.

Unsaon nato pag-deploy ang mga serbisyo nga kaniadto usa ka dako nga main() function?

Nakita nako ang komplikado kaayo nga mga stack sa Terraform nga gipresentar isip usa ka module. Ngano nga dili nato i-deploy ang software niining paagiha? Nganong gibahin nato ang dagkong mga gimbuhaton ngadto sa mas gagmay? Ang parehas nga mga tubag magamit sa Terraform. Kung ang imong module dako kaayo, kinahanglan nimo nga bungkagon kini ngadto sa gagmay nga mga module.

Dili ba ang imong kompanya naggamit mga librarya?

Nakita nako kung giunsa sa mga inhenyero, nga nag-spin up sa usa ka bag-ong proyekto gamit ang Terraform, hungog nga nagkopya-paste sa dagkong mga tipik gikan sa ubang mga proyekto ngadto sa ilang kaugalingon, ug dayon nag-ukay-ukay niini hangtod nga nagsugod kini sa pagtrabaho. Magtrabaho ka ba nga sama niini gamit ang "combat" code sa imong kompanya? Dili lang mga library ang gigamit namo. Oo, Dili tanan kinahanglan nga librarya, pero asa man ta nga walay shared library sa prinsipyo?!

Wala ka naggamit ug PEP8 o gofmt?

Kadaghanan sa mga pinulongan adunay usa ka sumbanan, gidawat nga pamaagi sa pag-format. Sa Python kini ang PEP8. Sa Go - gofmt. Ang Terraform adunay iyang kaugalingon: terraform fmt. Enjoy kini para sa imong panglawas!

Gigamit ba nimo ang React nga wala nahibal-an ang JavaScript?

Ang mga modulo sa Terraform makapasimple sa pipila ka bahin sa komplikadong imprastraktura nga imong gihimo, apan wala kini magpasabut nga dili nimo kini mahimo. Gusto nga gamiton ang Terraform sa hustong paagi nga wala makasabut sa mga kapanguhaan? Nalaglag ka: ang oras molabay, ug dili ka maka-master sa Terraform.

Nag-coding ka ba sa mga singleton o dependency injection?

Ang dependency injection usa ka giila nga labing kaayo nga praktis alang sa pagpalambo sa software ug gipalabi kaysa mga singleton. Sa unsang paagi kini mapuslanon sa Terraform? Nakita nako ang mga module sa Terraform nga nagdepende sa hilit nga estado. Imbis nga magsulat og mga module nga nagkuha sa hilit nga estado, pagsulat usa ka module nga nagkuha mga parameter. Ug dayon ipasa kini nga mga parameter sa module.

Maayo ba ang gibuhat sa imong mga librarya o usa ka butang nga maayo?

Ang mga librarya nga labing nagtrabaho mao kadtong nagpunting sa usa ka buluhaton nga maayo kaayo ang ilang nahimo. Imbis nga isulat ang dagkong mga module sa Terraform nga mosulay sa pagbuhat sa tanan sa usa ka higayon, paghimo og mga bahin niini nga maayo ang pagbuhat sa usa ka butang. Ug dayon isagol kini kung gikinahanglan.

Giunsa nimo paghimo ang mga pagbag-o sa mga librarya nga wala’y backward compatibility?

Ang usa ka sagad nga module sa Terraform, sama sa usa ka regular nga librarya, kinahanglan nga magpahibalo sa mga pagbag-o sa mga tiggamit nga wala’y paatras nga katugma. Makalagot kung kini nga mga pagbag-o mahitabo sa mga librarya, ug kini sama ka makalagot kung ang mga dili katugma nga pagbag-o gihimo sa mga module sa Terraform. Kini girekomendar sa paggamit sa git tags ug semver sa diha nga sa paggamit sa Terraform modules.

Nagdagan ba ang imong serbisyo sa produksiyon sa imong laptop o sa usa ka sentro sa datos?

Ang Hashicorp adunay mga himan sama sa terraform nga panganod sa pagpadagan sa imong terraform. Kining mga sentralisadong serbisyo nagpasayon ​​sa pagdumala, pag-audit, ug pag-apruba sa mga kausaban sa terraform.

Dili ka ba magsulat og mga pagsulay?

Giila sa mga inhenyero nga ang code kinahanglan nga sulayan, apan sila mismo kanunay nga nakalimot bahin sa pagsulay kung nagtrabaho kauban ang Terraform. Alang sa imprastraktura, kini puno sa mga mabudhion nga mga higayon. Ang akong tambag mao ang "pagsulay" o "paghimo og panig-ingnan" nga mga stack gamit ang mga module nga mahimong ma-deploy sa husto alang sa pagsulay sa panahon sa CI / CD.

Terraform ug microservices

Ang kinabuhi ug pagkamatay sa mga kompanya sa microservice nagdepende sa katulin, kabag-ohan, ug pagkabalda sa bag-ong microservice workstacks.

Ang labing kasagaran nga negatibo nga aspeto nga adunay kalabotan sa mga arkitektura sa microservice, ug nga dili mapapas, adunay kalabotan sa trabaho, dili sa code. Kung gihunahuna nimo ang Terraform ingon usa ka paagi aron ma-automate lamang ang bahin sa imprastraktura sa usa ka arkitektura sa microservice, nan nawala ka sa tinuud nga mga benepisyo sa sistema. Karon naa na ang tanan sama sa code.

Source: www.habr.com

Idugang sa usa ka comment