DAY3 - 监控与伸缩
发布: (2026年1月31日 GMT+8 08:20)
4 min read
原文: Dev.to
Source: Dev.to
概览
今天的动手实验涵盖使用应用负载均衡器 (ALB)、自动伸缩组 (ASG) 和 CloudWatch 对 EC2 实例进行监控和伸缩。
网络设置
- 子网:使用第 1 天动手实验中创建的公共子网。
- 路由:向关联私有子网的私有路由表添加默认路由,以便这些子网中的实例能够访问互联网。
安全组
ALB 安全组
- 入方向:HTTP 80,来源
0.0.0.0/0 - 出方向:全部流量(默认)
EC2 安全组
- 入方向:HTTP 80,来源上述 ALB 安全组
- 出方向:全部流量(默认)
目标组
- 目标类型:实例
启动模板
为 ASG 创建启动模板,使用以下设置:
- AMI:Amazon Linux 2023
- 用户数据:
#!/bin/bash
set -e
dnf -y update
dnf -y install nginx
systemctl enable --now nginx
TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" \
-H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
INSTANCE_ID=$(curl -s -H "X-aws-ec2-metadata-token: $TOKEN" \
http://169.254.169.254/latest/meta-data/instance-id)
cat > /usr/share/nginx/html/index.html <<EOF
## Day3: ALB + ASG (Private EC2)
InstanceId: ${INSTANCE_ID}
EOF
自动伸缩组 (ASG)
- 启动模板:使用上面创建的模板。
- 方案:面向互联网
创建 ASG 后,验证 ALB 的 DNS 名称能够加载显示实例 ID 的页面。确保目标组状态为 healthy(健康)。
伸缩策略
- 在 ASG 控制台,进入 Automatic scaling → Create dynamic scaling policy。
- 通过 SSM 连接到 EC2 实例(如第 2 天所示),运行以下命令在十分钟内产生 CPU 负载:
sudo dnf -y install stress-ng
cd /tmp
stress-ng --cpu 2 --timeout 10m
- 等待几分钟,观察 ASG 仪表板中的伸缩活动。
清理顺序
按以下顺序删除资源,以避免依赖错误:
- 自动伸缩组
- 启动模板
- ALB 和目标组
- 子网、路由表和 NAT 资源
- 安全组
关键考试要点
- NAT 网关:托管服务;自动关联弹性 IP(EIP)。
- NAT 实例:带有 EIP 或公网 IP 的 EC2 实例;需要自行管理故障转移和负载均衡。
ALB 与 NLB 对比
| 功能 | ALB | NLB |
|---|---|---|
| 协议 | HTTP/HTTPS(第 7 层) | TCP、TLS、UDP(第 4 层) |
| 路由 | 基于 URL、主机、路径的路由;可指向 Lambda 函数;可与 ACM 证书集成 | 高吞吐、静态 IP(EIP);适用于对延迟敏感的工作负载(如金融系统) |
| 使用场景 | 需要 URL 路由或 SSL 终止的 Web 应用 | 高速、低延迟流量或需要固定 IP 地址的服务 |
资源伸缩
- EC2:ASG + ALB/NLB + 伸缩指标(CPU、请求数等)
- Lambda:并发限制,由事件源(SQS、Kinesis 等)驱动
- ECS/EKS:服务自动伸缩
期待在第 4 天动手实验中再见!