【问题标题】:Terraform lambda_function_association for CloudFront as optional list within a module将 CloudFront 的 Terraform lambda_function_association 作为模块中的可选列表
【发布时间】:2019-02-11 15:13:55
【问题描述】:

我们将静态堆栈(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

提前致谢!

【问题讨论】:

  • 你找到解决办法了吗?
  • @fboulay 还没有,这还在功能分支中,目前没有时间进一步调查。

标签: aws-lambda amazon-cloudfront terraform terraform-provider-aws


【解决方案1】:

我最近偶然发现了同样的问题。这是由terraform limitation 引起的,它阻止我们将动态值传递给模块内的嵌套块。

我发现的唯一解决方法是复制资源声明并根据count 变量中的条件创建资源之一(在此处传递静态变量,例如associate_lambda_function)。

您可以在gitlab snippet 中找到更多详细信息和示例

【讨论】:

  • 谢谢!使用 count 当然可以解决这些限制。
猜你喜欢
  • 2019-05-11
  • 1970-01-01
  • 2021-03-17
  • 2021-01-20
  • 2021-11-07
  • 2021-07-08
  • 1970-01-01
  • 1970-01-01
  • 2017-07-26
相关资源
最近更新 更多