С чего начать создание хорошего кода Terraform в долгосрочной перспективе? Откройте для себя передовые методы и инструменты, которые помогут вам начать работу правильно

Работа в команде DevOps подразумевает участие во многих репозиториях Terraform. Иногда у нас разные способы написания кода Terraform. Проверка кода также отнимает много времени, а поддержка кода становится сложной задачей.

По мере продвижения вы будете владеть все большим и большим количеством кода Terraform, и один день всегда будет 24 часа. Как с минимальными усилиями поддерживать хороший уровень качества? Это время драгоценно, вы не должны тратить его попусту.

Здесь автоматизация — ваше спасение, позволяющее поддерживать чистоту кода Terraform. Вы сможете обрабатывать больше кода с меньшими усилиями. Затем посвятите высвободившееся время более важным задачам.

В этой статье показаны первые шаги для начала непрерывного улучшения. Это касается лучших практик и инструментов. Terraform имеет встроенные инструменты, другие можно добавить в конфигурацию.

Сохраняйте один и тот же формат везде

Терраформ фмт

Когда вы читаете нестандартный код, вашему глазу приходится все время адаптироваться. Это требует большего внимания, чтобы не отставать. Вы должны стандартизировать формат кода, чтобы обеспечить хорошую читабельность.

Terraform предоставляет встроенную подкоманду с именем fmt. Он переписывает ваш код, чтобы следовать подмножествам соглашений о стиле языка Terraform.

$ terraform fmt

💡 Правила форматирования могут различаться между версиями Terraform. Не забудьте запустить команду terraform fmt после обновления версии.

Соглашение об именовании

Одна из главных трудностей в информатике — правильно называть вещи. То же самое относится и к Terraform для переменных, выходных данных, ресурсов и источников данных. И здесь в игру вступает хорошее соглашение об именах.

Это позволит вам иметь однозначный код. Он будет читать себя как английский.

В этой статье я не буду вдаваться в правила именования. Тем не менее, я приглашаю вас ознакомиться с этой ссылкой, которая предлагает вдохновляющую:



Отслеживание опечаток и синтаксических ошибок

Проверка Terraform

Ранее вы видели команду fmt Terraform. Terraform validate — еще одна встроенная подкоманда. Это позволит вам проверять и отслеживать синтаксические ошибки и опечатки.

Возьмем следующий пример:

Фрагмент содержит ошибку в названии ресурса. Запуск подкоманды validate выделяет ее:

$ terraform validate
╷
│ Error: Invalid resource type
│
│   on main.tf line 5, in resource "aws_instanc" "foo":
│    5: resource "aws_instanc" "foo" {
│
│ The provider hashicorp/aws does not support resource type  
| "aws_instanc". Did you mean "aws_instance"?
╵

Код Terraform может выглядеть правильно с точки зрения Terraform, но на самом деле он может не работать. В этом примере код объявляет несуществующий регион поставщика AWS и неправильный тип экземпляра:

Terraform указывает, что все правильно при запуске validate:

$ terraform validate
Success! The configuration is valid.

Это связано с тем, что Terraform проверяет только синтаксис и структуру кода. Он не проверяет значения, используемые в поставщиках и ресурсах AWS. Это выходит за рамки Terraform и связано с провайдером.

💡 Считайте валидацию Terraform первым шагом для быстрой проверки. Он не обнаруживает все ошибки до terraform apply.

TFLint

TFLint — это линтер, проверяющий потенциальные ошибки Terraform и применяющий лучшие практики. Вы можете добавить подключаемые модули, совместимые с основными облачными провайдерами — AWS, Azure, GCP — для расширенного обнаружения ошибок. Лучшие практики настраиваются с помощью системы правил.



TFLint всегда ищет дополнительный файл .tflint.hcl в текущем каталоге, в котором он запущен. В этот файл конфигурации вы добавляете определенные правила и плагины.

Вот пример конфигурации TFLint:

  1. Добавлен плагин AWS для обнаружения конкретных ошибок.
  2. Применяется правило для обнаружения недопустимых типов экземпляров AWS.

Теперь давайте возьмем предыдущий фрагмент кода Terraform AWS:

Вы должны инициализировать TFLint в вашем каталоге terraform:

$ tflint --init

Затем запустите TFLint с расположением каталога:

$ tflint .
1 issue(s) found:

Error: "wrong" is an invalid value as instance_type (aws_instance_invalid_type)

  on main.tf line 7:
   7:   instance_type = "wrong"

Безопасность и соответствие

Terraform — это не что иное, как инструмент для управления инфраструктурой как кодом. Вы должны обеспечить хороший дизайн безопасности. Это важно для проверки неправильной конфигурации, которая может привести к уязвимости.

Что такое Чеков?

Checkov — инструмент статического анализа кода для сканирования инфраструктуры в виде файлов кода. Он поддерживает Terraform и включает более 750 предопределенных политик. Вы также можете внести свой вклад и создать свои собственные политики.

Установить Чеков

$ brew install checkov

Оцените план Terraform

Создайте файл JSON из плана Terraform:

$ terraform init
$ terraform plan --out tfplan.binary
$ terraform show -json tfplan.binary | jq '.' > tfplan.json

Checkov читает этот файл и возвращает результаты с рекомендациями:

Pre-Commit: один инструмент, чтобы освоить их все

Что такое предварительная фиксация?

Pre-commit — это фреймворк для управления скриптами git hook. Они полезны для выявления простых проблем перед отправкой на проверку кода. Еще до того, как вы напечатаете сообщение о коммите, запускаются перехватчики предварительной фиксации.



Предварительная фиксация заменяет многие команды, которые вы вводите для проверки кода.

Установить предварительную фиксацию

$ brew install pre-commit

Его также можно установить с помощью pip:

$ pip install pre-commit

Как использовать предварительную фиксацию?

Код Terraform должен находиться в инициализированном репозитории git. Предварительная фиксация предполагает наличие конфигурации с именем .pre-commit-config.yaml. В этом файле вы определяете хуки перед фиксацией для Terraform.

Инициализируйте репозиторий git:

$ git init

Вот предварительная конфигурация:

Конфигурация перед фиксацией использует хуки из двух разных репозиториев. Первый специфичен для Terraform, а второй более общий. Он работает terraform fmt, terraform validate, tflint, которые вы видели раньше. Порядок определения хука соответствует порядку выполнения.

Как только конфиг будет готов, вам нужно добавить файлы Terraform в git:

$ git add main.tf

Вы можете запустить предварительную фиксацию вручную с помощью этой команды:

$ pre-commit run -a

Pre-commit выполнил все скрипты ловушек и обновил файл Terraform. Необходимо повторно добавить файл в git, чтобы учесть обновление. Предварительная фиксация запускается автоматически при фиксации кода.

Заключение

В этом руководстве вы увидели, что главное — начать работу и содержать код Terraform в чистоте. Это зависит от внедрения передового опыта и использования таких инструментов, как линтеры и сканеры.

С предварительной фиксацией вы можете автоматизировать проверку потенциальных ошибок локально с помощью одной команды. Проверки выполняются автоматически перед фиксацией кода в удаленном репозитории git. Это сделает ваши обзоры кода более эффективными.

Предварительная фиксация позволит вам оптимизировать конвейеры CI/CD. Он имеет множество скриптов-ловушек для запуска множества линтеров и сканеров Terraform.

Спасибо за прочтение 🙏 Надеюсь, эта статья помогла вам с Terraform! Хотите узнать больше о DevOps? Это внизу ⬇️