【问题标题】:Terraform: ignore changes to a certain environment variableTerraform:忽略对某个环境变量的更改
【发布时间】:2021-08-08 13:52:32
【问题描述】:

我有一个使用 terraform 创建的 AWS Lambda 函数。代码更改是从我们的 CI 服务器自动部署的,并且 commit-sha 作为环境变量传递 (GIT_COMMIT_HASH) - 所以这会改变 Terraform 范围之外的 Lambda 函数(因为人们在问。 ..).

到目前为止效果很好。但是现在我想更新函数的 node-version 并且 terraform 尝试将 env var 重置为 "unknown" 的初始值。

我尝试使用 ignore_changes 块,但无法让 terraform 忽略其他地方所做的更改...

resource "aws_lambda_function" "test" {
  filename      = data.archive_file.helloworld.output_path
  function_name = "TestName_${var.environment}"
  role          = aws_iam_role.test.arn
  handler       = "src/index.handler"

  runtime = "nodejs14.x"
  timeout = 1
  memory_size = 128

  environment {
    variables = {
      GIT_COMMIT_HASH = "unknown"
    }
  }

  lifecycle {
    ignore_changes = [
      environment.0.variables["GIT_COMMIT_HASH"],
    ]
  }
}

这可能吗?如何引用变量?

** 编辑 **

计划输出如下所示:

# aws_lambda_function.test will be updated in-place
  ~ resource "aws_lambda_function" "test" {
        # ... removed some lines

        source_code_size               = 48012865
        tags                           = {}
        timeout                        = 1
        version                        = "12"

      ~ environment {
          ~ variables = {
              ~ "GIT_COMMIT_HASH" = "b7a77d0" -> "unknown"
            }
        }

        tracing_config {
            mode = "PassThrough"
        }
    }

【问题讨论】:

  • “无法让 terraform 忽略其他地方所做的更改” - 你是什么意思?有什么错误吗?
  • @Marcin CI 服务器将 lambda 的 env var 更新为当前的 git sha,但我的 terraform 脚本不知道这一点,因此它想将其更改回 "unknown"。我希望 tf 脚本忽略此更改并仅从 12->14 更新节点版本
  • 计划输出是什么样的?
  • @ydaetskcoR 添加了输出
  • 忽略environment.0.variables(最后没有变量名)适用于所有环境变量,但我只想忽略GIT_COMMIT_HASH ...到目前为止还没有运气

标签: terraform terraform-provider-aws terraform0.12+


【解决方案1】:

我尝试复制这个问题,并且在我的测试中它完全按预期工作。我只能怀疑您使用的是旧版本的 TF,出现此问题。已经报告了许多关于 ignore_changes 限制的 GitHub 问题。例如,hereherehere

我使用Terraform v0.15.3aws v3.31.0 进行了测试,我可以确认ignore_changes 可以正常工作。由于这是 TF 内部问题,据我所知,解决问题的唯一方法是升级您的 TF。

【讨论】:

  • “按预期”是指它忽略了对 GIT_COMMIT_HASH var 的更改?将不得不检查我使用的是哪个版本...
  • @PhilippKyeck 是的。 GIT_COMMIT_HASH 在我的测试中被忽略了。
  • 是的,这行得通!非常感谢。因为我正在测试不同的语法,所以我仍然有 environment.0.variables.GIT_COMMIT_HASH 而不是 environment.0.variables["GIT_COMMIT_HASH"] 并且第一个不工作而第二个工作正常!
  • 嘿@Marcin 我想使用ignore_changes 让lambda 忽略外部对event_source_mapping 所做的UUID 更改,这可能吗?我找不到合适的文档。
猜你喜欢
  • 1970-01-01
  • 2012-09-05
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 2020-02-03
  • 2021-10-15
  • 2017-12-14
相关资源
最近更新 更多