## Terraform 1. Что содержит код Terraform?
Ответ Ресурсы облачного провайдера, а также провижининг для создаваемых ресурсов.
2. Как хранить состояние инфраструктуры в Terraform?
Ответ Например, можно хранить tfstate в git-репозитории команды. Другой вариант - хранить в специализированном Terraform Backend.
3. Terraform Backend. Какой лучше?
Ответ Зависит от требованиям к хранению состояния. - AWS S3 — Standard (с locking через DynamoDB). Сохраняет состояние в виде заданного ключа в заданном сегменте на Amazon S3. Этот бэкэнд также поддерживает блокировку состояния и проверку согласованности через DynamoDB. - terraform enterprise — Standard (без блокировки). - etcd — Standard (без лока). Сохраняет состояние в etcd 2.x по заданному пути. - etcdv3 — Standard (с блокировкой). Сохраняет состояние в хранилище etcd в виде K/V с заданным префиксом. - gcs — Standard (с локом). Сохраняет состояние как объект в настраиваемом префиксе в заданном сегменте в Google Cloud Storage (GCS). Этот бэкэнд также поддерживает блокировку состояния. Существуют также и другие Backend для Terraform.
4. Как добавить имеющиеся ресурсы в tfstate?
Ответ ``` terraform import [options] ADDRESS ID ``` 1. Например, создаем директорию и инициализируем будущую инфраструктуру: ``` mkdir terraform-test cd terraform-test terraform init vi main.tf ``` 2. Добавляем в файл main.tf следующий код: ``` provider "aws" { region = "us-west-1" profile = "tyx-local" } resource "aws_s3_bucket" "sample_bucket" { bucket = "tyx-local-bucket" acl = "public" } ``` 3. Выполняем импорт ресурса: ``` terraform import aws_s3_bucket.sample_bucket tyx-local-bucket ```
5. Зачем нужен `terraform taint`?
Ответ Команда `terraform taint` пометит ресурс инфраструктуры, который будет удален и заново создан при следующем применении команды `terraform apply`.
6. Как проводить тестирование terraform?
Ответ `terraforn plan` выполнит проверку действующего кода. Работу с облачными ресурсами выполнит
7. Что такое модуль в terraform? Для чего он нужен?
Ответ Модуль в Terraform - пакет конфигурации Terraform, который можно использовать при повторной конфигурации компонентов инфраструктуры, а также базовой организации кода Terraform в директориях. При подключения модуля, ему даётся имя.
8. Как хранить переменные в terraform?
Ответ *main.tf* - основной конфигурационный файл, описывающий какие инстансы необходимо создать. *variables.tf* - конфигурация с описанием переменных и значениями по-умолчанию. Если значения по-умолчанию не задано, то они являются обязательными. *terraform.tfvars* - конфигурация со значениями переменных. Часто является секретным файлом, поэтому нужно с осторожностью пушить в публичные репозитарии. *outputs.tf* - описание выходных переменных. Необязательный файл, но очень удобно выделять нужные параметры из созданного инстанса, например IP созданного в облаке инстанса.
9. Как конвертировать Kubernetes yaml-манифест в HCL средствами Linux и terraform?
Ответ Например: ``` echo 'yamldecode(file("filename.yaml"))' | terraform console ```
10. Что такое Workspaces в Terraform?
Ответ [Workspaces](https://developer.hashicorp.com/terraform/language/state/workspaces#using-workspaces) в Terraform - это возможность управления state файлами. Workspace содержит все что необходимо для управления набором инфраструктуры, а отдельные рабочие области функционируют как полностью отдельные рабочие каталоги. С помощью Workspaces возможно управлять несколькими средами инфраструктуры.