terraform. ИСПОЛЬЗОВАНИЕ ВНЕШНИХ ДИНАМИЧЕСКИХ ФАЙЛОВ ПРИ СОЗДАНИИ AWS СЕРВЕРА - TEMPLETFILE

Thank you for reading this post, don't forget to subscribe!

В преды­ду­щей ста­тье мы рас­смот­ре­ли, как мож­но исполь­зо­вать фай­лы для того, что­бы не засо­рять код Terraform. В дан­ной ста­тье мы посмот­рим, как мож­но исполь­зо­вать дина­ми­че­ские фай­лы (шаб­ло­ны) для напи­са­ния кода Терраформ.

Что такое дина­ми­че­ский файл? В дан­ном кон­тек­сте это файл, в кото­рый мы посы­ла­ем вся­кие пере­мен­ные и файл гене­ри­ру­ет­ся в зави­си­мо­сти от наших пере­мен­ных. Когда в коде мы исполь­зу­ем кон­струк­цию user_data = file (), по сути мы дела­ем копи­ро­вать-вста­вить из фай­ла, кото­рый мы ука­зы­ва­ем в каче­стве аргу­мен­та функ­ции. Теперь мы будем исполь­зо­вать дру­гую функ­цию ее син­так­сис немно­го отли­ча­ет­ся: user_data = templetfile().

Дан­ная функ­ция при­ни­ма­ет два пара­мет­ра. Пер­вый пара­метр имя фай­ла. Далее ста­вит­ся знак , и затем фигур­ные скоб­ки {}, в кото­рых мы ука­зы­ва­ем пере­мен­ные, кото­рые мы хотим отпра­вить в файл шаб­ло­на. Реко­мен­дую для чита­е­мо­сти кода и удоб­ства рабо­ты файл, в кото­рый будут отправ­лять­ся пере­мен­ные пере­име­но­вы­вать в имя_файла.tpl. Обще при­ня­тое рас­ши­ре­ние для фай­ла-шаб­ло­на. В ито­ге мы полу­ча­ем гене­ри­ро­ван­ный файл с отправ­лен­ны­ми в него параметрами.

Выгля­дит это сле­ду­ю­щем обра­зом. Допу­стим мы хотим отпра­вить в файл несколь­ко пере­мен­ных например:

f_name = “Olya” , l_name = “Vasilkova”, names = [“Masha”, ”Vasya”, ”Rik”, ”Petya”, “Oleg”]

Как види­те мы засы­ла­ем пере­мен­ные в файл, мы можем одну пере­мен­ную или кучу целую отпра­вить, не обя­за­тель­но что дан­ные пере­мен­ные будут исполь­зо­вать­ся. Пере­мен­ные раз­ные, оди­ноч­ные мы взя­ли 2 пере­мен­ные и одну пере­мен­ную где мно­го зна­че­ний. Мож­но ска­зать, что мас­сив данных.

В преды­ду­щей ста­тье мы созда­ва­ли html стра­нич­ку, мы про­дол­жим ее созда­вать, толь­ко с исполь­зо­ва­ни­ем пере­мен­ных. Берем скрипт из преды­ду­ще­го уро­ка и начи­на­ем править.

Пере­име­но­вы­ва­ем файл - cp user_data.sh user_data.sh.tpl. Сле­ду­ю­щим шагом прав­ка непо­сред­ствен­но само­го скрип­та с исполь­зо­ва­ни­ем html разметке.

Отправ­ля­ем пере­мен­ные в файл. Вме­сто пере­мен­ных вста­вят­ся зна­че­ние пере­мен­ных. Далее мы встав­ля­ем цикл, что­бы прой­тись по зна­че­ни­ям пере­мен­ной names. Полу­ча­ем в цик­ле, что x будет рав­на каж­до­му зна­че­нию в пере­мен­ной names. Обра­ти­те вни­ма­ние, что кон­струк­ция %{ for x in names ~} и % { endfor~} печа­тать­ся не будут! Печа­тать­ся будет то, что нахо­дит­ся в цик­ле Hello to ${x} from ${f_name}. Т.е вот этим скрип­том мы гене­ри­ру­ем user_data в коде тер­ра­форм. Сле­до­ва­тель­но, наш файл index.html будет с кучей строчек.

Теперь нам необ­хо­ди­мо, это все запу­стить. Пере­хо­дим в команд­ной стро­ке в дирек­то­рию Lesson-4. И про­во­дим пер­вич­ную ини­ци­а­ли­за­цию terraform init. Резуль­та­том успеш­ной ини­ци­а­ли­за­ции будет сле­ду­ю­щий вывод коман­ды на экран.

Далее даем коман­ду на про­вер­ку кода тер­ра­форм в том чис­ле убе­дит­ся, что не создаст­ся ниче­го лиш­не­го. terraform apply, под­твер­жда­ем выпол­не­ние коман­ды сло­вом yes. А далее мы можем видеть, как систе­ма начи­на­ет созда­ние ресур­сов. После испол­не­ния мы можем в кон­со­ли AWS уви­деть создан­ный ресурс.

Обра­ти­те вни­ма­ние, что при созда­нии ресур­са user_data шиф­ру­ет­ся. Это хоро­шо вид­но в момент выво­да terraform apply.

Когда инстанс в кон­со­ли AWS запу­стил­ся, мы можем посмот­реть, что у нас содер­жит­ся в user_data. Для это­го необ­хо­ди­мо по instance щелк­нуть пра­вой кноп­кой мыши и вызвать меню.

В дан­ном меню выби­ра­ем user_data. Появ­ля­ет­ся сле­ду­ю­щее окно.

Как мы видим на кар­тин­ке, часть наше­го скрип­та. Если про­кру­тить, то он будет там весь со все­му при­ни­ма­е­мы­ми зна­че­ни­я­ми. Это функ­ция будет доста­точ­но полез­на для кон­тро­ля пере­мен­ных, что­бы посмот­реть какие дан­ные попа­ли в переменные.

Сле­до­ва­тель­но, на выхо­де мы полу­ча­ем в веб бра­у­зе­ре сле­ду­ю­ще­го вида веб страничку.

У нас полу­чи­лось с помо­щью пере­мен­ных и шаб­ло­на сге­не­ри­ро­вать html файл, то есть наш файл дина­мич­ный. Далее уже дело тех­ни­ки под­ста­вить его в веб-сер­вер для отоб­ра­же­ния и запус­ка в инстан­се AWS.

Напо­ми­наю, что IP адрес наше­го сер­ве­ра в AWS мож­но посмот­реть в двух местах. А затем обра­тить­ся к веб стра­ни­це по про­то­ко­лу http с исполь­зо­ва­ни­ем дан­но­го IP адре­са в любом браузере.

Немно­го еще функ­ци­о­на­ла - мож­но не под­ни­мая инстан­са посмот­реть какие дан­ные полу­чим на выхо­де. Для это­го исполь­зу­ем функ­ци­о­нал terraform console. Берем часть тер­ра­форм фай­ла. Вырав­ни­ва­ем в одну строку:

templatefile("user_data.sh.tpl", { f_name = "Olya",l_name = "Vasilkova", names = ["Masha", "Vasya", "Rik", "Petya", "Oleg"] })

и встав­ля­ем.

Как вы види­те полу­ча­ем те дан­ные кото­рые пере­да­ют­ся на инстанс в AWS.