我在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
}
问题:该函数不仅在创建("应用"(期间被调用,而且在删除("销毁"(期间也被调用。如何在创建过程中调用它?我想过在 lambda 中检查环境变量(也许 TF 在这里添加了进程的名称或类似的东西(,但我希望有更好的方法。
- 值得检查是否可以在运行 terraform 命令时使用
-var 'lambda_xxx=execute'
选项来检查是否需要执行 terraform 文档 - 使用该变量
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 执行此操作。
现在有更好的替代解决方案来解决这个问题,但在提出问题时还没有。
-
AWS 提供程序中的 Lambda 调用资源:https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lambda_invocation
-
LambdaBased 提供程序中基于 Lambda 的资源:https://registry.terraform.io/providers/thetradedesk/lambdabased/latest/docs/resources/lambdabased_resource
免责声明我是后者的开发人员:如果潜在的问题是通过 lambda 函数管理资源,那么基于 lambda 的资源具有一些专门为实现这一目标而定制的良好功能,但明显的缺点是添加另一个提供程序依赖项。