Выполнение домашнего задания по теме "7.4. Средства командной работы над инфраструктурой".
Q/A
Задание 1
Настроить terraform cloud
Не выполнил, так как нет доступа и есть вероятность, что terraform cloud не будет работать с инфраструктурой yandex.cloud.
Задание 2
Написать серверный конфиг для атлантиса.
Смысл задания – познакомиться с документацией о серверной конфигурации и конфигурации уровня репозитория.
Создай
server.yamlкоторый скажет атлантису:
- Укажите, что атлантис должен работать только для репозиториев в вашем github (или любом другом) аккаунте.
- На стороне клиентского конфига разрешите изменять
workflow, то есть для каждого репозитория можно будет указать свои дополнительные команды.- В
workflowиспользуемом по-умолчанию сделайте так, что бы во время планирования не происходилlockсостояния.Создай
atlantis.yamlкоторый, если поместить в корень terraform проекта, скажет атлантису:
- Надо запускать планирование и аплай для двух воркспейсов
stageиprod.- Необходимо включить автопланирование при изменении любых файлов
*.tf.В качестве результата приложите ссылку на файлы
server.yamlиatlantis.yaml.
Создан файл server.yaml для конфигурации сервера, указанной в задании. А именно:
id:- задаёт текущий репозиторий в качестве отслеживаемогоatlantis.allowed_overrides: [apply_requirements]- указывает возможность измененияworkflowна уровне репозитория.- в ключе
workflows.default.planзадаётся поведение командыatlatis planпо умолчанию для всех конфигураций.
В файле atlantis.yaml добавлены два проекта, чтобы разграничить workspace, для которых применяются изменения.
При этом у каждого проекта определён массив autoplan.when_modified, в котором закреплено,
что необходимо автоматически запускать команды terraform при изменении любых файлов *.tf
Задание 3
Знакомство с каталогом модулей.
- В каталоге модулей найдите готовый модуль для создания
yandex_compute_instance.- Изучите как устроен модуль. Задумайтесь, будете ли в своем проекте использовать этот модуль или непосредственно ресурс
yandex_compute_instanceбез помощи модуля?- В рамках предпоследнего задания был создан
yandex_compute_instance. Создайте аналогичный инстанс при помощи найденного модуля.В качестве результата задания приложите ссылку на созданный блок конфигураций.
В качестве готового модуля для yandex.cloud можно использовать реализацию от hamnsk.
В данном случае, лучше всего будет использовать напрямую yandex_compute_instance, так как лишние внешние зависимости только усложняют построение конфигурации.
Лучше всего будет взять за основу и переработать данный модуль "под себя". К тому же, из-за блокировки реестра terraform, использование модулей может быть затруднено.
Для инициализации данного модуля необходимо добавить следующий конфиг в main.tf:
module "yc-vpc" {
name = terraform.workspace
source = "git@github.com:hamnsk/terraform-yandex-vpc.git?ref=v0.5.0"
create_folder = false
yc_folder_id = var.YC_FOLDER_ID
yc_cloud_id = var.YC_CLOUD_ID
nat_instance = true
subnets = [
{
zone = var.YC_ZONE
v4_cidr_blocks = ["192.168.10.0/24"]
}
]
}
При этом необходимо добавить новые переменные в variables.tf, а так же инициализировать их новыми переменными окружения.
К сожалению, в данной конфигурации не получилось инициализировать данный модуль из-за ошибки:
Error: failed to find latest image with family "nat-instance-ubuntu"
Выглядит это так, будто модуль опирается на образ ОС, которой теперь нет в реестре. Это ещё один пункт к тому,
что лучше самостоятельно создавать и поддерживать модули для terraform.