Terraform - 加密数据库实例强制替换

are*_*ler 3 amazon-web-services amazon-rds terraform

我在 AWS 中有一个使用 terraform 创建的 postgres RDS 实例。

resource "aws_db_instance" "..." {
  ...
}
Run Code Online (Sandbox Code Playgroud)

现在我尝试通过添加来加密该实例

resource "aws_db_instance" "..." {
  ...
  storage_encrypted = true
}
Run Code Online (Sandbox Code Playgroud)

但当我运行时terraform plan,它说它将强制更换

# aws_db_instance.... must be replaced
...
~ storage_encrypted                     = false -> true # forces replacement
Run Code Online (Sandbox Code Playgroud)

如何防止 terraform 替换我的数据库实例?

luk*_*302 8

Terraform 在这里没有错。您根本无法在 RDS 实例最初创建后更改其加密设置,不能使用 terraform、不能通过 AWS 控制台或任何 AWS API。
相反,您可以/需要创建当前数据库的快照,复制+加密快照,然后从该快照恢复: https: //aws.amazon.com/premiumsupport/knowledge-center/update-encryption-key-rds/

这将导致数据库停机。terraform 不会自动为您执行此操作,您需要手动执行此操作。恢复数据库后,terraform 不应再尝试替换数据库,因为预期配置现在与实际配置匹配。


从技术上讲,您可以使用ignore_changesstorage_encrypted属性,但这当然会导致 terraform 忽略任何存储加密更改。