Ошибка: Недопустимые данные экземпляра ресурса в состоянии после обновления

#terraform #terraform-provider-aws

#terraform #terraform-provider-aws

Вопрос:

Я обновил свою конфигурацию terraform с 0.11 до 0.13, а также удалил модуль из файла состояния (используя terraform state rm module.mymodulename).

После удаления ресурса, указанного выше, я теперь сталкиваюсь с целым рядом ошибок при выполнении команды plan. Теперь я не слишком уверен, связано ли это с тем, что я удалил модуль, или это связано с обновлением. Я вижу, что атрибут placement_strategy устарел для aws_ecs_service, и я немного озадачен тем, как безопасно удалить его из файла состояния.

Placement_strategy — это не то, что я определил в ресурсе, а просто значение по умолчанию из более ранней версии.

Кто-нибудь посоветует, как решить приведенные ниже проблемы? Мне нужно восстановить это и запустить, поскольку это предназначено для нашей среды разработки. Я склоняюсь к удалению ресурса «aws_ecs_service» «myappadmin-service» и его повторному импорту.

 terraform plan

Error: Invalid resource instance data in state

  on ecs-instance-role.tf line 23:
  23: resource "aws_iam_instance_profile" "ecs-instance-profile" {

Instance aws_iam_instance_profile.ecs-instance-profile data could not be
decoded from the state: unsupported attribute "roles".

Error: Invalid resource instance data in state

  on modulesmyappadminservice.tf line 1:
   1: resource "aws_ecs_service" "myappadmin-service" {

Instance module.myappadmin.aws_ecs_service.myappadmin-service data could not be
decoded from the state: unsupported attribute "placement_strategy".

Error: Invalid resource instance data in state

  on modulesmyappadminservice.tf line 1:
   1: resource "aws_ecs_service" "myappadmin-service" {

Instance module.myappadmin.aws_ecs_service.myappadmin-service data could not be
decoded from the state: unsupported attribute "placement_strategy".

Error: Invalid resource instance data in state

  on modulesmyappadminservice.tf line 1:
   1: resource "aws_ecs_service" "myappadmin-service" {

Instance module.myappadmin.aws_ecs_service.myappadmin-service data could not be
decoded from the state: unsupported attribute "placement_strategy".

Error: Invalid resource instance data in state

  on modulesmyappadminservice.tf line 1:
   1: resource "aws_ecs_service" "myappadmin-service" {

Instance module.myappadmin.aws_ecs_service.myappadmin-service data could not be
decoded from the state: unsupported attribute "placement_strategy".

Error: Invalid resource instance data in state

  on modulesmyappadminservice.tf line 1:
   1: resource "aws_ecs_service" "myappadmin-service" {

Instance module.myappadmin.aws_ecs_service.myappadmin-service data could not be
decoded from the state: unsupported attribute "placement_strategy".

Error: Invalid resource instance data in state

  on modulesmyappadminservice.tf line 1:
   1: resource "aws_ecs_service" "myappadmin-service" {

Instance module.myappadmin.aws_ecs_service.myappadmin-service data could not be
decoded from the state: unsupported attribute "placement_strategy".
  

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

1. у меня сработал terraform init -upgrade.

Ответ №1:

Я не уверен, что это полностью объясняет то, что вы видите, но одна из этих ошибок, похоже, связана с изменением aws_ecs_service в основной версии 2 поставщика AWS, которая предполагает, что вы обновляете и Terraform , и поставщика AWS одновременно.

Чтобы было проще понять, что происходит, я бы предложил обновлять только по одному компоненту за раз, чтобы вы могли вносить любые изменения, необходимые для одного обновления, прежде чем приступать к следующему обновлению, и чтобы вам не приходилось сопоставлять примечания к выпуску различных компонентов одновременно.

Учитывая то, что вы видели здесь, я бы предложил следующий порядок для вашего случая:

  • Обновите поставщика AWS до последней доступной версии в основной версии 2, которая на момент написания этой статьи была 2.70.0. Используйте руководство по обновлению версии 2, чтобы попытаться увидеть, какие изменения требуются для любых ошибок, с которыми вы сталкиваетесь.
  • Затем снова обновите поставщика AWS до последней доступной основной версии 3, которая на момент написания этой статьи была 3.2.0. Используйте руководство по обновлению версии 3, чтобы попытаться увидеть, какие изменения требуются для любых ошибок, с которыми вы сталкиваетесь.
  • Обновите Terraform CLI до последней версии v0.12, которая на момент написания этой статьи является v0.12.29. Обратитесь к руководству по обновлению Terraform 0.12, в котором описывается, как использовать средство автоматического обновления, включенное в эту версию, а также описаны некоторые менее распространенные ситуации, с которыми средство обновления не может справиться автоматически.
  • Наконец, обновите Terraform CLI до последней версии версии 0.13. Обратитесь к руководству по обновлению Terraform 0.13, чтобы узнать, нужно ли вносить какие-либо изменения в конфигурацию для этого обновления. (Если вы используете только «официальных» поставщиков Terraform, таких как поставщик AWS, то вам может не потребоваться вносить какие-либо изменения, но вы все равно можете запустить средство автоматического обновления, чтобы выяснить это.)

Хотя выполнение этого в четыре шага, а не в один, может показаться более сложным, это должно означать, что на каждом шаге вам нужно беспокоиться только об одном наборе примечаний к выпуску, и вы можете сосредоточить любую отладку, которую вам нужно выполнить, только на одном компоненте.

Обратите внимание, что выше я описал обновление одной основной версии за раз, а не пропускал вперед. Terraform CLI, в частности, не поддерживает обновление напрямую с Terraform v0.11 до v0.13, поскольку средство автоматического обновления с Terraform v0.12 больше не присутствует в Terraform v0.13. Поставщик AWS потенциально может быть обновлен напрямую с версии v1 до версии v3, но для этого вам нужно ознакомиться с примечаниями к выпуску обеих версий одновременно.

Возможно, вы снова столкнетесь с этими ошибками в какой-то момент описанного выше процесса. Если это верно, вы сможете понять, какое изменение вызвало проблему, и, возможно, сообщить о проблеме этому компоненту (либо поставщику AWS, либо интерфейсу командной строки Terraform, в зависимости от того, что вы только что обновили.)

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

1. думаю, это покрывает большинство проблем, которые мы видим, и похоже, что я объединил пару обновлений в одно, что затрудняет устранение неполадок!

2. Ожидается ли, что мне придется вручную обновлять наш файл состояния при переходе на AWS provider 3.0? В противном случае я получаю серьезные сбои, но после того, как я удаляю оскорбительный дополнительный (устаревший) атрибут из файла состояния, он проходит.

3. На самом деле я не в курсе подробностей выпуска AWS provider 3.0, но, основываясь только на том, что вы сказали здесь, я вспоминаю о проблеме Terraform # 25752 , которая была открыта кем-то из команды AWS provider, возможно, в ответ на сообщения людей об ошибках, которые вы видели. Итак, я думаю, вы, возможно, столкнулись с ошибкой, которая должна быть исправлена на следующей неделе в Terraform v0.13.1.

4. Только что столкнулся с той же проблемой при переходе с Terraform 0.12.24 на 0.13.0_1. Откат к Terraform 0.12.29 и поставщику AWS 2.70.0 на данный момент решил проблему. Я искал совет о том, как выполнить перемотку вперед, и нашел эту страницу. После прочтения руководства по обновлению AWS 3, похоже, что перенос состояния на нового поставщика AWS 3.x будет таким же увлекательным, как наждачная бумага для рыси в телефонной будке.

5. Спасибо @MartinAtkins, обходной путь, описанный в комментарии github.com/hashicorp/terraform/issues/… у меня сработало изменить состояние и избавиться от атрибутов ресурса, удаленных с помощью версии 0.13.