Гузариш аз Terraform ба CloudFormation - ва пушаймон шуд

Намоиши инфрасохтор ҳамчун код дар формати матнии такроршаванда як таҷрибаи беҳтарин барои системаҳое мебошад, ки бо мушҳо муроқибатро талаб намекунанд. Ин амал як ном дорад - Инфраструктура ҳамчун кодекс, ва то ҳол ду асбоби маъмул барои татбиқи он мавҷуданд, махсусан дар AWS: Терафром и CloudFormation.

Гузариш аз Terraform ба CloudFormation - ва пушаймон шуд
Муқоисаи таҷриба бо Terraform ва CloudFormation

Пеш аз омадан ба гоҳ-гоҳ кашиданAmazon Jr.) Ман кор карда истодаам дар як стартап ва Терраформро се сол истифода бурд. Дар ҷои нав, ман инчунин Terraform-ро бо тамоми қувваи худ истифода кардам ва он гоҳ ширкат гузаришро ба ҳама чизи Amazon, аз ҷумла CloudFormation тела дод. Ман барои ҳарду таҷрибаҳои беҳтаринро бо ҷидду ҷаҳд таҳия кардам ва ҳарду асбобро дар ҷараёнҳои кории хеле мураккаби созмон истифода кардам. Баъдтар, пас аз бодиққат барраси кардани оқибатҳои муҳоҷират аз Terraform ба CloudFormation, ман боварӣ ҳосил кардам, ки Terraform эҳтимолан беҳтарин интихоб барои созмон аст.

Терраформ даҳшатнок

Нармафзори бета

Terraform ҳатто версияи 1.0-ро нашр накардааст, ки ин сабаби хуб барои истифода накардани он аст. Аз он замоне, ки ман онро худам бори аввал санҷидаам, хеле тағйир ёфт, аммо дар он вақт terraform apply аксар вақт пас аз якчанд навсозӣ ё танҳо пас аз чанд соли истифода вайрон мешавад. Ман мегуфтам, ки «ҳоло ҳама чиз дигар аст», аммо... ҳамин тавр ба назар мерасад, ки ҳама мегӯянд, не? Тағиротҳое ҳастанд, ки бо версияҳои қаблӣ номувофиқанд, гарчанде ки онҳо мувофиқанд ва ҳатто чунин ба назар мерасад, ки синтаксис ва абстраксияҳои мағозаҳои захиравӣ ҳоло он чизест, ки ба мо лозим аст. Чунин ба назар мерасад, ки асбоб воқеан беҳтар шудааст, аммо... :-0

Аз тарафи дигар, AWS кори хуберо анҷом дод, ки мутобиқати ақибро нигоҳ дорад. Эҳтимол ин аз он сабаб бошад, ки хидматҳои онҳо аксар вақт дар дохили созмон ҳамаҷониба санҷида мешаванд ва танҳо пас аз он, ки номашон иваз карда мешавад, нашр мешавад. Аз ин рӯ, "онҳо сахт кӯшиш карданд" ин кам аст. Нигоҳ доштани мутобиқати ақиб бо API-ҳо барои системае, ки ба мисли AWS гуногун ва мураккаб аст, бениҳоят мушкил аст. Ҳар касе, ки лозим буд, ки API-ҳои ҷамъиятиро, ки ба қадри кофӣ васеъ истифода мешаванд, нигоҳ дорад, бояд фаҳмад, ки дар тӯли солҳои зиёд ин кор чӣ қадар душвор аст. Аммо рафтори CloudFormation, дар хотираи ман, дар тӯли солҳо ҳеҷ гоҳ тағир наёфтааст.

Бо по вохӯред... ин тир аст

То ҷое ки ман медонам, захираро нест кунед бегона Стеки CloudFormation аз стеки CF-и шумо имконнопазир аст. Айнан ҳамин чиз бо Terraform аст. Он ба шумо имкон медиҳад, ки захираҳои мавҷударо ба стеки худ ворид кунед. Функсияро метавон аҷиб гуфт, аммо бо қудрати бузург масъулияти бузург ба бор меорад. Шумо танҳо лозим аст, ки ба стек захира илова кунед ва ҳангоми кор бо стек шумо наметавонед ин захираро нест кунед ё тағир диҳед. Як рӯз ин баргашт. Як рӯз дар Twitch, касе тасодуфан гурӯҳи амниятии AWS-и ягон каси дигарро ба стеки Terraform-и худ ворид кард, дар ҳоле ки ҳеҷ гуна бадкорӣ набуд. Ман якчанд фармонҳоро ворид кардам ва... гурӯҳи амниятӣ (дар баробари трафики воридотӣ) нопадид шуд.

Терраформ бузург

Барқароршавӣ аз ҳолати нопурра

Баъзан CloudFormation аз як ҳолат ба ҳолати дигар комилан гузашта наметавонад. Дар баробари ин, ӯ кӯшиш мекунад, ки ба пештара баргардад. Афсӯс, ки ин на ҳамеша имконпазир аст. Бартараф кардани он чизе, ки баъдтар рух дод, метавонад хеле даҳшатнок бошад - шумо ҳеҷ гоҳ намедонед, ки CloudFormation аз ҳакер шудани он хурсанд хоҳад шуд - ҳатто барои ислоҳи он. Новобаста аз он ки ба ҳолати қаблӣ баргаштан мумкин аст ё не, ӯ воқеан намедонад, ки чӣ гуна муайян кунад ва ба таври нобаёнӣ соатҳо дар интизори мӯъҷиза овезон мешавад.

Terraform, аз тарафи дигар, майл дорад, ки аз гузариши ноком ба таври зеботар барқарор шавад ва абзорҳои пешрафтаи ислоҳро пешниҳод мекунад.

Тағирот дар ҳолати ҳуҷҷат равшантар аст

«Хуб, мувозинаткунандаи бор, шумо иваз мекунед. Аммо чи тавр?"

—инженери серташвиш, ба пахш кардани тугмаи «кабул кардан» тайёр.

Баъзан ба ман лозим меояд, ки бо тавозуни сарборӣ дар стек CloudFormation баъзе корҳоро анҷом диҳам, ба монанди илова кардани рақами порт ё тағир додани гурӯҳи амният. ClouFormation тағиротро суст нишон медиҳад. Ман дар пинҳо ва сӯзанҳо, файли yaml-ро даҳ маротиба дубора тафтиш мекунам, то боварӣ ҳосил кунам, ки ман ҳеҷ чизи заруриро тоза накардаам ва ҳеҷ чизи нолозимро илова накардаам.

Terraform дар ин бобат хеле шаффофтар аст. Баъзан ӯ ҳатто аз ҳад шаффоф аст (хонед: дилгиркунанда). Хушбахтона, версияи охирин намоиши такмилёфтаи тағиротро дар бар мегирад, то ки шумо ҳоло бубинед, ки чӣ тағир меёбад.

Интихоби

Нармафзорро ба қафо нависед.

Агар руирост гуем, мухимтарин хусусияти нармафзори дарозмуддат ин қобилияти мутобиқ шудан ба тағирот мебошад. Ҳама гуна нармафзорро ба қафо нависед. Аксар вақт ман бо истифода аз хидмати "оддӣ" хато мекардам ва сипас ҳама чизро ба як стек CloudFormation ё Terraform ворид карданро сар кардам. Ва албатта, пас аз моҳҳо маълум шуд, ки ман ҳама чизро нодуруст фаҳмидам ва хидмат воқеан оддӣ нест! Ва ҳоло ба ман лозим аст, ки як стек калонро ба ҷузъҳои хурд тақсим кунам. Вақте ки шумо бо CloudFormation кор мекунед, ин корро танҳо тавассути барқарор кардани стеки мавҷуда кардан мумкин аст ва ман ин корро бо пойгоҳи додаҳои худ намекунам. Terraform, аз тарафи дигар, имкон дод, ки стекро тақсим карда, ба қисмҳои хурдтари фаҳмотар тақсим карда шавад.

Модулҳо дар git

Мубодилаи рамзи Terraform дар якчанд стекҳо нисбат ба мубодилаи рамзи CloudFormation хеле осонтар аст. Бо Terraform, шумо метавонед рамзи худро дар анбори git ҷойгир кунед ва ба он бо истифода аз назорати версияи семантикӣ дастрасӣ пайдо кунед. Ҳар касе, ки ба ин анбор дастрасӣ дорад, метавонад рамзи муштаракро дубора истифода барад. Эквиваленти CloudFormation S3 аст, аммо он манфиатҳои якхела надорад ва ҳеҷ сабабе нест, ки мо набояд аз git ба манфиати S3 тамоман даст кашем.

Ташкилот афзоиш ёфт ва қобилияти мубодилаи стекҳои умумӣ ба сатҳи муҳим расид. Terraform ин ҳамаро осон ва табиӣ мекунад, дар ҳоле ки CloudFormation шуморо водор мекунад, ки пеш аз он ки шумо ба ин кор чизе ба даст оред, аз ҳалқаҳо ҷаҳида шавед.

Амалиёт ҳамчун код

"Биёед онро скрипт кунем ва хуб."

—инженер 3 сол пеш аз ихтироъ кардани велосипеди «Терраформ».

Вақте ки сухан дар бораи таҳияи нармафзор меравад, Go ё барномаи Java танҳо рамз нест.

Гузариш аз Terraform ба CloudFormation - ва пушаймон шуд
Рамз ҳамчун Кодекс

Инчунин инфрасохторе мавҷуд аст, ки дар он кор мекунад.

Гузариш аз Terraform ба CloudFormation - ва пушаймон шуд
Инфраструктура ҳамчун кодекс

Аммо вай аз куҷост? Онро чӣ гуна бояд назорат кард? Рамзи шумо дар куҷо зиндагӣ мекунад? Оё таҳиягарон ба иҷозати дастрасӣ ниёз доранд?

Гузариш аз Terraform ба CloudFormation - ва пушаймон шуд
Амалиёт ҳамчун Кодекс

Таҳиягари нармафзор будан танҳо маънои навиштани кодро надорад.

AWS ягона нест: шумо эҳтимолан провайдерҳои дигарро истифода мебаред. SignalFx, PagerDuty ё Github. Шояд шумо сервери дохилии Ҷенкинс барои CI/CD ё панели дохилии Grafana барои назорат дошта бошед. Infra as Code бо сабабҳои гуногун интихоб карда мешавад ва ҳар яке барои ҳама чизҳои марбут ба нармафзор яксон муҳим аст.

Вақте ки ман дар Twitch кор мекардам, мо хидматҳоро дар дохили системаҳои омехтаи дарунсохташуда ва AWS-и Amazon суръат додем. Мо бисёр хидматҳои хурдро қатъ ва дастгирӣ кардем, ки хароҷоти амалиётиро афзоиш дод. Муҳокимаҳо чунин сурат гирифтанд:

  • Я: Бало, ин имову ишораҳои зиёде барои overclock кардани як хидматрасонии хурд аст. Ман бояд ин ахлотро барои сохтани ҳисоби AWS истифода барам (мо ба 2 ҳисоб рафтем microservice), он гоҳ ин барои насб кардани огоҳиҳо, ин барои анбори рамз ва ин барои рӯйхати почтаи электронӣ ва он гоҳ ин...
  • Сурб: Биёед онро скрипт кунем ва хуб.
  • Я: Хуб, аммо худи скрипт дигар мешавад. Ба мо роҳе лозим аст, ки тафтиш кунем, ки ҳамаи ин гизмосҳои дарунсохтаи Амазонка навсозӣ шудаанд.
  • Сурб: Садояш хуб. Ва мо барои ин скрипт менависем.
  • Я: Аҷоиб! Ва эҳтимолан скрипт бояд параметрҳоро муқаррар кунад. Оё ӯ онҳоро қабул мекунад?
  • Сурб: Бигзор вай ба куҷое ки меравад, барад!
  • Я: Раванд метавонад тағир ёбад ва мутобиқат ба ақиб гум мешавад. Як навъ назорати версияи семантикӣ талаб карда мешавад.
  • Сурб: Идеяи олӣ!
  • Я: Асбобҳоро дар дохили интерфейси корбар дастӣ иваз кардан мумкин аст. Ба мо роҳе лозим аст, ки инро тафтиш ва ислоҳ кунем.

… 3 сол баъд:

  • Сурб: Ва мо терраформ гирифтем.

Ахлоқи ин ҳикоя чунин аст: ҳатто агар шумо сар бар пошнаи дар ҳама чиз Amazon, шумо то ҳол чизеро истифода намебаред, ки аз AWS нест ва ин хидматҳо ҳолате доранд, ки забони конфигуратсияро барои ҳамоҳангсозӣ нигоҳ доштани он истифода мебарад.

CloudFormation lambda против модулҳои git terraform

lambda ҳалли CloudFormation ба масъалаи мантиқи фармоишӣ мебошад. Бо ламбда шумо метавонед макросҳо эҷод кунед ё манбаи корбар. Ин равиш мураккабиҳои иловагиро ҷорӣ мекунад, ки дар версияи семантикии модулҳои git Terraform вуҷуд надоранд. Барои ман, мушкилоти мубрамтарин идоракунии иҷозатҳо барои ҳамаи ин ламбдаҳои корбар буд (ва ин даҳҳо ҳисобҳои AWS мебошанд). Масъалаи дигари муҳим ин масъалаи «чӣ аввал омад, мурғ ё тухм?» буд: он бо рамзи лямбда алоқаманд буд. Худи ин функсия инфрасохтор ва рамз аст ва худи он ба мониторинг ва навсозӣ ниёз дорад. Нохун ниҳоӣ дар тобут душворӣ дар навсозии семантикии тағироти рамзи ламбда буд; мо инчунин бояд боварӣ ҳосил кунем, ки амалҳои стек бидуни фармони мустақим дар байни иҷроҳо тағир наёбанд.

Дар ёд дорам, ки боре ман мехостам барои муҳити Elastic Beanstalk ҷойгиркунии канарейро бо мувозинати классикии сарборӣ созам. Осонтарин кор ин аст, ки ҷойгиркунии дуюм барои EB дар паҳлӯи муҳити истеҳсолӣ ва як қадами дигар гузошта шавад: якҷоя кардани гурӯҳи густариши худкори канарӣ бо ҷойгиркунии LB дар муҳити истеҳсолӣ. Ва азбаски Terraform истифода мебарад ASG beantalk ҳамчун хулоса, барои ин дар Terraform 4 хати иловагии код талаб карда мешавад. Вақте ки ман пурсидам, ки оё дар CloudFormation ҳалли муқоисашаванда вуҷуд дорад, онҳо маро ба як анбори гит бо лӯлаи ҷойгиркунӣ ва ҳама чиз ишора карданд, ки ҳама ба хотири коре, ки 4 сатри камбизоати коди Terraform карда метавонад.

Он дрейфро беҳтар муайян мекунад

Боварӣ ҳосил кунед, ки воқеият ба интизориҳо мувофиқат мекунад.

Муайян кардани дрейф амалиёти хеле пурқувват ҳамчун хусусияти рамз аст, зеро он кӯмак мекунад, ки воқеият ба интизориҳо мувофиқат кунад. Он ҳам бо CloudFormation ва ҳам Terraform дастрас аст. Аммо бо афзоиши стэки истеҳсолӣ, ҷустуҷӯи дрейф дар CloudFormation бештар ва бештар ошкор кардани бардурӯғро ба вуҷуд овард.

Бо Terraform шумо қалмоқҳои пешрафтаи давраи ҳаёт барои муайян кардани дрейф доред. Масалан, шумо фармонро ворид мекунед тағиротро нодида гиред бевосита дар таърифи вазифаи ECS, агар шумо хоҳед, ки тағиротро ба таърифи мушаххаси вазифа бе нодида гирифтани тағирот дар тамоми густариши ECS-и худ сарфи назар кунед.

CDK ва ояндаи CloudFormation

Идоракунии CloudFormation дар миқёси калон ва байни инфрасохтор душвор аст. Бисёре аз ин мушкилот эътироф карда мешаванд ва асбоб ба чизҳое ниёз дорад aws-cdk, чаҳорчӯба барои муайян кардани инфрасохтори абрӣ дар код ва идора кардани он тавассути AWS CloudFormation. Бубинед, ки оянда барои aws-cdk чӣ интизор аст, ҷолиб хоҳад буд, аммо дар рақобат бо дигар ҷиҳатҳои тавонои Terraform душвор хоҳад буд; барои то ба имрӯз овардани CloudFormation, тағироти глобалӣ талаб карда мешавад.

Барои он ки Terraform ноумед нашавад

Ин "инфрасохтор ҳамчун код" аст, на "ҳамчун матн".

Таассуроти аввалини ман дар бораи Terraform хеле бад буд. Ман фикр мекунам, ки ман танҳо равишро нафаҳмидам. Қариб ҳамаи муҳандисон онро беихтиёр ҳамчун формати матнӣ қабул мекунанд, ки бояд ба инфрасохтори дилхоҳ табдил дода шавад. ИНРО ИНРО НАКУНЕД.

Ҳақиқатҳои таҳияи нармафзори хуб ба Terraform низ дахл доранд.

Ман дидам, ки таҷрибаҳои зиёде барои эҷоди коди хуб дар Terraform нодида гирифта шудаанд. Шумо солҳо таҳсил кардаед, то барномасози хуб шавед. Танҳо аз сабаби он ки шумо бо Terraform кор мекунед, аз ин таҷриба даст накашед. Ҳақиқатҳои таҳияи нармафзори хуб ба Terraform дахл доранд.

Чӣ тавр кодро ҳуҷҷатгузорӣ кардан мумкин нест?

Ман стекҳои бузурги Terraform-ро дидаам, ки комилан ҳеҷ ҳуҷҷате надоранд. Чӣ тавр шумо метавонед кодро дар саҳифаҳо нависед - бидуни ҳуҷҷатҳо? Илова кардани ҳуҷҷатҳое, ки шуморо шарҳ медиҳанд код Terraform (таъкид ба калимаи "код"), чаро ин бахш ин қадар муҳим аст ва шумо чӣ кор мекунед.

Чӣ тавр мо метавонем хидматҳоеро истифода барем, ки як вақтҳо як вазифаи бузурги асосӣ () буданд?

Ман стекҳои хеле мураккаби Terraform-ро дидаам, ки ҳамчун модули ягона пешниҳод карда шудаанд. Чаро мо нармафзорро ин тавр ҷойгир намекунем? Чаро мо вазифаҳои калонро ба вазифаҳои хурдтар тақсим мекунем? Ҳамин ҷавобҳо ба Terraform дахл доранд. Агар модули шумо хеле калон бошад, шумо бояд онро ба модулҳои хурдтар тақсим кунед.

Оё ширкати шумо аз китобхонаҳо истифода намебарад?

Ман дидам, ки чӣ гуна муҳандисон бо истифода аз Terraform як лоиҳаи навро месозанд, беақлона порчаҳои азими лоиҳаҳои дигарро ба лоиҳаҳои худ нусхабардорӣ мекунанд ва сипас бо онҳо то оғози кор кор мекарданд. Оё шумо дар ширкати худ бо рамзи "мубориза" чунин кор мекунед? Мо на танхо аз китобхонахо истифода мебарем. Ҳа, на ҳама чиз бояд китобхона бошад, вале принципан бе китобхонахои муштарак кучоем?!

Оё шумо PEP8 ё gofmt-ро истифода намебаред?

Аксари забонҳо нақшаи форматкунии стандартии қабулшуда доранд. Дар Python ин PEP8 аст. Дар Go - gofmt. Terraform худ дорад: terraform fmt. Барои саломатии худ лаззат баред!

Оё шумо бе донистани JavaScript React-ро истифода мебаред?

Модулҳои Terraform метавонанд як қисми инфрасохтори мураккаберо, ки шумо эҷод мекунед, содда кунанд, аммо ин маънои онро надорад, ки шумо бо он тамоман кор карда наметавонед. Мехоҳед Terraform-ро бидуни фаҳмидани захираҳо дуруст истифода баред? Шумо маҳкум шудаед: вақт мегузарад ва шумо ҳеҷ гоҳ Терраформро азхуд карда наметавонед.

Оё шумо бо синглтонҳо ё тазриқи вобастагӣ рамзгузорӣ мекунед?

Тазриқи вобастагӣ як таҷрибаи беҳтарини таҳияи нармафзор аст ва нисбат ба синглтонҳо бартарӣ дорад. Ин дар Terraform чӣ гуна муфид аст? Ман модулҳои Terraform-ро дидаам, ки аз ҳолати дурдаст вобастаанд. Ба ҷои навиштани модулҳое, ки ҳолати дурдастро мегиранд, модулеро нависед, ки параметрҳоро мегирад. Ва он гоҳ ин параметрҳоро ба модул гузаронед.

Оё китобхонаҳои шумо даҳ корро хуб иҷро мекунанд ё як чизи олӣ?

Китобхонаҳое, ки беҳтарин кор мекунанд, онҳое мебошанд, ки ба як вазифа диққат медиҳанд, ки онҳо хеле хуб иҷро мекунанд. Ба ҷои навиштани модулҳои бузурги Terraform, ки кӯшиш мекунанд, ки ҳама чизро якбора иҷро кунанд, қисмҳои онҳоро созед, ки як корро хуб иҷро мекунанд. Ва он гоҳ онҳоро мувофиқи зарурат якҷоя кунед.

Чӣ тавр шумо ба китобхонаҳо бидуни мутобиқати ақиб тағйирот ворид мекунед?

Модули маъмули Terraform, ба монанди китобхонаи муқаррарӣ, бояд ба таври возеҳ тағиротро ба корбарон бидуни ба ақиб мувофиқат расонад. Вақте ки ин тағиротҳо дар китобхонаҳо ба амал меоянд, асабовар аст ва вақте ки дар модулҳои Terraform тағиротҳои ба ақиб номувофиқ ворид карда мешаванд, хашмгин аст. Ҳангоми истифодаи модулҳои Terraform тавсия дода мешавад, ки тегҳои git ва semver истифода шаванд.

Оё хидмати истеҳсолии шумо дар ноутбуки шумо ё дар маркази додаҳо кор мекунад?

Hashicorp дорои асбобҳое монанди абри терраформ барои идора кардани терраформаи худ. Ин хидматҳои мутамарказ идора, аудит ва тасдиқи тағйироти терраформиро осон мекунанд.

Оё шумо тестҳо наменависед?

Муҳандисон эътироф мекунанд, ки рамз бояд санҷида шавад, аммо худи онҳо аксар вақт ҳангоми кор бо Terraform санҷишро фаромӯш мекунанд. Барои инфрасохтор, ин бо лаҳзаҳои хиёнатовар аст. Маслиҳати ман ин аст, ки стекҳоро бо истифода аз модулҳое, ки метавонанд барои санҷиш дар CI/CD дуруст ҷойгир карда шаванд, "озмоиш" ё "эҷоди намуна".

Терраформ ва микросервисҳо

Ҳаёт ва марги ширкатҳои хидматрасонии микросервис аз суръат, навоварӣ ва халалдоршавии блокҳои нави микросервис вобаста аст.

Ҷанбаи маъмултарини манфии марбут ба меъмории микросервис, ки онро бартараф кардан ғайриимкон аст, ба кор марбут аст, на код. Агар шумо Terraform-ро танҳо як роҳи автоматикунонии танҳо паҳлӯи инфрасохтори меъмории микросервисҳо фикр кунед, пас шумо манфиатҳои воқеии системаро аз даст медиҳед. Ҳоло аллакай ҳама чиз мисли код аст.

Манбаъ: will.com

Илова Эзоҳ