Consul:
- HA
- сервис автодискавери
- key-value хранилище
- источник информации о сервисах, поддержка хелсчеках
- DNS-сервис
- Consul-template
- Consul-Connect
Terraform:
- Хранит состояние в state
- Внешние объекты нужно импортировать или работать через data
- Модули для повторяемых операций (count, for_each)
- пример for_each:
resource "azurerm_resource_group" "rg" { for_each = { a_group = "eastus" another_group = "westus2" } name = each.key location = each.value }```
- Внешний сторадж (плюс локи) для хранения стайта при работе в команде (S3, PG, Consul)
- Output-переменные (можно использовать в скриптах автоматизации, CI/CD инструментах)
- Различные Provisioners (Shell, Puppet, Chef, Local)
- Множество провайдеров:
- управление пользователелями/базами в Базах Данных
- запись key/value с Consul
- ведение дашбордов для графаны
- Источник данных об инфраструктуре для систем управления конфигурациями:
- dynamic inventory для ansible (не официальные скрипты)
- Для работы с API Selectel'а написан модуль selvpc для создания проектов, пользователей и назначения квот
- Best Practice использовать два терраформа - один создает проекты, пользователей в этих проектах, второй уже работает в рамках этого проекта.
- подключать несколько портов через interface-attach, чтобы избежать перезагрузки, но нужно обратить внимание на настройку сети и связь с cloud init
- для безопастн
use_octavia = true
в секции провайдера для работы с октавией- делать plan в out-файл, и эпплей на основе этого output файла
минусы терраформ:
- переменные должны быть определены в момент запуска терраформа
- нельзя подставлять переменные в переменные
- отсутствие условий/condtions
- условия можно использовать в темплейтах
- можно генерировать в
locals
-переменных новый массив/хеш через итерацию по текущему хешу/массив с применением условий и интерполяций - dynamic блок для выполнения нескольких действий внутри ресурса, пример - подключение нескольких портов. Но на не итерируемые ресурсы нельзя поставить условие - к примеру включать/выключать ssh-agent или бастион-опцию.
- изменение ssh-ключа (ssh keypair) приведет к пересозданию ВМ, помогает опция
ignore_changes
- дополнение к предыдущему пункту