terraform:销毁期间的 lambda 调用

terraform: lambda invocation during destroy

我在我们的 terraform 构建环境中有 lambda 调用:

data "aws_lambda_invocation" "this" {
  count = var.invocation == "true" ? 1 : 0
  function_name = aws_lambda_function.this.function_name
  input = <<JSON
{
  "Name": "Invocation"
}
JSON
}

问题:该函数不仅在创建 ("apply") 期间被调用,而且在删除 ("destroy") 期间也会被调用。如何仅在创建期间调用它?我考虑过检查 lambda 中的环境变量(也许 TF 在这里添加进程名称或类似的名称),但我希望有更好的方法。

  • 值得检查是否可以使用 -var 'lambda_xxx=execute' 选项,同时 运行 使用 terraform 命令检查是否需要执行 lambda 代码 terraform docs
  • 使用在执行命令时通过命令行传入的变量 lambda_xxx,您可以检查 terraform 代码是否要 运行 lambda 代码。
  • 以下代码仅在计数为 1 时才创建 waf
resource "aws_waf_rule" "wafrule" {
  depends_on  = ["aws_waf_ipset.ipset"]
  name        = "${var.environment}-WAFRule"
  metric_name = "${replace(var.environment, "-", "")}WAFRule"
  count = "${var.is_waf_enabled == "true" ? 1 : 0}"

  predicates {
    data_id = "${aws_waf_ipset.ipset.id}"
    negated = false
    type    = "IPMatch"
  }
}
  • 变量在 variables.tf 文件中声明
variable "is_waf_enabled" {
  type = "string"
  default = "false"
  description = "String value to indicate if WAF/API KEY is turned on or off (true/any_value)"
}
  • 当您 运行 命令时,除 true 之外的任何值都被视为 false,因为我们只是检查字符串是否为 true。
  • 同样,您可以为您的 lambda 执行此操作。