升级到0.13后,如何修复Terraform不支持​​的属性“ ses_smtp_password”?

时间:2020-08-15 15:16:29

标签: terraform terraform-provider-aws

升级后,运行terraform plan时收到如下消息:

Error: Invalid resource instance data in state

  on iam_server_backup.tf line 4:
   4: resource "aws_iam_access_key" "backup" {

Instance aws_iam_access_key.backup data could not be decoded from
the state: unsupported attribute "ses_smtp_password".

我解决问题的方法是删除状态(terraform state rm aws_iam_access_key.backup)。但是,这在我运行terraform apply时创建了新的访问密钥,这非常耗时,因为我必须更改所有应用程序中的所有访问密钥。有解决此问题的更好方法吗?

4 个答案:

答案 0 :(得分:3)

更新我的aws terraform提供程序时遇到了同样的unsupported attribute "ses_smtp_password"问题,并且能够通过手动下载和修改状态来修复它。

terraform state pull > state.json

现在编辑state.json

  • 使用ses_smtp_password删除任何行
  • 增加serial属性(例如"serial": 21,-> "serial": 22,
  • 保存
terraform state push state.json
terraform plan # should work again

可选,但可以这样做,这样就不会意外提交状态文件

rm state.json 

答案 1 :(得分:1)

此错误与您升级到Terraform 0.13无关,实际上是由于从AWS Terraform提供程序的2.x版本升级到了3.x版本。如the AWS Terraform provider 3.0 upgrade guide中所述,您需要从使用ses_smtp_password切换到ses_smtp_password_v4

进行此更改的原因是,SES将在2020年10月停止接受旧类型的密码,因此您必须在此之前升级到使用版本4签名的密码。

如您所见,您需要从Terraform状态中删除旧密码,并让Terraform生成新的ses_smtp_password_v4密码。

答案 2 :(得分:1)

我也正好面对这个问题,并想提供一种不需要将状态混为一谈的解决方案。

解决方案是在升级到terraform 0.13之前将AWS提供程序升级到〜> 3.0。这导致将ses_smtp_password字段从状态中删除,然后可以毫无问题地升级到Terraform 0.13。

不幸的是,我不知道它是如何工作的,我猜测TF 0.13发生了变化,因为TF 0.12使用的是与0.13使用的提供程序相同的版本,所以导致删除不推荐使用的属性存在异常。

答案 3 :(得分:1)

我与azurerm提供程序有相同的问题。它固定在版本~> 1.44上,突然更新到terraform 0.13之后,unsupported attribute错误开始出现。

为我解决了什么问题(无需升级提供程序):

  1. 运行terraform 0.13upgrade-这将创建带有新版本的提供程序版本约束的versions.tf,即:

    terraform {
        required_providers {
            azurerm = {
                source = "hashicorp/azurerm"
                version = "~> 1.44"
            }
        }
        required_version = ">= 0.13"
    }
    
  2. 现在,将source = "hashicorp/azurerm"更改为source = "-/azurerm"。这应该使terraform使用旧的提供程序版本。

对于AWS提供程序,您应该具有非常相似的内容,但提供程序的名称和版本不同。