Я только недавно начал изучать Terraform и создал файл terraform (main.tf) для создания базы данных каталога AWS Glue и добавления к ней некоторых таблиц каталога Glue. Я выполнил необходимые команды (инициализация terraform, план terraform, применение terraform), и ресурсы были сгенерированы для среды AWS Glue.
Теперь я знаю, что мне нужно сохранить файл tfstate, чтобы не отставать от изменений, но что, если я удалю файл tfstate? Есть ли возможность повторно сгенерировать файл tfstate в соответствии с тем, какие ресурсы у меня уже есть в среде AWS Glue? Может ли терраформ как-то «понюхать» эту информацию?
Я всегда могу начать заново, удалив эти ресурсы вручную в среде AWS Glue, а затем повторно запустить команды, но есть ли метод восстановления? Теперь, когда у меня уже есть эти ресурсы и я запускаю файл (без файла tfstate), он планирует сгенерировать все эти ресурсы и возвращает ошибку:
aws_glue_catalog_database.testdb: Creating...
Error: Error creating Catalog Database: AlreadyExistsException: Database already exists.
Любая помощь будет оценена по достоинству!
Это верный момент. Я реализую бэкенд для управления версиями tfstate, если в конечном итоге сделаю что-то жизненно важное с Terraform.





Я нашел эту ссылку полезной в вашем случае.
https://stackoverflow.com/questions/54122890/terraform-fails-because-tfstate-s3-backend-is-lost
Я думаю, вы можете начать импортировать ресурсы, которые снова создадут файл состояния.
Один из способов я еще не пробовал, можете попробовать.
Лучшей практикой было бы использовать серверную часть S3 (с управлением версиями) вместе с DynamoDB для защиты файлов состояния tf.
Возможно, вы сможете использовать «импорт терраформ». Если у вас есть существующая инфраструктура, импорт terraform может прочитать конфигурацию из ресурсов обратно в файл tfstate, если в конфигурации есть определение. Вот что сделал кто-то еще: https://tryingthings.wordpress.com/2021/03/31/lessons-learned-after-losing-the-terraform-state-file/
Спасибо всем за вашу помощь. Вдохновленный вашими предложениями об использовании команды импорта, я написал пакетный файл для каталога Terraform, куда я импортирую каждый ресурс один за другим.
Скрипт выглядит следующим образом:
cmd /k "terraform import aws_glue_catalog_database.testdb <AWS-ACCOUNT-ID>:testdb & terraform import aws_glue_catalog_table.testtable <AWS-ACCOUNT-ID>:testdb:testtable"
Он отлично работает для этого варианта использования.
Возможно, вам это не понадобится для целей тестирования, но использование удаленного бэкенда (например, S3) с управлением версиями очень помогает в этом, потому что вы можете восстановить предыдущую версию файла состояния, если каким-то образом вам удастся его удалить.