Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Многи људи познају и користе Терраформ у свом свакодневном раду, али најбоље праксе за то још нису формиране. Сваки тим мора да измисли сопствене приступе и методе.

Ваша инфраструктура готово сигурно почиње једноставно: неколико ресурса + неколико програмера. Временом расте у свим правцима. Да ли проналазите начине да групишете ресурсе у Терраформ модуле, организујете код у фасцикле и шта још може поћи по злу? (познате последње речи)

Време пролази и осећате се као да је ваша инфраструктура ваш нови љубимац, али зашто? Забринути сте због необјашњивих промена у инфраструктури, плашите се да додирнете инфраструктуру и код - као резултат тога, одлажете нову функционалност или смањујете квалитет...

Након три године управљања колекцијом модула Терраформ заједнице за АВС на Гитхубу и дуготрајног одржавања Терраформа у продукцији, Антон Бабенко је спреман да подели своје искуство: како написати ТФ модуле тако да то не штети у будућности.

До краја говора, учесници ће бити ближе упознати са принципима управљања ресурсима у Терраформу, најбољим праксама повезаним са модулима у Терраформу, и неким принципима континуиране интеграције повезаним са управљањем инфраструктуром.

odricanje: Напомињем да је овај извештај датиран у новембру 2018 — већ су прошле 2 године. Верзија Терраформа 0.11 о којој се говори у извештају више није подржана. У протекле 2 године објављена су 2 нова издања која садрже много иновација, побољшања и промена. Обратите пажњу на ово и проверите документацију.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Референце:

Моје име је Антон Бабенко. Неки од вас су вероватно користили код који сам написао. Сада ћу о томе говорити са више самопоуздања него икада, јер имам приступ статистици.

Радим на Терраформу и био сам активан учесник и сарадник великог броја пројеката отвореног кода који се односе на Терраформ и Амазон од 2015. године.

Од тада сам написао довољно кода да га поставим на занимљив начин. И сада ћу покушати да вам кажем о овоме.

Говорићу о замршеностима и специфичностима рада са Терраформом. Али то заправо није тема ХигхЛоад-а. А сада ћете разумети зашто.

Временом сам почео да пишем Терраформ модуле. Корисници су писали питања, ја сам их преписао. Затим сам написао разне услужне програме за форматирање кода помоћу куке за урезивање, итд.

Било је много занимљивих пројеката. Волим генерисање кода јер волим да рачунар ради све више посла за мене и програмера, тако да тренутно радим на Терраформ генератору кода из визуелних дијаграма. Можда су их неки од вас видели. Ово су прелепе кутије са стрелицама. И мислим да је сјајно ако можете да кликнете на дугме „Извези“ и добијете све као код.

Ја сам из Украјине. Живим у Норвешкој много година.

Такође, информације за овај извештај су прикупљене од људи који знају моје име и налазе ме на друштвеним мрежама. Скоро увек имам исти надимак.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

https://github.com/terraform-aws-modules
https://registry.terraform.io/namespaces/terraform-aws-modules

Као што сам поменуо, ја сам главни одржавалац Терраформ АВС модула, који је једно од највећих складишта на ГитХуб-у где хостујемо модуле за најчешће задатке: ВПЦ, Аутосцалинг, РДС.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

А оно што сте сада чули је најосновније. Ако сумњате да разумете шта је Терраформ, онда је боље да своје време проведете негде другде. Овде ће бити много техничких термина. И нисам оклевао да прогласим ниво извештаја за највиши. То значи да могу да причам користећи све могуће термине без много објашњења.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Терраформ се појавио 2014. године као услужни програм који вам је омогућио да пишете, планирате и управљате инфраструктуром као кодом. Кључни концепт овде је „инфраструктура као код“.

Сва документација, као што сам рекао, је уписана терраформ.ио. Надам се да већина људи зна за овај сајт и да је прочитала документацију. Ако јесте, онда сте на правом месту.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Овако изгледа обична Терраформ конфигурациона датотека, где прво дефинишемо неке променљиве.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

У овом случају дефинишемо "авс_регион".

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Затим описујемо које ресурсе желимо да створимо.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Покрећемо неке команде, посебно „терраформ инит“ да бисмо учитали зависности и добављаче.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

И покрећемо команду „терраформ аппли“ да бисмо проверили да ли наведена конфигурација одговара ресурсима које смо креирали. Пошто раније нисмо ништа креирали, Терраформ нас подстиче да креирамо ове ресурсе.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Ово потврђујемо. Тако стварамо канту звану морски пуж.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Такође постоји неколико сличних услужних програма. Многи од вас који користе Амазон знају АВС ЦлоудФорматион или Гоогле Цлоуд Деплоимент Манагер или Азуре Ресоурце Манагер. Сваки од њих има своју имплементацију неке врсте за управљање ресурсима у оквиру сваког од ових провајдера јавног облака. Терраформ је посебно користан јер вам омогућава да управљате са преко 100 провајдера. (Детаљније овде)

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Циљеви којима је Терраформ тежио од самог почетка:

  • Терраформ пружа јединствен поглед на ресурсе.
  • Омогућава вам да подржите све модерне платформе.
  • А Терраформ је дизајниран од самог почетка као услужни програм који вам омогућава да промените инфраструктуру безбедно и предвидљиво.

У 2014. реч „предвидљив” звучала је веома необично у овом контексту.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Терраформ је универзални алат. Ако имате АПИ, онда можете контролисати апсолутно све:

  • Можете користити више од 120 провајдера да бисте управљали свиме што желите.
  • На пример, можете користити Терраформ да опишете приступ ГитХуб репозиторијумима.
  • Можете чак да креирате и затворите грешке у Јира.
  • Можете управљати метрикама Нев Релиц.
  • Можете чак и да креирате датотеке у дропбок-у ако то заиста желите.

Све ово се постиже коришћењем Терраформ провајдера, који имају отворени АПИ који се може описати у Го.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Рецимо да смо почели да користимо Терраформ, прочитали документацију на сајту, погледали неки видео и почели да пишемо маин.тф, као што сам показао на претходним слајдовима.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

И све је супер, имате фајл који креира ВПЦ.

Ако желите да креирате ВПЦ, онда наведете отприлике ових 12 линија. Опишите у ком региону желите да креирате, који цидр_блоцк ИП адреса да користите. То је све.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Наравно, пројекат ће постепено расти.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

И тамо ћете додати гомилу нових ствари: ресурсе, изворе података, интегрисаћете се са новим провајдерима, одједном ћете желети да користите Терраформ за управљање корисницима на свом ГитХуб налогу, итд. Можда ћете желети да користите различите ДНС провајдери, прекрижите све. Терраформ ово олакшава.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Погледајмо следећи пример.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Постепено додајете интернет_гатеваи јер желите да ресурси из вашег ВПЦ-а имају приступ интернету. Ово је добра идеја.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Резултат је овај маин.тф:

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Ово је горњи део маин.тф.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Ово је доњи део маин.тф.

Затим додајете подмрежу. Док будете желели да додате НАТ мрежне пролазе, руте, табеле рутирања и гомилу других подмрежа, нећете имати 38 линија, већ отприлике 200-300 линија.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

То јест, ваша маин.тф датотека постепено расте. И прилично често људи стављају све у једну датотеку. 10-20 Кб се појављује у маин.тф. Замислите да је 10-20 Кб текстуални садржај. И све је повезано са свиме. Са овим постепено постаје тешко радити. 10-20 Кб је добар кориснички случај, понекад и више. И људи не мисле увек да је то лоше.

Као иу редовном програмирању, односно не инфраструктури као коду, навикли смо да користимо гомилу различитих класа, пакета, модула, група. Терраформ вам омогућава да радите скоро исту ствар.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

  • Шифра расте.
  • Зависности између ресурса такође расту.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

И имамо велику, велику потребу. Разумемо да не можемо више овако да живимо. Наш код постаје огроман. 10-20 Кб, наравно, није много, али говоримо само о мрежном стеку, односно додали сте само мрежне ресурсе. Не говоримо о апликацији за балансирање оптерећења, ЕС кластеру за примену, Кубернетес-у, итд., где се 100 Кб лако може уткати. Ако све ово запишете, врло брзо ћете сазнати да Терраформ нуди Терраформ модуле.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Терраформ модули су самостална Терраформ конфигурација којом се управља као група. То је све што треба да знате о Терраформ модулима. Они уопште нису паметни, не дозвољавају вам да правите било какве сложене везе у зависности од нечега. Све ово пада на рамена програмера. То јест, ово је само нека врста Терраформ конфигурације коју сте већ написали. И можете га једноставно назвати као група.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Дакле, покушавамо да схватимо како ћемо оптимизовати наших 10-20-30 Кб кода. Постепено схватамо да треба да користимо неке модуле.

Први тип модула са којим се сусрећете су модули ресурса. Не разумеју шта је ваша инфраструктура, чиме се бавите, где и какви су услови. То су управо они модули које ја, заједно са заједницом отвореног кода, администрирам и које смо поставили као почетне блокове за вашу инфраструктуру.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Пример модула ресурса.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Када позивамо модул ресурса, наводимо са које путање треба да учитамо његов садржај.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Означавамо коју верзију желимо да преузмемо.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Ту преносимо гомилу аргумената. То је све. То је све што треба да знамо када користимо овај модул.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Многи људи мисле да ће све бити стабилно ако користе најновију верзију. Али не. Инфраструктура мора бити верзионирана; морамо јасно одговорити на коју верзију је ова или она компонента распоређена.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Ево кода који се налази унутар овог модула. Модул безбедносне групе. Овде свитак иде до 640. реда. Стварање ресурса безбедносних група у Амазону у свакој могућој конфигурацији је веома нетривијалан задатак. Није довољно једноставно креирати безбедносну групу и рећи јој која правила да јој проследи. Било би врло једноставно. У Амазону постоји милион различитих ограничења. На пример, ако користите ВПЦ крајња тачка, листа префикса, разни АПИ-ји и покушава да комбинује све ово са свим осталим, онда вам Терраформ то не дозвољава. А Амазон АПИ ни ово не дозвољава. Стога, сву ову страшну логику морамо сакрити у модулу и дати кориснички код који изгледа баш овако.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Корисник не мора да зна како је направљен унутра.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Други тип модула, који се састоји од модула ресурса, већ решава проблеме који су више применљиви на ваше пословање. Често је ово место које је проширење за Терраформ и поставља неке ригидне вредности за ознаке, за стандарде компаније. Такође можете додати функционалност тамо коју Терраформ тренутно не дозвољава да користите. Ово је управо сада. Сада верзија 0.11, која ће ускоро постати ствар прошлости. Али ипак, претпроцесори, јсоннет, колачић и гомила других ствари су помоћни механизам који се мора користити за пуноправан рад.

Следеће ћу показати неке примере овога.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Инфраструктурни модул се позива на потпуно исти начин.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Наведен је извор одакле се садржај преузима.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Гомила вредности се прослеђује и прослеђује у овај модул.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Затим, унутар овог модула, гомила модула ресурса се позива да креира ВПЦ или Апплицатион Лоад Баланцер, или да креира безбедносну групу или за кластер услуге еластичног контејнера.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Постоје две врсте модула. Ово је важно разумети јер већина информација које сам груписао у овом извештају није записана у документацији.

А документација у Терраформу је тренутно прилично проблематична јер само каже да постоје ове функције, можете их користити. Али она не каже како да користите ове функције, зашто је боље да их користите. Дакле, веома велики број људи пише нешто са чиме не може да живи.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Хајде да погледамо како да напишемо ове модуле следеће. Онда ћемо видети како да их позовемо и како да радимо са кодом.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Терраформ регистар - https://registry.terraform.io/

Савет #0 је да не пишете модуле ресурса. Већина ових модула је већ написана за вас. Као што сам рекао, они су отвореног кода, не садрже никакву вашу пословну логику, немају тврдо кодиране вредности за ИП адресе, лозинке итд. Модул је веома флексибилан. И највероватније је већ написано. Постоји много модула за ресурсе из Амазона. Око 650. И већина их је доброг квалитета.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

У овом примеру, неко вам је дошао и рекао: „Желим да могу да управљам базом података. Направите модул да бих могао да направим базу података." Особа не зна детаље имплементације ни Амазона ни Терраформа. Он једноставно каже: "Желим да управљам МССКЛ-ом." То јест, мислимо да ће позвати наш модул, пренети тамо тип мотора и назначити временску зону.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

И човек не треба да зна да ћемо унутар овог модула креирати два различита ресурса: један за МССКЛ, други за све остало, само зато што у Терраформ 0.11 не можете да наведете вредности временске зоне као опционе.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

А на излазу из овог модула, особа ће моћи једноставно да добије адресу. Неће знати из које базе података, из ког ресурса све ово интерно креирамо. Ово је веома важан елемент прикривања. И то се не односи само на оне модуле који су јавни у отвореном коду, већ и на оне модуле које ћете писати унутар својих пројеката и тимова.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Ово је други аргумент, који је прилично важан ако већ неко време користите Терраформ. Имате спремиште у које стављате све своје Терраформ модуле за своју компанију. И сасвим је нормално да ће временом овај пројекат нарасти до величине једног или два мегабајта. Ово је добро.

Али проблем је како Терраформ назива ове модуле. На пример, ако позовете модул да бисте креирали сваког појединачног корисника, Терраформ ће прво учитати цело спремиште, а затим ће се кретати до фасцикле у којој се налази тај одређени модул. На овај начин ћете сваки пут преузети један мегабајт. Ако управљате са 100 или 200 корисника, онда ћете преузети 100 или 200 мегабајта, а затим ићи у тај фолдер. Дакле, наравно, не желите да преузимате гомилу ствари сваки пут када притиснете „Терраформ инит“.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

https://github.com/mbtproject/mbt

Постоје два решења за овај проблем. Први је да користите релативне путање. На овај начин у коду означавате да је фасцикла локална (./). И пре него што било шта покренете, урадите Гит клон овог спремишта локално. Овако то урадите једном.

Има, наравно, много недостатака. На пример, не можете да користите верзију. А са овим је понекад тешко живети.

Друго решење. Ако имате пуно подмодула и већ имате неку врсту успостављеног цевовода, онда постоји МБТ пројекат, који вам омогућава да прикупите много различитих пакета из монорепозиторија и да их отпремите на С3. Ово је веома добар начин. Дакле, датотека иам-усер-1.0.0.зип ће тежити само 1 Кб, јер је код за креирање овог ресурса веома мали. И то ће радити много брже.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Хајде да разговарамо о томе шта се не може користити у модулима.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Зашто је ово зло у модулима? Најгоре је претпоставити корисника. Претпоставимо да је корисник опција аутентификације добављача коју могу користити различити људи. На пример, сви ћемо асимиловати улогу. То значи да ће Терраформ преузети ову улогу. А онда ће са овом улогом извршити друге радње.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

А зло је у томе што ако Васја воли да се повеже са Амазоном на један начин, на пример, користећи подразумевану променљиву окружења, а Петја воли да користи свој заједнички кључ, који има на тајном месту, онда не можете да наведете обоје у Терраформ. И како не би искусили патњу, нема потребе да означавате овај блок у модулу. Ово мора бити назначено на вишем нивоу. То јест, имамо модул ресурса, модул инфраструктуре и композицију на врху. И ово треба назначити негде више.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Друго зло је снабдевач. Овде зло није тако тривијално, јер ако пишете код и ради за вас, онда можете помислити да ако ради, зашто га онда мењати.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Зло је што не контролишете увек када ће се овај провајдер покренути, прво. И друго, ви не контролишете шта значи авс ец2, односно да ли сада говоримо о Линук-у или Виндовс-у. Дакле, не можете написати нешто што ће радити исто на различитим оперативним системима или за различите корисничке случајеве.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Најчешћи пример, који је такође наведен у званичној документацији, је да ако напишете авс_инстанце и наведете гомилу аргумената, онда нема ништа лоше у томе ако тамо наведете добављач „лоцал-екец“ и покренете свој ансибле- плаибоок .

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

У ствари, да, нема ништа лоше у томе. Али буквално ускоро ћете схватити да ова ствар лоцал-екец не постоји, на пример, у лаунцх_цонфигуратион.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

А када користите лаунцх_цонфигуратион и желите да креирате групу за аутоматско скалирање из једне инстанце, онда у лаунцх_цонфигуратион не постоји концепт „провизионера“. Постоји концепт „корисничких података“.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Стога је универзалније решење коришћење корисничких података. И биће покренут или на самој инстанци, када је инстанца укључена, или у истим корисничким подацима, када група за аутоматско скалирање користи ову лаунцх_цонфигуратион.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Ако и даље желите да покренете провајдер, јер је то компонента за лепљење, када се креира један ресурс, у том тренутку треба да покренете свој провајдер, своју команду. Много је таквих ситуација.

А најисправнији ресурс за ово се зове нулл_ресоурце. Нулл_ресоурце је лажни ресурс који се заправо никада не креира. Не додирује ништа, нема АПИ, нема аутоматског скалирања. Али вам омогућава да контролишете када да покренете команду. У овом случају, команда се покреће током креирања.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Линк http://bit.ly/common-traits-in-terraform-modules

Постоји неколико знакова. Нећу детаљно улазити у све знакове. Постоји чланак о томе. Али ако сте радили са Терраформом или сте користили модуле других људи, онда сте често приметили да многе модуле, као и већину кода у отвореном коду, пишу људи за своје потребе. Човек је то написао и решио свој проблем. Ставио сам га у ГитХуб, пусти га да живи. Живеће, али ако тамо нема документације и примера, онда то нико неће користити. А ако не постоји функционалност која вам омогућава да решите нешто више од свог специфичног задатка, онда је ни нико неће користити. Постоји толико много начина да изгубите кориснике.

Ако желите да напишете нешто како би људи то користили, онда препоручујем да пратите ове знакове.

То су:

  • Документација и примери.
  • Пуна функционалност.
  • Разумне подразумеване вредности.
  • Чисти код.
  • Тестови.

Тестови су другачија ситуација јер их је прилично тешко написати. Више верујем у документацију и примере.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Дакле, погледали смо како писати модуле. Постоје два аргумента. Први, који је најважнији, је да не пишете ако можете, јер је гомила људи већ урадила ове задатке пре вас. И друго, ако се ипак одлучите, покушајте да не користите провајдере у модулима и провајдерима.

Ово је сиви део документације. Можда сада мислите: „Нешто није јасно. Нисам убеђен." Али видећемо за шест месеци.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Хајде сада да разговарамо о томе како назвати ове модуле.

Разумемо да наш код расте током времена. Немамо више један фајл, већ имамо 20 фајлова. Сви су у једном фолдеру. Или можда у пет фасцикли. Можда почињемо да их некако рашчлањамо по регионима, по неким компонентама. Онда схватамо да сада имамо неке рудименте синхронизације и оркестрације. Односно, морамо разумети шта треба да урадимо ако смо променили мрежне ресурсе, шта треба да урадимо са остатком наших ресурса, како да изазовемо ове зависности итд.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Постоје две крајности. Прва крајност је све у једном. Имамо један мастер фајл. За сада је ово била званична најбоља пракса на веб страници Терраформ.

Али сада је написано као застарело и уклоњено. Временом је заједница Терраформ схватила да је то далеко од најбоље праксе, јер су људи почели да користе пројекат на различите начине. И постоје проблеми. На пример, када наведемо све зависности на једном месту. Постоје ситуације када кликнемо на „Терраформ план“ и док Терраформ не ажурира стања свих ресурса, може проћи доста времена.

Много времена је, на пример, 5 минута. За неке је ово много времена. Видео сам случајеве где је требало 15 минута. АВС АПИ је провео 15 минута покушавајући да схвати шта се дешава са стањем сваког ресурса. Ово је веома велико подручје.

И, наравно, сродни проблем ће се појавити када желите да промените нешто на једном месту, затим сачекате 15 минута и то вам даје платно неких промена. Пљунуо си, написао „Да“, и нешто је пошло наопако. Ово је врло реалан пример. Терраформ не покушава да вас заштити од проблема. То јест, напишите шта желите. Биће проблема - ваших проблема. Док Терраформ 0.11 не покушава да вам помогне ни на који начин. Постоје одређена занимљива места у 0.12 која вам омогућавају да кажете: „Васја, стварно желиш ово, можеш ли да дођеш себи?“

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Други начин је смањење ове области, односно, позиви са једног места могу бити мање повезани са другог места.

Једини проблем је што је потребно да напишете више кода, односно да опишете променљиве у великом броју фајлова и ажурирате ово. Неки људи то не воле. Ово је нормално за мене. А неки људи мисле: „Зашто ово писати на различитим местима, све ћу ставити на једно место. Ово је могуће, али ово је друга крајност.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Ко има све ово да живи на једном месту? Једна, две, три особе, односно неко га користи.

И ко зове једну одређену компоненту, један блок или један инфраструктурни модул? Пет до седам људи. Ово је супер.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Најчешћи одговор је негде у средини. Ако је пројекат велики, онда ћете често имати ситуацију у којој ниједно решење није погодно и не функционише све тамо, па ћете на крају добити мешавину. У овоме нема ништа лоше, све док разумете да оба имају предности.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Ако се нешто променило у стеку ВПЦ и желели сте да примените ове промене на ЕЦ2, тј. желели сте да ажурирате групу за аутоматско скалирање јер сте имали нову подмрежу, онда ја зовем ову врсту оркестрације зависности. Постоје нека решења: ко шта користи?

Могу да предложим која решења постоје. Можете користити Терраформ да направите магију, или можете користити макефиле да бисте користили Терраформ. И видите да ли се тамо нешто променило, можете то покренути овде.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Како вам се свиђа ова одлука? Да ли неко верује да је ово кул решење? Видим осмех, очигледно су се увукле сумње.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Наравно, не покушавајте ово код куће. Терраформ никада није дизајниран да се покреће са Терраформа.

У једном извештају су ми рекли: „Не, ово неће успети“. Поента је да то не би требало да функционише. Иако изгледа тако импресивно када можете да покренете Терраформ из Терраформа, а затим Терраформ, то не би требало да радите. Терраформ увек треба да почне веома лако.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

https://github.com/gruntwork-io/terragrunt/

Ако вам је потребна оркестрација позива када се нешто променило на једном месту, онда је ту Террагрунт.

Террагрунт је услужни програм, додатак за Терраформ, који вам омогућава да координирате и оркестрирате позиве инфраструктурним модулима.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Типична Терраформ конфигурациона датотека изгледа овако.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Ви одређујете који одређени модул желите да позовете.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Које зависности има модул?

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

И које аргументе прихвата овај модул. То је све што треба да се зна о Террагрунту.

Документација је ту, а на ГитХуб-у има 1 звездица. Али у већини случајева ово је оно што треба да знате. А ово је врло лако имплементирати у компаније које тек почињу да раде са Терраформом.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Дакле, оркестрација је Террагрунт. Постоје и друге опције.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Хајде сада да причамо о томе како да радимо са кодом.

Ако треба да додате нове функције свом коду, у већини случајева то је лако. Пишете нови ресурс, све је једноставно.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Ако имате неки ресурс који сте унапред креирали, на пример, сазнали сте за Терраформ након што сте отворили АВС налог и желите да користите ресурсе које већ имате, онда би било прикладно да проширите свој модул на овај начин, тако да подржава коришћење постојећих ресурса.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

И подржао стварање нових ресурса користећи блок ресурс.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

На излазу увек враћамо ИД излаза у зависности од тога шта је коришћено.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Други веома значајан проблем у Терраформ 0.11 је рад са листама.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Тешкоћа је у томе што ако имамо такву листу корисника.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

А када креирамо ове кориснике користећи блок ресурсе, онда све иде у реду. Пролазимо кроз целу листу, креирајући датотеку за сваку. Све је у реду. И онда, на пример, корисника3, који је у средини, треба уклонити одавде, онда ће сви ресурси који су креирани после њега бити поново креирани јер ће се индекс променити.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Рад са листама у окружењу са стањем. Шта је окружење са стањем државе? Ово је ситуација у којој се ствара нова вредност када се креира овај ресурс. На пример, АВС приступни кључ или АВС тајни кључ, тј. када креирамо корисника, добијамо нови приступни или тајни кључ. И сваки пут када избришемо корисника, овај корисник ће имати нови кључ. Али ово није фенг шуи, јер корисник неће желети да буде пријатељ са нама ако му креирамо новог корисника сваки пут када неко напусти тим.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Ово је решење. Ово је код написан у Јсоннету. Јсоннет је језик шаблона из Гоогле-а.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Ова команда вам омогућава да прихватите овај шаблон и као излаз враћа јсон датотеку која је направљена према вашем шаблону.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Шаблон изгледа овако.

Терраформ вам омогућава да радите и са ХЦЛ-ом и са Јсон-ом на исти начин, тако да ако имате могућност да генеришете Јсон, онда га можете убацити у Терраформ. Датотека са екстензијом .тф.јсон ће бити успешно преузета.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

И онда радимо са њим као и обично: терраформ инит, терраморм аппли. И стварамо два корисника.

Сада се не плашимо ако неко напусти тим. Само ћемо уредити јсон датотеку. Васја Пупкин је отишао, Петја Пјаточкин је остао. Петја Пјаточкин неће добити нови кључ.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Интеграција Терраформа са другим алатима заправо није Терраформов посао. Терраформ је креиран као платформа за креирање ресурса и то је то. А све што се појави касније није Терраформова брига. И нема потребе да га уткате тамо. Постоји Ансибле, који ради све што вам треба.

Али ситуације настају када желимо да проширимо Терраформ и позовемо неку команду након што се нешто заврши.

Први начин. Креирамо излаз где пишемо ову наредбу.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Затим позивамо ову наредбу из излаза терраформа љуске и наводимо вредност коју желимо. Дакле, команда се извршава са свим замењеним вредностима. Веома је удобно.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Други начин. Ово је употреба нулл_ресоурце у зависности од промена у нашој инфраструктури. Исти локални-еке можемо позвати чим се ИД неког ресурса промени.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Наравно, на папиру је све глатко, јер Амазон, као и сви други јавни провајдери, има гомилу својих ивичних случајева.

Најчешћи крајњи случај је да када отворите АВС налог, важно је које регионе користите; да ли је ова функција тамо омогућена; можда сте га отворили после децембра 2013; можда користите подразумевани у ВПЦ итд. Постоје многа ограничења. А Амазон их је расуо по документацији.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Постоји неколико ствари које препоручујем да избегавате.

За почетак, избегавајте све аргументе који нису тајни унутар Терраформ плана или Терраформ ЦЛИ. Све ово се може ставити или у тфварс датотеку или у променљиву окружења.

Али не морате да запамтите целу ову магичну команду. Тераформни план – варање и идемо. Прва променљива је вар, друга променљива је вар, трећа, четврта. Најважнији принцип инфраструктуре као кода који најчешће користим је да само гледајући код треба да имам јасно разумевање шта је ту распоређено, у ком стању и са којим вредностима. И тако не морам да читам документацију или да питам Васју које је параметре користио за креирање нашег кластера. Само треба да отворим датотеку са екстензијом тфварс, која се често поклапа са окружењем, и да погледам све тамо.

Такође, немојте користити циљне аргументе да бисте смањили опсег. За ово је много лакше користити мале инфраструктурне модуле.

Такође, нема потребе за ограничавањем и повећањем паралелизма. Ако имам 150 ресурса и желим да повећам Амазон паралелизам са подразумеваних 10 на 100, онда ће највероватније нешто поћи наопако. Или би сада могло да прође добро, али када Амазон каже да обављате превише позива, бићете у невољи.

Терраформ ће покушати да поново покрене већину ових проблема, али нећете постићи скоро ништа. Паралелизам=1 је важна ствар коју треба користити ако наиђете на неку грешку унутар АВС АПИ-ја или унутар Терраформ провајдера. А онда треба да наведете: паралелизам=1 и сачекајте да Терраформ заврши један позив, затим други, па трећи. Он ће их лансирати једног по једног.

Људи ме често питају: „Зашто мислим да су Терраформ радни простори зли?“ Верујем да је принцип инфраструктуре као кода да се види каква је инфраструктура створена и са којим вредностима.

Радне просторе нису креирали корисници. То не значи да су корисници у ГитХуб проблемима написали да не можемо да живимо без Терраформ радних простора. Не не овако. Терраформ Ентерприсе је комерцијално решење. Терраформ из ХасхиЦорп-а је одлучио да су нам потребни радни простори, па смо га склонили. Много ми је лакше да га ставим у посебан фолдер. Онда ће бити још мало фајлова, али ће бити јасније.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Како радити са кодом? У ствари, рад са листама је једина мука. И узмите Терраформ лакше. Ово није ствар која ће учинити све сјајно за вас. Нема потребе да тамо гурате све што пише у документацији.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Тема извештаја била је написана „за будућност“. Говорићу о овоме врло кратко. За будућност, то значи да ће 0.12 ускоро бити објављен.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

0.12 је тона нових ствари. Ако долазите из редовног програмирања, онда пропуштате све врсте динамичких блокова, петљи, тачних и условних операција поређења, где се лева и десна страна не рачунају истовремено, већ у зависности од ситуације. Много вам недостаје, па ће 0.12 то решити уместо вас.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Али! Ако пишете мање и једноставније, користећи готове модуле и решења независних произвођача, онда нећете морати да чекате и надате се да ће 0.12 доћи и поправити све уместо вас.

Опис инфраструктуре у Терраформу за будућност. Антон Бабенко (2018)

Хвала на извештају! Говорили сте о инфраструктури као коду и буквално рекли једну реч о тестовима. Да ли су тестови потребни у модулима? Чија је ово одговорност? Да ли треба да је напишем сам или је то одговорност модула?

Следећа година ће бити испуњена извештајима да смо одлучили да све тестирамо. Шта тестирати је највеће питање. Постоји много зависности, пуно ограничења од различитих провајдера. Кад ти и ја разговарамо и кажеш: „Требају ми тестови“, онда ја питам: „Шта ћеш тестирати?“ Кажете да ћете тестирати у свом региону. Онда кажем да ово не функционише у мом региону. Односно, нећемо моћи ни да се договоримо око овога. Да не помињем да има много техничких проблема. Односно, како написати ове тестове да буду адекватни.

Активно истражујем ову тему, односно како да аутоматски генеришем тестове на основу инфраструктуре коју сте написали. То јест, ако сте написали овај код, онда морам да га покренем, на основу овога могу да креирам тестове.

Терратест је једна од најчешће помињаних библиотека која вам омогућава да пишете интеграцијске тестове за Терраформ. Ово је један од услужних програма. Више волим ДСЛ тип, на пример, рспец.

Антоне, хвала на извештају! Моје име је Валери. Дозволите ми да поставим мало филозофско питање. Постоји, условно, провизија, постоји распоређивање. Обезбеђивање ствара моју инфраструктуру, у примени ми је попуњавамо нечим корисним, на пример, сервери, апликације итд. И у мојој глави је да је Терраформ више за обезбеђивање, а Ансибле више за примену, јер је Ансибле такође за физичку инфраструктуру омогућава вам да инсталирате нгинк, Постгрес. Али у исто време, чини се да Ансибле дозвољава обезбеђивање, на пример, Амазон или Гоогле ресурса. Али Терраформ вам такође омогућава да примените неки софтвер користећи његове модуле. Са ваше тачке гледишта, постоји ли нека врста границе која пролази између Терраформа и Ансиблеа, где и шта је боље користити? Или, на пример, да ли мислите да је Ансибле већ смеће, требало би да покушате да користите Терраформ за све?

Добро питање, Валери. Верујем да се Терраформ није променио у смислу намене од 2014. године. Створен је за инфраструктуру и умро за инфраструктуру. Још увек смо имали и имаћемо потребу за управљањем конфигурацијом Ансибле. Изазов је што постоје кориснички подаци унутар лаунцх_цонфигуратион. И ту повучете Ансибле, итд. Ово је стандардна разлика која ми се највише свиђа.

Ако говоримо о лепој инфраструктури, онда постоје услужни програми попут Пацкер-а који прикупљају ову слику. А онда Терраформ користи извор података да пронађе ову слику и ажурира њену лаунцх_цонфигуратион. То јест, на овај начин цевовод је да прво повучемо Трацкер, а затим повучемо Терраформ. А ако дође до изградње, онда долази до нове промене.

Здраво! Хвала на извештају! Моје име је Миша, компанија РБС. Можете позвати Ансибле преко добављача услуга када креирате ресурс. Ансибле такође има тему која се зове динамички инвентар. И можете прво позвати Терраформ, а затим позвати Ансибле, који ће узети ресурсе од државе и извршити их. шта је боље?

Људи користе оба са једнаким успехом. Чини ми се да је динамички инвентар у Ансибле-у згодна ствар, ако не говоримо о групи за аутоматско скалирање. Зато што у групи за аутоматско скалирање већ имамо сопствени комплет алата, који се зове лаунцх_цонфигуратион. У лаунцх_цонфигуратион бележимо све што треба да се покрене када креирамо нови ресурс. Према томе, са Амазоном, коришћење динамичког инвентара и читање Терраформ тс датотеке, по мом мишљењу, представља превише. А ако користите друге алате где не постоји концепт „групе за аутоматско скалирање“, на пример, користите ДигиталОцеан или неког другог провајдера где не постоји група за аутоматско скалирање, онда ћете тамо морати ручно да повучете АПИ, пронађете ИП адресе, креирате датотеку динамичког инвентара, а Ансибле ће већ лутати кроз њу. То јест, за Амазон постоји лаунцх_цонфигуратион, а за све остало постоји динамички инвентар.

Извор: ввв.хабр.цом

Додај коментар