Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Terraform 2 #6

Merged
merged 8 commits into from
Nov 11, 2018
Merged

Terraform 2 #6

merged 8 commits into from
Nov 11, 2018

Conversation

Kirill-Garbar
Copy link
Collaborator

Выполнено ДЗ № 7

  • Основное ДЗ
  • Задание со * 1
  • Задание со * 2
  • Опциональное задание по provisioners

В процессе сделано

  • Импортировали правило файерволла, разрешающее подключение по SSH к машинам. Это было сделано, т.к. добавление правила с таким же именем вызывло конфликт, т.к. ТФ ничего не знал об этом правиле, т.к. в state-файле не было такой информации.
  • Изучили вопрос явных и неявных связей между ресурсами. Обратили вниманиеd в каком порядке добавляются и удаляются зависимые ресурсы.
  • Кроме неявных зависимостей, у всех ресурсов есть мета-параметр depends-on, который добавляет явную зависимость от ресурса. В доках и в гугле не нашёл нормального способа добавить зависимость в ресурсы одного модуль от ресурсов другого модуля.
  • Пакером разбили виртуалку с приложением и БД на две виртуалки: приложение и БД.
  • В ТФ так же разбили ресурс с ВМ на два ресурса: приложение и БД, созданные из образов, которые запаковали в пакере.
  • В конфиг ТФ приложения добавили правило файерволла, разрешающее доступ по порту 9292, а в конфиг ТФ БД добавили правило, разрешающее доступ к монге по 27017.
  • Оставшуюсь конфигурацию разбили по файлам main.tf, описывающий провайдер GCP и файл vpc.tf, описывающий правило доступа по ssh.
  • Далее конфигурации БД и приложения разбили по модулям, которые подключаются в основном файле main.tf.
  • Добавили модуль vpc.tf c переменной IP источника, чтобы для прода ограничивать доступ по SSH, а для препрода нет.
  • Добавили из реестра модулей модуль, создающий bucket'ы в GCP. Создали два бакета, для препрода и прода.
  • Настроили хранение стейтов в бакетах. Проверили, что при инициализации терраформа в директории с созданными конфиг файлами стейт берётся из бакета. Это ОЧЕНЬ удобно. Это позволяет не заботиться о хранении актуального стейта.
  • Проверили одновременное изменение конфигурации - не работает. Не работает даже terraform plan, что логично. Бакет не даёт прочитать state.
  • Добавили provisioners в DB и APP. В DB нужно изменть конфиг mongo, чтобы демон слушал не только локалхост. В APP нужно добавить переменную IP адрес сервера БД, которая запишется в unit. Нельзя добавить при деплое, т.е. приложение при каждом запуске берёт IP адрес из переменной.
  • Добавили обращение app к DB по внутреннему адресу. Внешний адрес остался только для диагностики для удобства выполнения ДЗ.
  • Добавили запуск provisioners с условием. Добавляется null_resourse, который может запускаться по триггеру. Можно запускать по изменению, можно по равенству переменной чему-либо (тернарный оператор на count). Недостатком такой конфигурации является то, что при force пересоздании (taint), нужно помечать оба ресурса, и родительский, и null_resourse. Нужно как-то в триггеры добавить условие пересоздания родительского ресурса.

Как проверить работоспособность.

  • Забрать проект c git.
  • Создать terraform.tfvars из terraform.tfvars.example, указать новый проект.
  • Перейти в директорию terraform.
  • Выполнить terraform init и terraform apply(Команда создаст бакет для хранения tfstate).
  • Перейти в директорию stage. Создать terraform.tfvars из terraform.tfvars.example, указать свой проект и заполнить другие переменные. Если необходимо добавить provisioners, указать переменную provisioner_condition = 1.
  • Выполнить terraform init и terraform apply(Команда создаст инфраструктуру с приложением).

Как проверить работоспособность:

  • Перейти по ссылке http://app_external_ip:9292

PR checklist

  • Выставил label с номером домашнего задания
  • Выставил label с темой домашнего задания

@Kirill-Garbar Kirill-Garbar merged commit b2a86c7 into master Nov 11, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
2 participants