Хотя я надеюсь, что это редкое явление, я сталкивался с этим несколько раз, когда мне приходилось обратить внимание на State Terraform на предыдущую версию в AWS S3. Почему бы просто не сохранить его в более новой версии? Ну, некоторые из наших конвейеров CI/CD использовали более старую версию Terraform (скажем, 0,12), и, хотя ни одно из состояний ресурсов фактически не изменилось, наш код больше не будет работать после того, как разработчик запустил что -то локально на своем компьютере с более новой версией Terraform (скажем, 0,14).
Так! Вот простой пример того, как отказываться от состояния.
Примечание : У вас должно быть включено управление версией на ведре S3. Если это не так, пожалуйста, сделайте это для всех мест, где хранится государство Terraform: P
Настраивать
Я собираюсь настроить это совершенно свежее с новым объектом удаленного состояния в S3 со следующим кодом Terraform:
terraform { backend "s3" { bucket = "shannon-terraform" key = "dev.to-example/terraform.tfstate" region = "us-west-2" profile = "shannon" } required_providers { null = { source = "hashicorp/null" version = "~> 3.1" } } } resource "null_resource" "fake1" { count = 1 }
Итак, я Terraform Apply -Aut -Aprove
‘D Это. Далее я ставлю подсчет 2 и также применяю его. Таким образом, у меня есть две разные версии терраформного состояния, спасенных на этом пути ведра.
Теперь мы должны быть в состоянии увидеть это с S3 API: AWS S3api List-object-versions-Bucket Shannon-Terraform-prefix dev.to-example/terraform.tfstate--output json-profile shannon | jq -r ".versions [].
В моем случае я вижу две модификации:
2021-06-23T22:17:02+00:00 2021-06-23T22:16:28+00:00
Далее я собираюсь получить копию моего предыдущего штата Terraform на местном уровне в моем нынешнем рабочем каталоге: AWS S3api Get-Object-Bucket Shannon-Terraform-Kkey dev.to-Example/terraform.tfstate-version-id [versionId] [local_copy_name] -Профиль Шеннон
Если вам интересно, откуда взялась версия, она должна быть на выводе вышеупомянутого Список-ОБУТ-ВЕСЕРИИ
Команда, но не будет отображаться без удаления JQ
диапазон.
Наконец, давайте подтолкнем эту локальную резервную копию в путь S3: AWS S3 CP ./TROCAL_COPY_NAME] S3://shannon-terraform/dev.to-example/terraform.tfstate --profile shannon
Анкет Перезагрузите вышеуказанную команду для перечисления объектов, и теперь вы должны увидеть другую версию!
Наконец, вы можете подтвердить обновление с Список государства Terraform
Анкет В моем случае я теперь снова вижу только один null_resource после того, как перевернул состояние обратно, прежде чем создать второе.
Пожалуйста, будьте осторожны в вариантах использования здесь! Выпуск состояния терраформ из синхронизации с фактической инфраструктурой может быть катастрофическим. Это должно быть нишевым случаем для использования.
Оригинал: «https://dev.to/lucassha/rolling-back-your-terraform-remote-state-in-s3-2c3n»