错误:升级后状态中的资源实例数据无效

问题描述

我一直在将terraform配置从0.11升级到0.13,并从状态文件中删除了一个模块(使用terraform state rm module.mymodulename)。

在删除上面的资源后,我现在在运行计划命令时遇到了很多错误。现在,我不太确定它是否与删除模块有关,或者是否与升级有关。我可以看到aws_ecs_service已弃用了placement_strategy属性,我对如何安全地从状态文件中删除它有些困惑。

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 modules\myappadmin\service.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 modules\myappadmin\service.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 modules\myappadmin\service.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 modules\myappadmin\service.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 modules\myappadmin\service.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 modules\myappadmin\service.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".

解决方法

我不确定这个完全解释了您所看到的内容,但是这些错误之一似乎与a change to aws_ecs_service in AWS provider major version 2有关,这表明您同时升级了Terraform 同时提供AWS提供商。

为了更容易理解发生的情况,我建议一次只升级一个组件,这样您就可以在进行下一个升级之前进行一次升级所需的任何更改,因此您不必进行关联同时发布各种不同组件的发行说明。

鉴于您在这里看到的内容,我建议针对您的案例进行以下排序:

  • 将AWS提供程序升级到主要版本2的最新可用版本,在我撰写本文时为2.70.0。使用the version 2 upgrade guide来尝试查看遇到的任何错误需要进行哪些更改。
  • 然后将AWS提供程序再次升级到主要版本 3 的最新可用版本,在我撰写本文时为3.2.0。使用the version 3 upgrade guide来尝试查看遇到的任何错误需要进行哪些更改。
  • 将Terraform CLI升级到最新的 v0.12 版本,在撰写本文时为v0.12.29。请参阅the Terraform 0.12 upgrade guide,其中描述了如何使用该版本中包含的自动升级工具,还描述了升级工具无法自动处理的一些较不常见的情况。
  • 最后,将Terraform CLI升级到最新的v0.13版本。请参阅the Terraform 0.13 upgrade guide,以查看是否需要对该升级进行配置更改。 (如果您仅使用“正式” Terraform提供程序(例如AWS提供程序),则可能无需进行任何更改,但仍然可以运行自动升级工具来查找。)

尽管分四个步骤进行操作似乎比繁重的操作困难,但这应意味着在每个步骤中,您只需要担心一组发行说明,并且您可以将需要进行的所有调试仅集中在一个组件上。

请注意,上面我描述了一次升级一个主要版本,而不是跳过。特别是Terraform CLI不支持直接从Terraform v0.11升级到v0.13,因为Terraform v0.13中不再提供从Terraform v0.12进行的自动升级工具。 AWS提供程序有可能直接从v1升级到v3,但是要这样做,您需要立即查阅两个版本的发行说明。

在上述过程中的某些时候,您可能会再次遇到这些错误。如果是这样,您将能够了解导致问题的更改,并有可能针对该组件(AWS提供程序或Terraform CLI,取决于您刚刚升级的组件)报告该问题。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...