You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform实现:为每个Lambda生成CloudWatch Dashboard分组监控组件

解决方案:按Lambda分组生成CloudWatch Dashboard布局

核心思路是遍历每个Lambda函数,为其生成独立的标题+指标widget组,再将所有组合并为一维列表,这样就能实现按Lambda分组的布局,而非按指标类型集中排列。

代码示例

1. 定义变量

先声明要监控的Lambda函数列表及通用监控配置:

variable "lambda_functions" {
  type        = list(string)
  description = "List of Lambda function names to monitor"
  default     = ["func-1", "func-2", "func-3"]
}

variable "dashboard_time_range" {
  type        = string
  description = "Time range for dashboard widgets"
  default     = "PT3H"
}

2. 生成按Lambda分组的Widget列表

使用Terraform的for循环和flatten函数,为每个Lambda生成包含标题和三个指标的widget组:

locals {
  # 为单个Lambda生成对应的所有widget
  lambda_widget_groups = [
    for lambda_name in var.lambda_functions : [
      # Markdown标题widget(占满整行12列)
      {
        type = "markdown"
        width = 12
        height = 1
        properties = {
          markdown = "### Lambda Function: *${lambda_name}*"
        }
      },
      # 错误率指标widget(占4列)
      {
        type = "metric"
        width = 4
        height = 6
        properties = {
          metrics = [
            ["AWS/Lambda", "Errors", "FunctionName", lambda_name, { "stat" : "Sum" }]
          ]
          view = "timeSeries"
          stacked = false
          title = "Error Rate"
          period = 60
          timeRange = var.dashboard_time_range
        }
      },
      # 节流率指标widget(占4列)
      {
        type = "metric"
        width = 4
        height = 6
        properties = {
          metrics = [
            ["AWS/Lambda", "Throttles", "FunctionName", lambda_name, { "stat" : "Sum" }]
          ]
          view = "timeSeries"
          stacked = false
          title = "Throttle Rate"
          period = 60
          timeRange = var.dashboard_time_range
        }
      },
      # 持续时间异常指标widget(占4列)
      {
        type = "metric"
        width = 4
        height = 6
        properties = {
          metrics = [
            ["AWS/Lambda", "Duration", "FunctionName", lambda_name, { "stat" : "p95" }]
          ]
          view = "timeSeries"
          stacked = false
          title = "Duration (p95)"
          period = 60
          timeRange = var.dashboard_time_range
        }
      }
    ]
  ]

  # 将二维的widget组列表展平为一维列表,供Dashboard使用
  dashboard_widgets = flatten(local.lambda_widget_groups)
}

3. 创建CloudWatch Dashboard资源

将生成的widget列表传入aws_cloudwatch_dashboard资源:

resource "aws_cloudwatch_dashboard" "lambda_monitoring" {
  dashboard_name = "Lambda-Monitoring-Dashboard"
  dashboard_body = jsonencode({
    widgets = local.dashboard_widgets
  })
}

关键说明

  • 布局控制:通过width参数控制每个widget的宽度(CloudWatch Dashboard总宽度为12列),标题占12列,每个指标widget占4列,三个刚好填满一行。
  • flatten函数:将每个Lambda对应的widget数组(二维列表)展平为一维数组,确保Dashboard能正确识别所有widget的顺序。
  • 可扩展性:如果需要调整指标配置(比如统计方式、时间段),只需修改lambda_widget_groups中的对应参数即可;新增Lambda只需在lambda_functions变量中添加名称。

内容的提问来源于stack exchange,提问作者squareben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:30:53