使用 aws_kms_key 强制实例替换

Using aws_kms_key forces instance replacement

我有一个奇怪的问题,我创建了“aws_kms_keys”,它很好并且工作正常,然后我使用以下代码将创建的密钥分配给我的 ebs_block:

  #root disk
  root_block_device {
    volume_size = "120"
    volume_type = "gp2"
    encrypted   ="true"
    kms_key_id  = aws_kms_key.aws-wm-wmad-prod.key_id
    delete_on_termination = true
  }

然而,如果我 运行 terraform apply 它将尝试在创建后替换整个实例。 ~ kms_key_id = "arn:aws:kms:us-east-1:1433:key/9c93acdd-etc" -> "9c93acdd-etc" # forces replacement 我正在使用 TF 版本 0.14.7 和提供程序版本 3.72.0 很好奇这个问题的解决方法或修复方法是什么?或者我应该升级到可能解决这个问题的最新 TF?

我使用以下方法找到了解决方法:

 lifecycle {
    ignore_changes = [root_block_device[0].kms_key_id]
  }

然而这很烦人,哈哈,不知道为什么这是必需的,但想要一些输入。

对此没有解决方法或修复方法。这就是它的工作原理。对 KmsKeyId 的更改需要 替换 ,您无法更改此行为。

因此您必须从给定的 EBS 卷备份数据,进行替换,然后将数据复制回来。

如果您添加:

  lifecycle {
      ignore_changes = [
        root_block_device[0].kms_key_id,
        security_groups
      ]
  }

最初的创作会发生,但更新不会强制Destroy/Create 这允许更新实例,而无需强制替换。即:标签等。不幸的是,它会阻止更新 SG。

我有一个部署 50 多个虚拟机的脚本;它并不总是在第一次尝试时就成功。希望这有助于...