Terraform lambda_function_association для CloudFront как необязательный список в модуле - PullRequest
0 голосов
/ 06 сентября 2018

у нас есть статический стек (CloudFront, S3, ..), определенный как настраиваемый модуль для различных проектов. Теперь некоторые из них нуждаются в граничных лямбдах, и я тоже хотел сделать их настраиваемыми (и необязательными (!)).

Мы используем модуль следующим образом:

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

Нет ли способа заставить их работать опционально? Я действительно не хочу дублировать весь стек при добавлении лямбда-ребер.

Видимо, что-то подобное работает для блоков конфигурации lb_health_check: https://github.com/hashicorp/terraform/issues/17292#issuecomment-393984861

Заранее спасибо!

1 Ответ

0 голосов
/ 16 января 2019

Я недавно наткнулся на ту же проблему. Это вызвано ограничением terraform , которое не позволяет нам передавать динамические значения во вложенный блок внутри модуля.

Единственный обходной путь, который я нашел, - это дублирование объявления ресурса и создание одного из ресурсов на основе условия в переменной count (укажите здесь статическую переменную, например, associate_lambda_function).

Вы можете найти более подробную информацию и пример в этом фрагменте gitlab

...