我们将静态堆栈(CloudFront,S3等)定义为用于不同项目的可配置模块。现在,其中一些需要边缘lambda,我也想使它们可配置(和可选(!))。
我们正在使用以下模块:
module "static" {
..
lambda_function_associations = [
{
event_type = "viewer-request"
lambda_arn = "${aws_lambda_function.onex_lambda_viewer_req.qualified_arn}"
},
{
event_type = "viewer-response"
lambda_arn = "${aws_lambda_function.onex_lambda_viewer_res.qualified_arn}"
},
]
..
}
,CloudFront的默认缓存行为定义如下:
default_cache_behavior {
..
lambda_function_association = ["${var.lambda_function_associations}"]
..
}
以及我们模块中的变量:
variable "lambda_function_associations" {
type = "list"
default = []
}
应用此堆栈,我得到:
Error: module.static.aws_cloudfront_distribution.web: "default_cache_behavior.0.lambda_function_association.0.event_type": required field is not set
Error: module.static.aws_cloudfront_distribution.web: "default_cache_behavior.0.lambda_function_association.0.lambda_arn": required field is not set
没有办法使它们可选地工作吗?我真的不想在添加边缘lambda时复制整个堆栈。
显然,这样的事情适用于lb_health_check配置块: https://github.com/hashicorp/terraform/issues/17292#issuecomment-393984861
谢谢!
答案 0 :(得分:1)
我最近偶然发现了同一个问题。这是由terraform limitation引起的,它阻止了我们将动态值传递给模块内的嵌套块。
我发现的唯一解决方法是复制资源声明并根据count
变量中的条件创建一个资源(在此处传递静态变量,例如associate_lambda_function
)。
您可以在此gitlab snippet
中找到更多详细信息和示例