В предыдущей статье мы рассмотрели, как можно использовать файлы для того, чтобы не засорять код 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.