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

如何用CloudShell按可用区筛选实例以自动化CloudWatch仪表盘创建?

解决方案

1. 按可用区筛选提取EC2实例ID

先用aws ec2 describe-instances命令结合筛选器指定目标可用区,再用jq提取实例ID列表,彻底避免手动复制操作:

# 替换为你的目标可用区,比如us-east-1a
TARGET_AZ="us-east-1a"
# 获取该AZ下所有运行中的EC2实例ID
INSTANCE_IDS=$(aws ec2 describe-instances \
  --filters "Name=availability-zone,Values=$TARGET_AZ" "Name=instance-state-name,Values=running" \
  --query 'Reservations[].Instances[].InstanceId' \
  --output text)

这里额外加入了instance-state-name=running的筛选条件,只抓取运行中的实例,可根据实际需求调整或移除。

2. 循环生成CloudWatch小部件并创建仪表盘

用shell循环遍历实例ID,批量生成指标小部件,最后组合成完整的仪表盘JSON提交到AWS:

# 定义仪表盘名称
DASHBOARD_NAME="EC2-Metrics-by-AZ"
# 初始化小部件数组
WIDGETS="[]"

# 遍历每个实例ID
for INSTANCE_ID in $INSTANCE_IDS; do
  # 生成单个实例的CPU使用率小部件JSON(可修改指标类型)
  WIDGET=$(cat <<EOF
{
  "type": "metric",
  "x": 0,
  "y": 0,
  "width": 6,
  "height": 6,
  "properties": {
    "metrics": [
      ["AWS/EC2", "CPUUtilization", "InstanceId", "$INSTANCE_ID"]
    ],
    "period": 300,
    "stat": "Average",
    "title": "$INSTANCE_ID - CPU Utilization"
  }
}
EOF
  )
  # 将小部件合并到数组(依赖jq工具,CloudShell默认预装)
  WIDGETS=$(echo "$WIDGETS" | jq --argjson widget "$WIDGET" '. += [$widget]')
done

# 构建完整的仪表盘JSON结构
DASHBOARD_JSON=$(cat <<EOF
{
  "widgets": $WIDGETS
}
EOF
)

# 创建或更新CloudWatch仪表盘
aws cloudwatch put-dashboard \
  --dashboard-name "$DASHBOARD_NAME" \
  --dashboard-body "$DASHBOARD_JSON"

3. 跨账户适配

切换AWS账户时,只需确保当前AWS CLI配置指向目标账户(可通过aws configure switchrole或设置AWS_PROFILE环境变量切换),无需手动修改任何实例ID,脚本会自动拉取目标AZ下的实例数据。

可选调整

  • 可修改小部件的指标类型(比如内存使用率、磁盘IO)、布局参数(x/y/width/height)、统计周期等。
  • 若需同时处理多个可用区,可嵌套循环遍历AZ列表(比如TARGET_AZS=("us-east-1a" "us-east-1b"))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 17:38:16