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

Posted

技术标签:

【中文标题】Terraform - 加密数据库实例强制替换【英文标题】:Terraform - Encrypting a db instance forces replacement 【发布时间】:2021-12-17 01:36:10 【问题描述】:

我在 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 替换我的数据库实例?

【问题讨论】:

【参考方案1】:

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

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


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

【讨论】:

以上是关于Terraform - 加密数据库实例强制替换的主要内容,如果未能解决你的问题,请参考以下文章

Terraform EC2(根块设备加密错误未能达到目标状态)

text 加密的env var到Terraform aws_secretsmanager_secret文件(带本地的数据对象)

Terraform InvalidParameterCombination:数据库安全组只能与 VPC 数据库实例关联

在 AWS RDS 集群实例上使用 Terraform 预置多个逻辑数据库

使用terraform“数据”时如何重新转动多个对象?

Terraform:运行空资源后如何强制资源更新?