如何将AWS报警ARN收集到Terraform中的字符串中,以便在CloudWatch仪表板创建JSON中使用?
我正在使用Terraform创建一组CloudWatch警报,如下所示:如何将AWS报警ARN收集到Terraform中的字符串中,以便在CloudWatch仪表板创建JSON中使用?,terraform,amazon-cloudwatch,terraform-provider-aws,cloudwatch-alarms,Terraform,Amazon Cloudwatch,Terraform Provider Aws,Cloudwatch Alarms,我正在使用Terraform创建一组CloudWatch警报,如下所示: resource "aws_cloudwatch_metric_alarm" "lambda_concurrent_executions" { for_each = toset(var.function_names) alarm_name = "${each.key}-concurrent-executions" alarm_des
resource "aws_cloudwatch_metric_alarm" "lambda_concurrent_executions" {
for_each = toset(var.function_names)
alarm_name = "${each.key}-concurrent-executions"
alarm_description = "The number of function instances that are processing events."
namespace = "AWS/Lambda"
metric_name = "ConcurrentExecutions"
comparison_operator = "GreaterThanOrEqualToThreshold"
statistic = "Sum"
period = "60"
evaluation_periods = "1"
threshold = "100"
treat_missing_data = "ignore"
dimensions = {
FunctionName = each.key
}
alarm_actions = var.alarm_actions
ok_actions = var.alarm_actions
}
因此,它对每个函数名列表使用
接下来,我需要创建一个CloudWatch仪表板。它显然是通过提供具有相关名称()的JSON创建的:
资源“aws\u cloudwatch\u仪表板”“主”{
dashboard\u name=“我的仪表板”
Dashbody=您需要一个用于aws\u cloudwatch\u metric\u alarm
资源上的循环
我用以下方法模拟了您的设置:
variable "function_names" {
type = list(string)
default = ["fun-1", "fun-2", "fun-3"]
}
resource "null_resource" "lambda_concurrent_executions" {
for_each = toset(var.function_names)
triggers = {
function_name = each.key
}
}
然后,类似这样的内容使我能够为每个
生成的资源循环使用by:
join(", ", [for i in null_resource.lambda_concurrent_executions : format("\"%s\"", i.id)])
因此,对于您的示例,您需要警报ARN的部分将变成:
"alarms": [${join(", ", [for a in aws_cloudwatch_metric_alarm.lambda_concurrent_executions : format("\"%s\"", a.arn)])}]
(顺便说一句,它应该也可以使用,但我只能使用传统的for
-循环。)
"alarms": [${join(", ", [for a in aws_cloudwatch_metric_alarm.lambda_concurrent_executions : format("\"%s\"", a.arn)])}]