В это задании предлагается познакомиться со средством командой работы над инфраструктурой предоставляемым разработчиками терраформа.
- Зарегистрируйтесь на https://app.terraform.io/. (регистрация бесплатная и не требует использования платежных инструментов).
- Создайте в своем github аккаунте (или другом хранилище репозиториев) отдельный репозиторий с конфигурационными файлами прошлых занятий (или воспользуйтесь любым простым конфигом).
- Зарегистрируйте этот репозиторий в https://app.terraform.io/.
- Выполните plan и apply.
В качестве результата задания приложите снимок экрана с успешным применением конфигурации.
Снимок успешного применения apply и plan по ссылке.
Смысл задания – познакомиться с документацией о серверной конфигурации и конфигурации уровня репозитория.
Создай server.yaml
который скажет атлантису:
- Укажите, что атлантис должен работать только для репозиториев в вашем github (или любом другом) аккаунте.
- На стороне клиентского конфига разрешите изменять
workflow
, то есть для каждого репозитория можно будет указать свои дополнительные команды. - В
workflow
используемом по-умолчанию сделайте так, что бы во время планирования не происходилlock
состояния.
Создай atlantis.yaml
который, если поместить в корень terraform проекта, скажет атлантису:
- Надо запускать планирование и аплай для двух воркспейсов
stage
иprod
. - Необходимо включить автопланирование при изменении любых файлов
*.tf
.
В качестве результата приложите ссылку на файлы server.yaml
и atlantis.yaml
.
Установка атлантис и ngrok по доке:
vagrant@server1:~$ curl https://github.com/runatlantis/atlantis/releases/download/v0.19.2/atlantis_linux_amd64.zip -o "atlantis_linux.zip"
vagrant@server1:~$ unzip atlantis_linux.zip -d /usr/local/bin
vagrant@server1:~$ atlantis version
atlantis 0.19.2
vagrant@server1:~$ curl https://bin.equinox.io/c/bNyj1mQVY4c/ngrok-v3-stable-linux-amd64.tgz
vagrant@server1:~$ sudo tar xvzf ngrok-v3-stable-linux-amd64.tgz -C /usr/local/bin
vagrant@server1:~$ ngrok version
ngrok version 3.0.3
Запуск ngrok vagrant@server1:~$ ngrok http 4141
и его вывод
Экспортируем переменные:
export URL="https://https://4923-77-91-103-153.eu.ngrok.io"
export USERNAME="AirDRoN-lab"
export REPO_ALLOWLIST="github.com/AirDRoN-lab/devops-netology"
export SECRET="32684905744417222656"
export TOKEN="ghp_X4AbhIEgcsp0cWXjk5f0MfwvEJsFRu4TKCj2"
Выполняем настройку WebHook в GitHub согласно документации и запускаем atlantis
atlantis server --atlantis-url="$URL" --gh-user="$USERNAME" --gh-token="$TOKEN" --gh-webhook-secret="$SECRET" --repo-allowlist="$REPO_ALLOWLIST" --repo-config=atlantis_server_cfg.yaml
Файлы конфигурации использовались следющие (правки согласно ТЗ): на стороне сервера atlantis_server_cfg.yaml на стороне репозитория atlantis.yaml
Скриншоты успешного выполнения plan и apply из диалога PR: cкрин_1, cкрин_2
- В каталоге модулей найдите официальный модуль от aws для создания
ec2
инстансов. - Изучите как устроен модуль. Задумайтесь, будете ли в своем проекте использовать этот модуль или непосредственно
ресурс
aws_instance
без помощи модуля? - В рамках предпоследнего задания был создан ec2 при помощи ресурса
aws_instance
. Создайте аналогичный инстанс при помощи найденного модуля.
В качестве результата задания приложите ссылку на созданный блок конфигураций.
Для примера используем два модуля: terraform-aws-modules/ec2-instance/aws
и terraform-aws-modules/vpc/aws
.
Данные модули добавлены в конфигурационный файл main.tf. Также создан outputs.tf с выводом из модуля ec2 (согласно ТЗ).
Вывод terraform plan:
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
Outputs:
ec2_instance_public_ips = "54.226.245.103"
instance_id = "i-00bf57cf9eebba7c6"
private_ip = "172.31.29.234"
Буду ли в своем проекте использовать этот модуль или непосредственно ресурс aws_instance
без помощи модуля?
В случае, когда надо сделать что-то быстро и разово, модуль можно не использовать, т.е. исользовать официальный провайдер aws_instance, но если нужна конструкция более сложная с созданием нескольких серверов и/или возможным повторением создания для разных workspace - то модуль стоит того, чтобы его использовать. Использование модулей кажется наиболее удобным, особенно это касается outputs.