Alibadilisha kutoka Terraform hadi CloudFormation - na akajuta

Kuwakilisha miundombinu kama msimbo katika umbizo la maandishi linaloweza kurudiwa ni mbinu bora zaidi kwa mifumo ambayo haihitaji kugombana na panya. Zoezi hili lina jina - Miundombinu kama Kanuni, na hadi sasa kuna zana mbili maarufu za kuitekeleza, haswa katika AWS: Terraform ΠΈ Uundaji wa Wingu.

Alibadilisha kutoka Terraform hadi CloudFormation - na akajuta
Kulinganisha uzoefu na Terraform na CloudFormation

Kabla ya kuja Papatika (yeye Amazon Junior) Nilifanya kazi katika uanzishaji mmoja na kutumika Terraform kwa miaka mitatu. Katika sehemu mpya, pia nilitumia Terraform kwa nguvu zangu zote, na kisha kampuni ikasukuma mpito kwa kila kitu a la Amazon, pamoja na CloudFormation. Nimetengeneza kwa bidii mbinu bora kwa zote mbili, na nimetumia zana zote mbili katika utiririshaji wa kazi ngumu sana, wa shirika zima. Baadaye, baada ya kupima kwa uangalifu athari za kuhama kutoka Terraform hadi CloudFormation, nilisadikishwa kwamba Terraform labda lilikuwa chaguo bora kwa shirika.

Terraform ya kutisha

Programu ya Beta

Terraform bado haijatoa toleo la 1.0, ambayo ni sababu nzuri ya kutoitumia. Imebadilika sana tangu nilipojaribu kwanza mwenyewe, lakini wakati huo terraform apply mara nyingi huvunjika baada ya sasisho kadhaa au tu baada ya miaka michache ya matumizi. Ningesema kwamba "kila kitu ni tofauti sasa," lakini ... ndivyo kila mtu anaonekana kusema, hapana? Kuna mabadiliko ambayo hayaoani na matoleo ya awali, ingawa yanafaa, na hata inahisi kama sintaksia na vifupisho vya maduka ya rasilimali ndivyo tunavyohitaji. Chombo hicho kinaonekana kuwa bora zaidi, lakini... :-0

Kwa upande mwingine, AWS imefanya kazi nzuri kudumisha utangamano wa nyuma. Labda hii ni kwa sababu huduma zao mara nyingi hujaribiwa kikamilifu ndani ya shirika na kisha tu, kubadilishwa jina, kuchapishwa. Kwa hivyo "walijaribu kwa bidii" ni ujinga. Kudumisha utangamano wa nyuma na API za mfumo tofauti na changamano kama AWS ni vigumu sana. Mtu yeyote ambaye amelazimika kudumisha API za umma ambazo zinatumika kwa upana jinsi zinavyopaswa kuelewa jinsi ilivyo ngumu kufanya hivyo kwa miaka mingi. Lakini tabia ya CloudFormation, katika kumbukumbu yangu, haijawahi kubadilika kwa miaka.

Kutana na mguu... ni risasi

Ninavyojua, futa rasilimali mgeni Rafu ya CloudFormation kutoka kwa rafu yako ya CF haiwezekani. Ndivyo ilivyo na Terraform. Inakuruhusu kuingiza rasilimali zilizopo kwenye rafu yako. Kazi inaweza kusema kuwa ya kushangaza, lakini kwa nguvu kubwa huja wajibu mkubwa. Unahitaji tu kuongeza rasilimali kwenye rafu, na unapofanya kazi na rafu yako, huwezi kufuta au kubadilisha rasilimali hii. Siku moja ilirudi nyuma. Siku moja kwenye Twitch, mtu fulani aliingiza kwa bahati mbaya kikundi cha usalama cha AWS cha mtu mwingine kwenye mrundikano wao wa Terraform bila hitilafu yoyote. Niliingia amri kadhaa na ... kikundi cha usalama (pamoja na trafiki inayoingia) kilitoweka.

Terraform Kubwa

Urejeshaji kutoka kwa majimbo ambayo hayajakamilika

Wakati mwingine CloudFormation inashindwa kuhama kabisa kutoka hali moja hadi nyingine. Wakati huo huo, atajaribu kurudi kwa uliopita. Ni huruma kwamba hii haiwezekani kila wakati. Inaweza kuwa ya kutisha sana kutatua kile kilichotokea baadaye - huwezi kujua kama CloudFormation itafurahiya kuwa inadukuliwa - hata ili kurekebisha tu. Ikiwa ataweza kurudi kwenye hali ya awali au la, hajui jinsi ya kuamua na, kwa default, hutegemea kwa saa kusubiri muujiza.

Terraform, kwa upande mwingine, inaelekea kupata nafuu kutokana na mabadiliko yaliyoshindwa kwa uzuri zaidi na inatoa zana za juu za utatuzi.

Mabadiliko wazi zaidi katika hali ya hati

β€œSawa, sawazisha mizigo, unabadilika. Lakini vipi?"

- mhandisi mwenye wasiwasi, yuko tayari kubonyeza kitufe cha "kubali".

Wakati mwingine ninahitaji kufanya ghiliba na kusawazisha mzigo kwenye safu ya CloudFormation, kama vile kuongeza nambari ya bandari au kubadilisha kikundi cha usalama. Maonyesho ya ClouFormation yanabadilika vibaya. Mimi, kwenye pini na sindano, angalia mara mbili faili ya yaml mara kumi ili kuhakikisha kuwa sijafuta chochote muhimu na sijaongeza chochote kisichohitajika.

Terraform ni wazi zaidi katika suala hili. Wakati mwingine yeye ni wazi sana (soma: boring). Kwa bahati nzuri, toleo la hivi punde linajumuisha onyesho lililoboreshwa la mabadiliko ili sasa uweze kuona ni nini hasa kinachobadilika.

Utulivu

Andika programu nyuma.

Ili kuiweka wazi, sifa muhimu zaidi ya programu ya muda mrefu ni uwezo wa kukabiliana na mabadiliko. Andika programu yoyote nyuma. Mara nyingi nilifanya makosa kwa kuchukua huduma "rahisi", na kisha kuanza kuweka kila kitu kwenye safu moja ya CloudFormation au Terraform. Na kwa kweli, miezi kadhaa baadaye ilifunuliwa kuwa nimeelewa kila kitu kibaya, na huduma haikuwa rahisi! Na sasa ninahitaji kwa namna fulani kuvunja stack kubwa katika vipengele vidogo. Unapofanya kazi na CloudFormation, hii inaweza tu kufanywa kwa kuunda tena safu iliyopo, na sifanyi hivi na hifadhidata zangu. Terraform, kwa upande mwingine, ilifanya iwezekane kugawanya stack na kuivunja katika sehemu ndogo zinazoeleweka zaidi.

Moduli kwenye git

Kushiriki msimbo wa Terraform kwenye rafu nyingi ni rahisi zaidi kuliko kushiriki msimbo wa CloudFormation. Ukiwa na Terraform, unaweza kuweka nambari yako kwenye hazina ya git na kuipata kwa kutumia udhibiti wa toleo la semantic. Mtu yeyote aliye na idhini ya kufikia hazina hii anaweza kutumia tena nambari iliyoshirikiwa. Sawa ya CloudFormation ni S3, lakini haina faida sawa, na hakuna sababu kwa nini tunapaswa kuachana na git kwa niaba ya S3 hata kidogo.

Shirika lilikua na uwezo wa kushiriki mafungu ya kawaida ulifikia kiwango muhimu. Terraform hurahisisha haya yote na ya asili, ilhali CloudFormation itakufanya uruke hoops kabla ya kupata kitu kama hiki kufanya kazi.

Uendeshaji kama kanuni

"Wacha tuandike na sawa."

β€” mhandisi miaka 3 kabla ya kuvumbua baiskeli ya Terraform.

Linapokuja suala la ukuzaji wa programu, Go au programu ya Java sio msimbo tu.

Alibadilisha kutoka Terraform hadi CloudFormation - na akajuta
Kanuni kama Kanuni

Pia kuna miundombinu ambayo inafanya kazi.

Alibadilisha kutoka Terraform hadi CloudFormation - na akajuta
Miundombinu kama Kanuni

Lakini anatoka wapi? Jinsi ya kuifuatilia? Msimbo wako unaishi wapi? Je, wasanidi programu wanahitaji idhini ya ufikiaji?

Alibadilisha kutoka Terraform hadi CloudFormation - na akajuta
Uendeshaji kama Kanuni

Kuwa msanidi programu haimaanishi tu kuandika msimbo.

AWS sio pekee: labda unatumia watoa huduma wengine. SignalFx, PagerDuty au Github. Labda una seva ya ndani ya Jenkins ya CI/CD au dashibodi ya ndani ya Grafana ya ufuatiliaji. Infra kama Msimbo huchaguliwa kwa sababu tofauti, na kila moja ni muhimu kwa kila kitu kinachohusiana na programu.

Nilipofanya kazi Twitch, tuliharakisha huduma ndani ya mifumo mchanganyiko ya Amazon iliyopachikwa na AWS. Tuliachana na kuunga mkono huduma ndogo ndogo nyingi, na kuongeza gharama za uendeshaji. Majadiliano yalikwenda kama hii:

  • Π―: Damn, hizo ni ishara nyingi za overclock microservice moja. Nitalazimika kutumia takataka hii kuunda akaunti ya AWS (tulienda kwa akaunti 2 huduma ndogo), kisha hii ya kusanidi arifa, hii ya hazina ya msimbo, na hii ya orodha ya barua pepe, halafu hii...
  • Kuongoza: Wacha tuiandike na sawa.
  • Π―: Sawa, lakini hati yenyewe itabadilika. Tutahitaji njia ya kuangalia kwamba gizmos hizi zote za Amazon zilizojengwa ni za kisasa.
  • Kuongoza: Inasikika vizuri. Na tutaandika maandishi kwa hili.
  • Π―: Kubwa! Na hati labda bado itahitaji kuweka vigezo. Je, atazikubali?
  • Kuongoza: Achukue anakokwenda!
  • Π―: Mchakato unaweza kubadilika na uoanifu wa nyuma utapotea. Aina fulani ya udhibiti wa toleo la semantic itahitajika.
  • Kuongoza: Wazo nzuri!
  • Π―: Zana zinaweza kubadilishwa kwa mikono, ndani ya kiolesura cha mtumiaji. Tutahitaji njia ya kuangalia na kurekebisha hili.

…miaka 3 baadaye:

  • Kuongoza: Na tulipata terraform.

Maadili ya hadithi ni: hata kama wewe kichwa juu ya visigino katika kila kitu Amazon, bado unatumia kitu kisichotoka kwa AWS, na huduma hizi zina hali inayotumia lugha ya usanidi kuweka hali hiyo katika usawazishaji.

CloudFormation lambda vs git moduli terraform

lambda ni suluhisho la CloudFormation kwa suala la mantiki maalum. Kwa lambda unaweza tengeneza macros au rasilimali ya mtumiaji. Mbinu hii inaleta ugumu zaidi ambao haupo katika toleo la kisemantiki la Terraform la moduli za git. Kwangu, shida kubwa zaidi ilikuwa kudhibiti ruhusa kwa lambda hizi zote za watumiaji (na hizi ni akaunti nyingi za AWS). Tatizo jingine muhimu lilikuwa ni tatizo la β€œnini kilikuja kwanza, kuku au yai?”: lilihusiana na msimbo wa lambda. Kazi hii yenyewe ni miundombinu na kanuni, na yenyewe inahitaji ufuatiliaji na sasisho. Msumari wa mwisho kwenye jeneza ulikuwa ugumu wa kusasisha mabadiliko ya msimbo wa lambda kisemantiki; tulilazimika pia kuhakikisha kuwa vitendo vya stack bila amri ya moja kwa moja hazibadilika kati ya kukimbia.

Nakumbuka mara moja nilitaka kuunda uwekaji wa canary kwa mazingira ya Elastic Beanstalk na kusawazisha mzigo wa kawaida. Jambo rahisi zaidi kufanya litakuwa kufanya uwekaji wa pili kwa EB karibu na mazingira ya uzalishaji, kuchukua hatua zaidi: kuchanganya kikundi cha uwekaji wa canary ya kuongeza kasi na uwekaji LB katika mazingira ya uzalishaji. Na kwa kuwa Terraform hutumia ASG beantalk kama hitimisho, hii itahitaji mistari 4 ya ziada ya nambari katika Terraform. Nilipouliza ikiwa kuna suluhisho la kulinganishwa katika CloudFormation, walinielekeza kwenye hazina nzima ya git iliyo na bomba la kupeleka na kila kitu, yote kwa ajili ya kitu ambacho mistari 4 duni ya nambari ya Terraform inaweza kufanya.

Inatambua drift bora

Hakikisha ukweli unalingana na matarajio.

Utambuzi wa drift ni utendakazi wenye nguvu sana kama kipengele cha msimbo kwa sababu husaidia kuhakikisha kuwa ukweli unalingana na matarajio. Inapatikana na CloudFormation na Terraform. Lakini kadiri mkusanyiko wa uzalishaji ulivyokua, utafutaji wa kuteleza katika CloudFormation ulizalisha ugunduzi zaidi na zaidi wa uwongo.

Ukiwa na Terraform una ndoano za hali ya juu zaidi za mzunguko wa maisha kwa ajili ya kugundua drift. Kwa mfano, unaingiza amri kupuuza_mabadiliko moja kwa moja katika ufafanuzi wa kazi wa ECS ikiwa ungependa kupuuza mabadiliko ya ufafanuzi mahususi wa kazi bila kupuuza mabadiliko kwenye uwekaji wako wote wa ECS.

CDK na mustakabali wa CloudFormation

CloudFormation ni ngumu kudhibiti kwa jumla, mizani ya miundombinu mtambuka. Shida nyingi hizi zinatambuliwa na chombo kinahitaji vitu kama hivyo aws-cdk, mfumo wa kufafanua miundombinu ya wingu katika msimbo na kuiendesha kupitia AWS CloudFormation. Itakuwa ya kuvutia kuona nini siku zijazo kwa aws-cdk, lakini itakuwa na wakati mgumu kushindana na nguvu zingine za Terraform; ili kusasisha CloudFormation, mabadiliko ya kimataifa yatahitajika.

Ili Terraform isikatishe tamaa

Hii ni "miundombinu kama nambari", na sio "kama maandishi".

Maoni yangu ya kwanza ya Terraform yalikuwa mabaya sana. Nadhani sikuelewa mbinu. Takriban wahandisi wote huiona bila hiari kama umbizo la maandishi ambalo linahitaji kubadilishwa kuwa muundo msingi unaohitajika. USIFANYE HIVI.

Ukweli wa usanidi mzuri wa programu pia unatumika kwa Terraform.

Nimeona mazoea mengi yaliyopitishwa kuunda nambari nzuri yakipuuzwa katika Terraform. Umesoma kwa miaka mingi ili kuwa mpanga programu mzuri. Usiache kutumia uzoefu huu kwa sababu tu unafanya kazi na Terraform. Ukweli wa uundaji mzuri wa programu unatumika kwa Terraform.

Je, kanuni inawezaje kuandikwa?

Nimeona safu kubwa za Terraform bila hati kabisa. Unawezaje kuandika nambari kwenye kurasa - bila hati kabisa? Ongeza hati zinazoelezea yako code Terraform (msisitizo juu ya neno "code"), kwa nini sehemu hii ni muhimu sana, na unachofanya.

Tunawezaje kupeleka huduma ambazo hapo awali zilikuwa kazi kuu kuu ()?

Nimeona safu ngumu sana za Terraform zikiwasilishwa kama moduli moja. Kwa nini tusiweke programu kwa njia hii? Kwa nini tunagawanya kazi kubwa katika ndogo? Majibu sawa yanatumika kwa Terraform. Ikiwa moduli yako ni kubwa sana, unahitaji kuigawanya katika moduli ndogo.

Je, kampuni yako haitumii maktaba?

Nimeona jinsi wahandisi, wakitengeneza mradi mpya kwa kutumia Terraform, walivyobandika kwa ujinga vijisehemu vikubwa kutoka kwa miradi mingine hadi vyao, na kisha kuvichanganya hadi ikaanza kufanya kazi. Je, utafanya kazi kama hii na msimbo wa "pigana" katika kampuni yako? Hatutumii maktaba pekee. Ndiyo, sio kila kitu kinapaswa kuwa maktaba, lakini tuko wapi bila maktaba za pamoja kimsingi?!

Je, hutumii PEP8 au gofmt?

Lugha nyingi zina muundo wa kawaida, unaokubalika wa umbizo. Katika Python hii ni PEP8. Katika Go - gofmt. Terraform ina yake mwenyewe: terraform fmt. Furahia kwa afya yako!

Je, utatumia React bila kujua JavaScript?

Moduli za Terraform zinaweza kurahisisha baadhi ya sehemu ya miundombinu changamano unayounda, lakini hii haimaanishi kuwa huwezi kuifikiria hata kidogo. Unataka kutumia Terraform kwa usahihi bila kuelewa rasilimali? Umehukumiwa: wakati utapita, na hautawahi bwana Terraform.

Je, unaandika kwa kutumia singletons au sindano ya utegemezi?

Sindano ya utegemezi ni mbinu bora inayotambulika kwa ukuzaji wa programu na inapendekezwa zaidi ya singletons. Je, hii ina manufaa gani katika Terraform? Nimeona moduli za Terraform ambazo zinategemea hali ya mbali. Badala ya kuandika moduli zinazorudisha hali ya mbali, andika moduli ambayo inachukua vigezo. Na kisha kupitisha vigezo hivi kwa moduli.

Je, maktaba zako zinafanya mambo kumi vizuri au jambo moja kubwa?

Maktaba zinazofanya kazi vizuri zaidi ni zile zinazozingatia kazi moja ambayo hufanya vizuri sana. Badala ya kuandika moduli kubwa za Terraform ambazo hujaribu kufanya kila kitu mara moja, jenga sehemu ambazo hufanya jambo moja vizuri. Na kisha kuchanganya kama inahitajika.

Je, unafanyaje mabadiliko kwa maktaba bila uoanifu wa nyuma?

Moduli ya kawaida ya Terraform, kama maktaba ya kawaida, inahitaji kwa namna fulani kuwasilisha mabadiliko kwa watumiaji bila kuwa nyuma sambamba. Inakera mabadiliko haya yanapotokea katika maktaba, na inakera vile vile wakati mabadiliko yasiyolingana na nyuma yanafanywa katika moduli za Terraform. Inashauriwa kutumia vitambulisho vya git na semver unapotumia moduli za Terraform.

Je, huduma yako ya utayarishaji inaendeshwa kwenye kompyuta yako ndogo au katika kituo cha data?

Hashicorp ina zana kama wingu la terraform kuendesha terraform yako. Huduma hizi za serikali kuu hurahisisha kudhibiti, kukagua na kuidhinisha mabadiliko ya ardhi.

Huandiki vipimo?

Wahandisi wanatambua kwamba msimbo unahitaji kujaribiwa, lakini wao wenyewe mara nyingi husahau kuhusu kupima wakati wa kufanya kazi na Terraform. Kwa miundombinu, hii imejaa wakati wa hila. Ushauri wangu ni "kujaribu" au "unda safu za mfano" kwa kutumia moduli ambazo zinaweza kutumwa kwa usahihi kwa majaribio wakati wa CI/CD.

Terraform na microservices

Maisha na kifo cha kampuni za huduma ndogo hutegemea kasi, uvumbuzi, na usumbufu wa safu mpya za huduma ndogo.

Kipengele cha kawaida hasi kinachohusishwa na usanifu wa microservice, na ambayo haiwezi kuondolewa, inahusiana na kazi, si kanuni. Ikiwa unafikiria Terraform kama njia tu ya kugeuza tu upande wa miundombinu ya usanifu wa huduma ndogo, basi unakosa faida za kweli za mfumo. Sasa ni tayari kila kitu ni kama kanuni.

Chanzo: mapenzi.com

Kuongeza maoni