我已将 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/