Terraform

Проверка конфигурации и применение ее:
# terraform init
# terraform plan
# terraform apply

Посмотреть текущие ресурсы в aws:
# terraform show

Удалить все ресурсы:
# terraform destroy

Еще:
# terraform state list - list of all resources
# terraform state rm {resource_name} - remove certain resource
# terraform state pull - pull tfstate from backend (S3 for ED)


-в файле terraform.tfstate - хранится текущий статус кластера
Если файла terraform.tfstate нет, то AWS “не видит” созданных ресурсов и он применит конфигурацию опять, поэтому желательно надежно хранить эти файлы в S3 buckets

Если кто-то изменил ресурс руками через UI, то terraform перезаймет эти изменения, поэтому важно все изменять только через terraform

-credentials от AWS храним в переменных окружения, в terraform файлах это не храним.

Использовать наименование другого ресурса в terraform:
-var = [type.name.id]

Вставить конфигурацию из другого файла:



-Динамически генерируем коняги из темплейта с переменными:




Для проверки например динамической конфигурации, мы можем зайти в специальный инструмент и проверить команды:
# terraform console
-и далее пишем команды, которые необходимо проверить

В версии terraform новее 0.12 появились динамичные Блоки кода - dynamic, с помощью которого мы можем упростить создание большого кол-ва ресурсов с помощью циклов,
Например рулы для разрешения трафика на портах:





Мы можем задавать lifecycle для инстансов, например запрет на изменение инстанса(например для сервера с БД):





Lifecycle для игнорирования изменений ami и user_data:




Самый полезный lifecycle, создать новый инстанс до того как удалять старый. Это минимизирует Downtime, но предварительно надо привязать VM статический IP, чтобы он впоследствии не изменялся, например aws_eip:



В качестве бэкапа plan можно сохранять в файл, для возможности отката:
# terraform plan -out planfile
# terraform apply planfile
Однако такой способ сохранения, также сохраняет переменные файл! Аккуратней с секьюрными данными!


Дополнить описание команд:
# terraform fmt
# terraform graph
# terraform validate
# terraform state