更改用于 Terraform 中敏感值的变量而不重建资源

Mar*_*son 5 terraform

我有一个基于变量设置管理员密码的 Terraform 模块

admin_password = "${var.local_admin_password}"
Run Code Online (Sandbox Code Playgroud)

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

admin_password = "${var.local_admin_password != "" ? var.local_admin_password : module.secrets.local_admin_password}"
Run Code Online (Sandbox Code Playgroud)

如果local_admin_password提供它使用它,但如果没有提供,那么它应该从秘密模块中获取密码。

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

有没有办法以 Terraform 识别数据实际上相同而不触发资源更改的方式进行这种更改?

Jar*_*tes 4

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

下面是如何使用它的示例,其中属性“acl”在初始资源创建后将被忽略:

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

  lifecycle {
    ignore_changes = ["acl"]
  }
}
Run Code Online (Sandbox Code Playgroud)

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