【发布时间】:2018-11-21 22:22:19
【问题描述】:
我正在为设置 ELB 的 Elastic Beanstalk 应用程序设置 Terraform 配置。我们希望有一个 cloudwatch 警报,当 ELB 收到太多 5XX 错误时触发。我正在尝试从 EB 环境传递 ELB ARN,但它失败并显示以下消息:
value of 'count' cannot be computed
我知道这是 Terraform 的一个常见问题,例如https://github.com/hashicorp/terraform/issues/10857我真的想不出一个解决方法。我们正在尝试使这个 ELB cloudwatch 警报模块通用,所以我不能真正硬编码 ELB 的数量。
这是我正在使用的代码:
locals {
elb_count = "${length(var.load_balancer_arns)}"
}
resource aws_cloudwatch_metric_alarm "panic_time" {
count = "${local.elb_count}"
alarm_name = "${var.application_name}-panic-time"
comparison_operator = "GreaterThanThreshold"
evaluation_periods = "1"
metric_name = "HTTPCode_ELB_5XX_Count"
namespace = "AWS/ELB"
period = "60"
statistic = "Sum"
threshold = "${var.max_5xx_errors}"
dimensions {
LoadBalancer = "${element(var.load_balancer_arns, count.index)}"
}
alarm_description = "SNS if we start getting a lot of 500 errors"
alarm_actions = ["${aws_sns_topic.panic_time.arn}"]
}
resource aws_sns_topic "panic_time" {
name = "${var.application_name}-panic-time"
}
resource aws_sns_topic_policy "panic_time" {
arn = "${aws_sns_topic.panic_time.arn}"
policy = "${data.aws_iam_policy_document.panic_time_sns.json}"
}
data aws_iam_policy_document "panic_time_sns" {
statement {
actions = [
"SNS:Publish",
]
resources = [
"${aws_sns_topic.panic_time.arn}",
]
principals {
type = "Service"
identifiers = ["events.amazonaws.com"]
}
}
}
我从 main.tf 中的环境传入负载均衡器:
load_balancer_arns = "${module.environment.load_balancers}"
(load_balancers 输出如下所示:)
output load_balancers {
value = "${aws_elastic_beanstalk_environment.main.load_balancers}"
}
【问题讨论】:
-
您能显示
aws_elastic_beanstalk_environment.main.load_balancers资源吗?当您在输出中返回值时,您似乎缺少.count。 -
main.load_balancers 是一个列表。我正在使用 length() 来确定计数。
-
我假设您返回的列表是以某种方式计算的。你能把它添加到问题中吗?
-
它来自 beanstalk 环境 load_balancers 输出:"${aws_elastic_beanstalk_environment.main.load_balancers}" 这是默认的 Terraform 输出 terraform.io/docs/providers/aws/r/…
标签: amazon-web-services terraform