- Научиться использовать remote state с блокировками.
- Освоить приёмы командной работы.
- Зарегистрирован аккаунт в Yandex Cloud. Использован промокод на грант.
- Установлен инструмент Yandex CLI.
- Любые ВМ, использованные при выполнении задания, должны быть прерываемыми, для экономии средств.
Внимание!! Обязательно предоставляем на проверку получившийся код в виде ссылки на ваш github-репозиторий!
Убедитесь что ваша версия Terraform ~>1.8.4 Пишем красивый код, хардкод значения не допустимы!
- Прочтите статью: https://neprivet.com/
- Пожалуйста, распространите данную идею в своем коллективе.
- Возьмите код:
- из ДЗ к лекции 4,
- из демо к лекции 4.
- Проверьте код с помощью tflint и checkov. Вам не нужно инициализировать этот проект.
- Перечислите, какие типы ошибок обнаружены в проекте (без дублей).
- Возьмите ваш GitHub-репозиторий с выполненным ДЗ 4 в ветке 'terraform-04' и сделайте из него ветку 'terraform-05'.
- Повторите демонстрацию лекции: настройте YDB, S3 bucket, yandex service account, права доступа и мигрируйте state проекта в S3 с блокировками. Предоставьте скриншоты процесса в качестве ответа.
- Закоммитьте в ветку 'terraform-05' все изменения.
- Откройте в проекте terraform console, а в другом окне из этой же директории попробуйте запустить terraform apply.
- Пришлите ответ об ошибке доступа к state.
- Принудительно разблокируйте state. Пришлите команду и вывод.
- Сделайте в GitHub из ветки 'terraform-05' новую ветку 'terraform-hotfix'.
- Проверье код с помощью tflint и checkov, исправьте все предупреждения и ошибки в 'terraform-hotfix', сделайте коммит.
- Откройте новый pull request 'terraform-hotfix' --> 'terraform-05'.
- Вставьте в комментарий PR результат анализа tflint и checkov, план изменений инфраструктуры из вывода команды terraform plan.
- Пришлите ссылку на PR для ревью. Вливать код в 'terraform-05' не нужно.
- Напишите переменные с валидацией и протестируйте их, заполнив default верными и неверными значениями. Предоставьте скриншоты проверок из terraform console.
- type=string, description="ip-адрес" — проверка, что значение переменной содержит верный IP-адрес с помощью функций cidrhost() или regex(). Тесты: "192.168.0.1" и "1920.1680.0.1";
- type=list(string), description="список ip-адресов" — проверка, что все адреса верны. Тесты: ["192.168.0.1", "1.1.1.1", "127.0.0.1"] и ["192.168.0.1", "1.1.1.1", "1270.0.0.1"].
Настоятельно рекомендуем выполнять все задания со звёздочкой. Их выполнение поможет глубже разобраться в материале.
Задания со звёздочкой дополнительные, не обязательные к выполнению и никак не повлияют на получение вами зачёта по этому домашнему заданию.
- Напишите переменные с валидацией:
- type=string, description="любая строка" — проверка, что строка не содержит символов верхнего регистра;
- type=object — проверка, что одно из значений равно true, а второе false, т. е. не допускается false false и true true:
variable "in_the_end_there_can_be_only_one" {
description="Who is better Connor or Duncan?"
type = object({
Dunkan = optional(bool)
Connor = optional(bool)
})
default = {
Dunkan = true
Connor = false
}
validation {
error_message = "There can be only one MacLeod"
condition = <проверка>
}
}
- Настройте любую известную вам CI/CD-систему. Если вы ещё не знакомы с CI/CD-системами, настоятельно рекомендуем вернуться к этому заданию после изучения Jenkins/Teamcity/Gitlab.
- Скачайте с её помощью ваш репозиторий с кодом и инициализируйте инфраструктуру.
- Уничтожьте инфраструктуру тем же способом.
- Настройте отдельный terraform root модуль, который будет создавать YDB, s3 bucket для tfstate и сервисный аккаунт с необходимыми правами.
Ответы на задания и необходимые скриншоты оформите в md-файле в ветке terraform-05.
В качестве результата прикрепите ссылку на ветку terraform-05 в вашем репозитории.
Важно. Удалите все созданные ресурсы.
Зачёт ставится, если:
- выполнены все задания,
- ответы даны в развёрнутой форме,
- приложены соответствующие скриншоты и файлы проекта,
- в выполненных заданиях нет противоречий и нарушения логики.
На доработку работу отправят, если:
- задание выполнено частично или не выполнено вообще,
- в логике выполнения заданий есть противоречия и существенные недостатки.