如何解决升级到0.13后,如何修复Terraform不支持的属性“ ses_smtp_password”?
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
时创建了新的访问密钥,这非常耗时,因为我必须更改所有应用程序中的所有访问密钥。有解决此问题的更好方法吗?
解决方法
更新我的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
,
此错误与您升级到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
密码。
我也正好面对这个问题,并想提供一种不需要将状态混为一谈的解决方案。
解决方案是在升级到terraform 0.13之前将AWS提供程序升级到〜> 3.0。这导致将ses_smtp_password
字段从状态中删除,然后可以毫无问题地升级到Terraform 0.13。
不幸的是,我不知道它是如何工作的,我猜测TF 0.13发生了变化,因为TF 0.12使用的是与0.13使用的提供程序相同的版本,所以导致删除不推荐使用的属性存在异常。
,我与azurerm
提供程序有相同的问题。它固定在版本~> 1.44
上,突然更新到terraform 0.13之后,unsupported attribute
错误开始出现。
为我解决了什么问题(无需升级提供程序):
-
运行
terraform 0.13upgrade
-这将创建带有新版本的提供程序版本约束的versions.tf
,即:terraform { required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 1.44" } } required_version = ">= 0.13" }
-
现在,将
source = "hashicorp/azurerm"
更改为source = "-/azurerm"
。这应该使terraform使用旧的提供程序版本。
对于AWS提供程序,您应该具有非常相似的内容,但提供程序的名称和版本不同。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。