如何修复Terraform不支持的属性;ses“smtp密码”;升级到0.13之后?

如何修复Terraform不支持的属性;ses“smtp密码”;升级到0.13之后?,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,升级后,当运行地形平面图时,我收到如下消息: 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:

升级后,当运行
地形平面图时,我收到如下消息:

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".

我修复它的方法是删除状态(
terraformstate rm aws\u iam\u access\u key.backup
)。然而,当我运行
terraformapply
时,它创建了新的访问密钥,这很耗时,因为我必须更改所有应用程序中的所有访问密钥。是否有更好的方法解决此问题?

此错误与您升级到Terraform 0.13无关,实际上是由于从AWS Terraform provider的2.x版升级到3.x版。如中所述,您需要从使用
ses\u smtp\u密码切换到
ses\u smtp\u密码\u v4

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


如您所见,您需要从Terraform状态中删除旧密码,并让Terraform生成新的
ses\u smtp\u password\u v4
密码。

此错误与您升级到Terraform 0.13无关,实际上是由于从AWS Terraform provider的2.x版升级到3.x版。如中所述,您需要从使用
ses\u smtp\u密码切换到
ses\u smtp\u密码\u v4

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


如您所见,您需要从Terraform状态中删除旧密码,并让Terraform生成新的
ses\u smtp\u password\u v4
密码。

我在更新aws Terraform提供程序时遇到了同样的
不受支持的属性“ses\u smtp\u password”
问题,并且能够通过手动下载和修改状态来修复它

terraform state pull > state.json
现在编辑
state.json

  • 删除带有
    ses\u smtp\u密码的任何行
  • 增加
    serial
    属性(例如
    “serial”:21,
    ->
    “serial”:22,
  • 拯救
可选,但使其成为您不会意外提交状态文件

rm state.json 

更新aws terraform提供程序时,我遇到了同样的
不受支持的属性“ses_smtp_password”
问题,并且能够通过手动下载和修改状态来修复它

terraform state pull > state.json
现在编辑
state.json

  • 删除带有
    ses\u smtp\u密码的任何行
  • 增加
    serial
    属性(例如
    “serial”:21,
    ->
    “serial”:22,
  • 拯救
可选,但使其成为您不会意外提交状态文件

rm state.json 

我也只是面对这个问题,并希望提供一个解决方案,不需要与国家捣乱

解决方案是在升级到terraform 0.13之前将AWS提供程序升级到~>3.0。这导致
ses\u smtp\u password
字段从状态中删除,从而允许升级到terraform 0.13而不会出现问题


不幸的是,我不理解这是如何工作的,我猜TF 0.13中有一个变化,这会导致在删除不推荐的属性时出现异常,因为TF 0.12使用的是0.13使用的同一版本的提供程序。

我也刚刚面临这个问题,希望提供一个不需要处理的解决方案国家

解决方案是在升级到terraform 0.13之前将AWS提供程序升级到~>3.0。这导致
ses\u smtp\u password
字段从状态中删除,从而允许升级到terraform 0.13而不会出现问题


不幸的是,我不理解这是如何工作的,我猜TF 0.13中有一个变化,这导致了在删除不推荐的属性时出现异常,因为TF 0.12使用的是与0.13使用的提供程序相同的版本。

我与
azurerm
提供程序有相同的问题。它被固定到版本
~>1.44
,在更新到terraform 0.13之后,
不受支持的属性
错误开始出现

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

  • 运行
    terraform 0.13upgrade
    -这将创建
    版本。tf
    ,并使用新格式的提供商版本约束,即:

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


  • 对于AWS provider,您应该有一些非常相似的东西,具有不同的提供者名称和版本。

    我对
    azurerm
    提供者也有同样的问题。它被固定到版本
    ~>1.44
    ,在更新到terraform 0.13之后,
    不受支持的属性
    错误开始出现

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

  • 运行
    terraform 0.13upgrade
    -这将创建
    版本。tf
    ,并使用新格式的提供商版本约束,即:

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


  • 对于AWS提供商,您应该有一些非常相似的东西,具有不同的提供商名称和版本。

    Github PR用于删除属性:@mark-b,我应该提到它,但我从未创建至少我知道的ses_smtp_密码。Github PR用于删除属性:@mark-b,我应该提到它,但至少我知道我从未创建过ses_smtp_密码。你是否在任何地方使用/指定了
    ses_smtp_密码
    ?不,它不在我的配置中的任何地方。你是否在任何地方使用/指定了
    ses_smtp_密码
    ?不,它不在我的配置中