首页 > 解决方案 > Terraform 创建具有多个目标的 Cloudwatch 规则

问题描述

来自 Terraform 文档 - https://www.terraform.io/docs/providers/aws/r/cloudwatch_event_target.html

我没有看到将多个目标映射到同一个 Cloudwatch 规则的选项。它只需要一个arn接受一个资源的字段。我正在尝试将 5 个 Lambda 映射到相同的 Cloudwatch 规则。Terraform 是否支持这一点?

编辑:我怎样才能只附加 5 个 lambda?如果我创建了 15 个 lambda,我想将 5 个附加到 3 个 cloudwatch 规则。

标签: amazon-web-servicesterraformamazon-cloudwatchterraform-provider-awsamazon-cloudwatchlogs

解决方案


得到它的工作!当我将目标分配给规则时,我必须将规则数除以 5。这大概是它的样子:

resource "aws_cloudwatch_event_rule" "arule" {
  count       = "${ceil(length(var.lambda_arns) / 5.0)}"  // Needs to be 5.0 to force float computation
  name        = "${var.rule_name}${format("-%d", count.index)}"
  is_enabled  = true
}

resource "aws_cloudwatch_event_target" "atarget" {
  depends_on = ["aws_cloudwatch_event_rule.arule"]
  count = "${length(var.lambda_arns)}"
  rule  = "${aws_cloudwatch_event_rule.arule.*.name[count.index / 5]}"
  arn   = "${var.lambda_arns[count.index]}"
}

我根据 lambda 的数量创建了事件规则(即,如果有 10 个 lambda,则创建 2 个规则)。

我根据 lambda 的数量创建了目标(即,如果有 10 个 lambda,则创建 10 个目标)。

count.index我通过将 5 除以5(用于确定规则计数的相同逻辑)在规则中按比例分配目标。


推荐阅读