terraform - 错误: Invalid resource instance data in state after upgrade

标签 terraform terraform-provider-aws

我已将 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.12 的自动升级工具不再存在于 Terraform v0.13 中。 AWS 提供商可能会直接从 v1 升级到 v3,但为此,您需要同时查阅两个版本的发行说明。

您可能在上述过程中的某个时刻再次遇到这些错误。如果确实如此,您将能够了解哪个更改导致了问题,并可能针对该组件报告问题(AWS 提供商或 Terraform CLI,具体取决于您刚刚升级的内容。)

关于terraform - 错误: Invalid resource instance data in state after upgrade,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63494324/

相关文章:

ssl - terraform kubernetes 提供程序 - tls secret 未正确创建

amazon-web-services - 使用 terraform 初始化 terraform 后端

aws-lambda - CloudFront 的 Terraform lambda_function_association 作为模块内的可选列表

来自本地人的 terraform 变量默认值插值

terraform - 如何在 Terraform 资源循环中使用非唯一键创建唯一资源

amazon-web-services - 如何在 Terraform 中将 EBS 卷添加到 ECS 实例

terraform - 如何管理多个存储库的 terraform

terraform - 如何在子模块中使用远程状态数据源

amazon-web-services - Terraform 错误 : ClientException: When the volume parameter is specified, 仅应使用一种卷配置类型

Terraform 似乎没有接受手动更改