无需重建资源即可更改 Terraform 中用于敏感值的变量

无需重建资源即可更改 Terraform 中用于敏感值的变量

我有一个 Terraform 模块,它根据变量设置管理员密码

admin_password = "${var.local_admin_password}"

但是,var.local_admin_password不再是密码的唯一来源。我需要将逻辑更改为以下方式:

admin_password = "${var.local_admin_password != "" ? var.local_admin_password : module.secrets.local_admin_password}"

如果local_admin_password提供,则使用它,但如果是不是然后它应该从秘密模块中获取一个密码。

这对于新的资源。但将其应用于旧资源会触发敏感变量的变化,从而admin_password触发新资源。旧资源都会local_admin_password提供,因此值实际上没有改变。

有没有办法进行这种更改,使 Terraform 识别出数据实际上是相同的,并且不会触发资源更改?

答案1

您可以尝试在特定资源的配置块ignore_changes内使用lifecycle。请注意,这不能在模块级别完成,而只能在每个资源级别完成。

其使用方式如下,其中属性“acl”在初始资源创建后将被忽略:

resource "aws_s3_bucket" "bucket" {
  name = "test-bucket"
  acl  = "private"

  lifecycle {
    ignore_changes = ["acl"]
  }
}

此行为概述如下:https://www.terraform.io/docs/configuration/resources.html#ignore_changes

相关内容