繁体   English   中英

terraform 资源模块中的两个 for_each

[英]two for_each in terraform resource module

我是 tf. 尝试在资源模块中使用两个 for_each

resource "aws_cloudwatch_event_rule" "event_rule" {
  name                = "${local.service_name}-trigger"
  description         = "Schedule for synthetic tests lambda function"
  for_each = var.cron_schedule
    schedule_expression = each.value.cron_schedule
  for_each = var.enable_event_schedule_trigger
    is_enabled = each.value.enable_event_schedule_trigger
}

resource "aws_cloudwatch_event_target" "target_lambda" {
 target_id = "${local.service_name}"
 arn       = aws_lambda_function.synthetictests.arn
 rule      = aws_cloudwatch_event_rule.event_rule.name
}

但出现以下错误。

The argument "for_each" was already set at lambda_trigers.tf:4,3-11. Each
argument may be set only once.

变量

variable "cron_schedule" {
  type        = list(string)
  description = "Cron schedule of lambda trigger via event bridge"
  default     = []
}

variable "enable_event_schedule_trigger" {
  type    = list(bool)
  default = ["false"]
  description = "flag to enable or disable event trigger. Disabled by 
  default"
}

请建议。

您可以使用zipmap

resource "aws_cloudwatch_event_rule" "schedule_rule" {
  name                = "${local.service_name}-trigger"
  description         = "Schedule for synthetic tests lambda function"

  for_each            = zipmap(var.cron_schedule, var.enable_event_schedule_trigger)

  schedule_expression = each.key
  is_enabled          = each.value

}

更新

由于aws_cloudwatch_event_rule使用, aws_cloudwatch_event_target可能也应该使用它:

resource "aws_cloudwatch_event_target" "target_lambda" {

 for_each = aws_cloudwatch_event_rule.event_rule

 target_id = "${local.service_name}"
 arn       = aws_lambda_function.synthetictests.arn
 rule      = each.value.name
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM