AWS EC2 Auto Scaling 自動擴展設定

AWS EC2 Auto Scaling Configuration and Management

Auto Scaling 概述與使用情境

AWS EC2 Auto Scaling 是一項強大的服務,可根據應用程式需求自動調整 EC2 執行個體數量。透過 Auto Scaling,您可以確保應用程式在需求高峰時擁有足夠的運算資源,並在需求降低時自動縮減資源以節省成本。

常見使用情境

  • 流量波動的網站應用程式:電商網站在促銷期間流量激增
  • 批次處理工作負載:根據佇列深度自動擴展處理能力
  • 開發與測試環境:在非工作時間自動縮減資源
  • 高可用性架構:確保最低執行個體數量以維持服務可用性

Auto Scaling 元件

Auto Scaling 由三個主要元件組成:

1. 啟動範本 (Launch Template)

啟動範本定義了 EC2 執行個體的配置,包括 AMI、執行個體類型、安全群組、金鑰對等設定。

2. Auto Scaling 群組 (Auto Scaling Group)

Auto Scaling 群組管理一組 EC2 執行個體,定義最小、最大和期望的執行個體數量。

3. 擴展政策 (Scaling Policy)

擴展政策決定何時以及如何調整執行個體數量。

建立啟動範本 (Launch Template)

首先,我們需要建立一個啟動範本來定義執行個體配置。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 建立啟動範本
aws ec2 create-launch-template \
    --launch-template-name my-web-app-template \
    --version-description "Web application server v1" \
    --launch-template-data '{
        "ImageId": "ami-0abcdef1234567890",
        "InstanceType": "t3.medium",
        "KeyName": "my-key-pair",
        "SecurityGroupIds": ["sg-0123456789abcdef0"],
        "UserData": "IyEvYmluL2Jhc2gKeXVtIHVwZGF0ZSAteQp5dW0gaW5zdGFsbCAteSBodHRwZApzeXN0ZW1jdGwgc3RhcnQgaHR0cGQKc3lzdGVtY3RsIGVuYWJsZSBodHRwZA==",
        "TagSpecifications": [{
            "ResourceType": "instance",
            "Tags": [{"Key": "Name", "Value": "WebServer"}]
        }]
    }'

查看啟動範本

1
2
3
4
5
6
# 列出所有啟動範本
aws ec2 describe-launch-templates

# 查看特定啟動範本的詳細資訊
aws ec2 describe-launch-template-versions \
    --launch-template-name my-web-app-template

建立 Auto Scaling 群組

接下來,使用啟動範本建立 Auto Scaling 群組。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 建立 Auto Scaling 群組
aws autoscaling create-auto-scaling-group \
    --auto-scaling-group-name my-web-app-asg \
    --launch-template LaunchTemplateName=my-web-app-template,Version='$Latest' \
    --min-size 2 \
    --max-size 10 \
    --desired-capacity 2 \
    --vpc-zone-identifier "subnet-0123456789abcdef0,subnet-0fedcba9876543210" \
    --health-check-type ELB \
    --health-check-grace-period 300 \
    --tags Key=Environment,Value=Production,PropagateAtLaunch=true

查看 Auto Scaling 群組狀態

1
2
3
4
5
6
# 查看 Auto Scaling 群組
aws autoscaling describe-auto-scaling-groups \
    --auto-scaling-group-names my-web-app-asg

# 查看執行個體狀態
aws autoscaling describe-auto-scaling-instances

設定擴展政策

Auto Scaling 提供三種主要的擴展政策類型。

目標追蹤擴展政策 (Target Tracking Scaling)

最簡單且推薦的擴展方式,自動調整以維持目標指標值。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 建立 CPU 使用率目標追蹤政策
aws autoscaling put-scaling-policy \
    --auto-scaling-group-name my-web-app-asg \
    --policy-name cpu-target-tracking-policy \
    --policy-type TargetTrackingScaling \
    --target-tracking-configuration '{
        "PredefinedMetricSpecification": {
            "PredefinedMetricType": "ASGAverageCPUUtilization"
        },
        "TargetValue": 50.0,
        "ScaleOutCooldown": 300,
        "ScaleInCooldown": 300
    }'

步進擴展政策 (Step Scaling)

根據警報嚴重程度進行不同幅度的擴展。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 建立步進擴展政策
aws autoscaling put-scaling-policy \
    --auto-scaling-group-name my-web-app-asg \
    --policy-name step-scaling-policy \
    --policy-type StepScaling \
    --adjustment-type ChangeInCapacity \
    --step-adjustments '[
        {"MetricIntervalLowerBound": 0, "MetricIntervalUpperBound": 20, "ScalingAdjustment": 1},
        {"MetricIntervalLowerBound": 20, "MetricIntervalUpperBound": 40, "ScalingAdjustment": 2},
        {"MetricIntervalLowerBound": 40, "ScalingAdjustment": 3}
    ]' \
    --metric-aggregation-type Average

簡單擴展政策 (Simple Scaling)

最基本的擴展政策,每次調整固定數量的執行個體。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 建立向外擴展政策
aws autoscaling put-scaling-policy \
    --auto-scaling-group-name my-web-app-asg \
    --policy-name scale-out-policy \
    --scaling-adjustment 2 \
    --adjustment-type ChangeInCapacity \
    --cooldown 300

# 建立向內縮減政策
aws autoscaling put-scaling-policy \
    --auto-scaling-group-name my-web-app-asg \
    --policy-name scale-in-policy \
    --scaling-adjustment -1 \
    --adjustment-type ChangeInCapacity \
    --cooldown 300

動態擴展與排程擴展

排程擴展 (Scheduled Scaling)

適用於可預測的流量模式,例如每日尖峰時段。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 設定每日上午 9 點擴展
aws autoscaling put-scheduled-update-group-action \
    --auto-scaling-group-name my-web-app-asg \
    --scheduled-action-name scale-out-morning \
    --recurrence "0 9 * * *" \
    --desired-capacity 5

# 設定每日晚上 10 點縮減
aws autoscaling put-scheduled-update-group-action \
    --auto-scaling-group-name my-web-app-asg \
    --scheduled-action-name scale-in-night \
    --recurrence "0 22 * * *" \
    --desired-capacity 2

健康檢查設定

Auto Scaling 支援 EC2 和 ELB 兩種健康檢查類型。

1
2
3
4
5
# 更新健康檢查設定
aws autoscaling update-auto-scaling-group \
    --auto-scaling-group-name my-web-app-asg \
    --health-check-type ELB \
    --health-check-grace-period 300

健康檢查注意事項

  • EC2 健康檢查:僅檢查執行個體是否正在運行
  • ELB 健康檢查:檢查應用程式是否正常回應請求
  • 健康檢查寬限期:新執行個體啟動後,在此期間內不會被標記為不健康

與 ALB 整合

將 Auto Scaling 群組與 Application Load Balancer 整合。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 建立目標群組
aws elbv2 create-target-group \
    --name my-web-app-tg \
    --protocol HTTP \
    --port 80 \
    --vpc-id vpc-0123456789abcdef0 \
    --health-check-path /health \
    --health-check-interval-seconds 30

# 將 Auto Scaling 群組附加至目標群組
aws autoscaling attach-load-balancer-target-groups \
    --auto-scaling-group-name my-web-app-asg \
    --target-group-arns arn:aws:elasticloadbalancing:ap-northeast-1:123456789012:targetgroup/my-web-app-tg/1234567890abcdef

監控與故障排除

查看擴展活動

1
2
3
4
# 查看擴展活動歷史
aws autoscaling describe-scaling-activities \
    --auto-scaling-group-name my-web-app-asg \
    --max-items 10

常見問題排除

  1. 執行個體無法啟動:檢查啟動範本配置、子網路設定、安全群組規則
  2. 擴展緩慢:調整冷卻時間或使用步進擴展政策
  3. 健康檢查失敗:確認應用程式正確回應健康檢查端點

CloudWatch 指標監控

1
2
3
4
5
6
7
8
9
# 查看 Auto Scaling 群組指標
aws cloudwatch get-metric-statistics \
    --namespace AWS/AutoScaling \
    --metric-name GroupTotalInstances \
    --dimensions Name=AutoScalingGroupName,Value=my-web-app-asg \
    --start-time 2023-12-24T00:00:00Z \
    --end-time 2023-12-24T23:59:59Z \
    --period 3600 \
    --statistics Average

最佳實踐

  1. 使用多個可用區域:確保高可用性
  2. 設定適當的冷卻時間:避免過度擴展或縮減
  3. 配置通知:透過 SNS 接收擴展事件通知
  4. 定期審查擴展政策:根據實際流量模式調整

參考資料

comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy