如何解决错误:升级后状态中的资源实例数据无效
我一直在将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,取决于您刚刚升级的组件)报告该问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。