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

Terraform - Encrypting a db instance forces replacement

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

resource "aws_db_instance" "..." {
  ...
}

现在我正在尝试通过添加

来加密该实例
resource "aws_db_instance" "..." {
  ...
  storage_encrypted = true
}

但是我运行terraform plan的时候说要强制更换

# aws_db_instance.... must be replaced
...
~ storage_encrypted                     = false -> true # forces replacement

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

这里没有 Terraform 的错。 RDS 实例最初创建后,您根本无法更改其加密设置。您可以/需要创建当前数据库的快照,复制并加密快照,然后从该快照恢复:https://aws.amazon.com/premiumsupport/knowledge-center/update-encryption-key-rds/

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


从技术上讲,您可以 ignore_changes storage_encrypted 属性 但当然这会导致 terraform 简单地忽略任何存储加密更改。