В попередньому пості управління-інфраструктурою-зі-terraform я згадував, що файл стану Terraform зберігає інвентаризацію ресурсів, якими управляє Terraform.
Безпечно зберігати файл стану
За замовчуванням, Terraform генерує файл “terraform.tfstate”. Це підходить для маленьких особистих проєктів. Однак для великих організацій має сенс розмістити файл terraform.tfstate в центральному місці.
А як щодо Github/Gitlab?
Файл стану Terraform містить паролі/токени тощо в незашифрованому вигляді. Тому його необхідно зберігати безпечно. Саме тому рекомендується використовувати зашифровані місця для зберігання файлу стану. Крім того, Terraform використовує механізм блокування для запобігання одночасному внесенню змін у файл стану кількома людьми. У випадку з AWS, для зберігання файлу стану можна використовувати поєднання S3 та DynamoDB. Альтернативно, можна також використовувати Terraform Cloud.
Отримання інформації з файлу стану
Припустимо, проєкт-A налаштований, і користувач виконав команду “terraform init; terraform apply”. Ви можете використовувати команду terraform, щоб отримати повний список ресурсів, якими управляє terraform.
➜ terraform state list
aws_instance.test_vm_1
aws_s3_bucket.test_bucket
....
Що робити, якщо ресурси були створені іншими способами?
З одного боку, Проєкт-A складається з різних ресурсів. З іншого боку, ми маємо хмарну інфраструктуру.
- Якщо новий ресурс був доданий до нашої хмарної інфраструктури іншими методами, Terraform не знатиме про ці зміни. Terraform може керувати лише тими ресурсами, які вказані в Проєкті.
- Якщо новий ресурс додається до Проєкту-A, то після запуску “terraform apply” він буде створений.
Коли створюється ресурс, генерується ID, який може бути різним у кожному запуску. Terraform зберігає інформацію про ID у файлі terraform.tf. За допомогою ID Terraform може визначити, чи був створений ресурс.
Припустимо, ми створили віртуальну машину за допомогою Terraform. Якщо ми видалимо її через сайт і виконаємо команду “terraform apply”, то буде створено нову віртуальну машину.
Додавання ресурсу до файлу стану
Якщо ресурс був створений у хмарній інфраструктурі за допомогою командного рядка або через сайт безпосередньо, то файл стану Terraform не буде містити інформації про такі ресурси. Однак ми можемо додати їх до файлу стану за допомогою двох кроків:
- Додати ресурс до проєкту.
- Виконати команду “terraform import ”.
Посилання
- https://medium.com/@ojranjankr/terraform-state-locking-using-s3-and-dynamodb-01f57fa7b9d3
- Документація Terraform — блокування стану
- Курс KodeKloud для Terraform сертифікація
Перекладено з: Terraform State file