Терраформ Модулес

Terraform Modules



У свету пружања инфраструктуре и управљања, Терраформ се појавио као популаран избор међу програмерима и оперативним тимовима. Са својом декларативном синтаксом (ХЦЛ – ХасхиЦорп Цонфигуратион Лангуаге) и подршком за различите провајдере инфраструктуре, Терраформ омогућава праксе инфраструктуре као кода (ИаЦ).

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







Увод у Терраформ модуле

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



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



Организација модула

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





Роот Модуле



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

Основни модул обично садржи “маин.тф” датотеку у којој дефинишемо ресурсе и конфигурације које чине основу наше инфраструктуре. Опционо, можемо имати датотеке „вариаблес.тф” и „оутпутс.тф”. Такође, можемо дефинисати наш директоријум „модули“ унутар основног директоријума да бисмо лако приступили подређеним модулима.

Цхилд Модулес

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

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

Сада, да видимо како можемо да креирамо Терраформ модул.

Креирање Терраформ модула

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

Узмимо једноставан пример једноставног модула за обезбеђивање локалног веб сервера помоћу Доцкер-а. Прво, дефинишемо модул у директоријуму “модулес” као “маин.тф”.

ресурс 'доцкер_цонтаинер' 'веб сервер' {
име  = име вар
слика = вар.имаге
луке {
интерни = вар.интерни_порт
екстерни = вар.екстерни_порт
}
}

Овде креирамо модул под називом „доцкер_цонтаинер“ који узима име контејнера, Доцкер слику, интерни порт и екстерни порт као улазне варијабле. Модул инкапсулира логику за креирање ресурса Доцкер контејнера и омогућава позиваоцу да прилагоди својства контејнера.

Као што је приказано на следећој слици, креирамо засебну датотеку под називом „вариаблес.тф“ у директоријуму „модулес“ да бисмо дефинисали улазне варијабле које се могу прилагодити када користите модул:

променљива 'име' {
опис = „Назив Доцкер контејнера“
тип = стринг
}

променљива 'слика' {
опис = „Доцкер слика“
тип = стринг
}

променљива 'интерни_порт' {
опис = „Интерни порт на Доцкер контејнеру“
тип = број
}

променљива 'ектернал_порт' {
опис = „Спољни порт за мапирање“
тип = број
}

Овде смо декларисали четири променљиве, од којих свака има „опис“ и „тип“ као атрибуте и релевантне вредности за њих.

Коришћење модула Терраформ

Пошто смо креирали наш модул, сада можемо да га користимо у нашој главној конфигурацији Терраформ позивајући се на његов извор. Хајде да направимо нашу главну конфигурациону датотеку која је „маин.тф“ у основном директоријуму.

модул 'вебсервер_цонтаинер' {
извор = '../модулес/доцкер_цонтаинер'
име            = 'мој веб сервер'
слика           = 'нгинк: најновији'
интерни_порт   = 80
спољни_порт   = 8080
}

Користимо блок „модул“ у претходном коду за инстанцирање Доцкер контејнерског модула. Обезбеђујемо неопходне улазне вредности за модул као што су назив контејнера, Доцкер слика и конфигурација порта. Параметар „извор“ наводи релативну путању до директоријума „модула“.

Затим, да видимо како да користимо излазе Терраформ за коришћење са модулима.

Излази модула

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

излаз 'цонтаинер_ид' {
опис = „ИД креираног Доцкер контејнера“
вредност       = доцкер_цонтаинер.вебсервер.ид
}

Овде смо креирали датотеку „оутпутс.тф“ унутар директоријума „модулес“. Ова излазна променљива открива ИД Доцкер контејнера који је креиран од стране „доцкер_цонтаинер“ ресурса под називом „вебсервер“ у оквиру модула.

Сада можемо приступити ИД-у контејнера у нашој основној конфигурационој датотеци. Погледајте следећи ажурирани код датотеке „маин.тф“ у основном директоријуму:

модул 'вебсервер_цонтаинер' {
извор = '../модулес/доцкер_цонтаинер'
име            = 'мој веб сервер'
слика           = 'нгинк: најновији'
интерни_порт   = 80
спољни_порт   = 8080
}

ресурс 'доцкер_волуме' 'подаци' {
# Остатак аргумената иде овде
везати = модуле.вебсервер_цонтаинер.цонтаинер_ид
}

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

Најбоље праксе за Терраформ модуле

Модуларизирајте за поновну употребу

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

Јасно и доследно именовање

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

Изолујте зависности

Морамо избегавати чврсто спајање између модула. Сваки модул треба да садржи сопствене ресурсе и зависности. Ово осигурава да се модули могу поново користити независно и промовише бољу изолацију и инкапсулацију.

Контрола верзија и Регистар модула

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

Закључак

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