снимок состояния был создан Terraform v0.12.29, который является более новым, чем

#terraform #terraform-provider-aws

Вопрос:

Я использую Terraform с s3 в качестве бэкенда, все это отлично работало раньше, но совсем недавно я получил следующее сообщение об ошибке при запуске terraform plan или apply

Ошибка: снимок состояния был создан Terraform v0.14.8, который новее, чем текущий v0.12.29; обновите до Terraform v0.14.8 или выше, чтобы работать с этим состоянием

Самое странное, что я уже запустил версию Terraform:

 terraform {
  required_version = ">= 0.12"
}
 

И когда я извлек последнее состояние из s3,версия все еще 0.12.29.

 terraform state pull | grep version

"terraform_version": "0.12.29",
  ....
 

Я действительно понятия 0.14.8 не имею, откуда взялась эта версия.

Ответ №1:

Со мной случилось так, что мое развертывание (CICD) завершилось неудачно и оставило блокировку в состоянии TF.

Поэтому я просто пошел и вручную снял блокировку с моего локального

terraform init -backend-config="key=prod/app1.tfstate"

terraform force-unlock -force xxxxx-8df6-a7e8-46a8-xxxxxxxxxxxx

Затем я пытаюсь выполнить повторное развертывание с CI/CD и получаю эту ошибку, потому что моя локальная версия была выше, чем terraform, запущенная на CI/CD.

В конце концов, я сделал это, чтобы вернуться в прежнее состояние:

  1. S3: найдите файл состояния, восстановите старую версию (управление версиями включено в этом блоке)
  2. Запустите это снова: terraform init -backend-config="key=prod/app1.tfstate" -reconfigure

Чтобы получить ответ ниже с предыдущим значением дайджеста:

 
Successfully configured the backend "s3"! Terraform will automatically
use this backend unless the backend configuration changes.
Error refreshing state: state data in S3 does not have the expected content.

This may be caused by unusually long delays in S3 processing a previous state
update.  Please wait for a minute or two and try again. If this problem
persists, and neither S3 nor DynamoDB are experiencing an outage, you may need
to manually verify the remote state and update the Digest value stored in the
DynamoDB table to the following value: ebf597a8a25619b959baaa34a7b9d905
 
  1. Обновите элемент «динамо» приведенным выше дайджестом
  2. Снова запустите развертывание

Ответ №2:

Вы единственный разработчик, работающий над terraform? Вы используете terraform локально или также через какой-то конвейер? Существует большая вероятность того, что один из членов вашей команды обновил свой двоичный файл terraform до версии v0.14.8 и применил локально (без обновления удаленного состояния), и теперь вам также потребуется перейти на эту версию

Это не просто версия состояния терраформирования, к которой вы обращаетесь/против которой вы планируете работать. Terraform перекрестно ссылается на множество внутренних состояний terraform. Поэтому просто зайдите в корзину удаленных состояний и попробуйте найти это конкретное удаленное состояние с другой версией tf.

Комментарии:

1. Нет, члены моей команды также работают над terraform, и я запускаю его локально. Если мой член команды обновил свой двоичный файл до версии v0.14.8, разве он не изменил версию в файле состояния? Я все еще вижу v0.12.29 в новейшем файле состояния.

2. Вы можете обновить локальное состояние на их соответствующих машинах, не изменяя удаленное состояние

3. Это немного сбивает с толку, если их изменение не изменило удаленное состояние , то почему Terraform все еще запрашивает версию v0.14.8 , откуда она берет эту версию ?