AWS Auto Scaling
- 管理跨多個服務的scaling,可以包含多個EC2 Auto Scaling Group
- Scaling Process * 是可以suspend掉的
- Launch: 啟動EC2
- Terminate: 停止EC2
- HealthCheck: 檢查EC2的健康狀態
- ReplaceUnhealthy: 取代掉不健康的EC2
- AZRebalance: 平均不同AZ中的AutoScalingGroup的機器數量,以提高Availability。但可能會all healthy時候做出Terminate的動作
- AlarmNotification: 從CloudWatch拿到Alarm事件
- ScheduledActions: By Schedule的scaling rule
- AddToLoadBalancer: 機器起來後,確定healthy後,將其加入LoadBalancer後開始進行服務
- Health Check的種類
- EC2 Status Checks
- ELB Health Checks (HTTP)
AWS EC2 Auto Scaling
- 可以跨AZ,但不能跨Region
使用情境
- 預先定義的scale strategy
- 預測scaling (需要與AWS Auto Scaling一起定義)
- 提高Availability
- EC2 叢集達到高平均使用率時,以遞增方式將新的 Amazon EC2 執行個體新增到 ASG
- 設定一個條件,在 CPU 使用率低時,以相同的量遞減移除執行個體
- 用 Amazon CloudWatch 傳送警示以觸發擴展活動,並使用 Elastic Load Balancing (ELB) 將流量分配給 ASG 內的執行個體
- 若負載變化是可預測的,則可透過 Amazon EC2 Auto Scaling 設定排程,以規劃您的擴展活動
- Launch Configuration (啟動組態)
- ASG啟動EC2 Instance時的template
- 可以包含
- AMI ID
- Key Pair
- Security Group
- Block Device Mapping
- 不會啟動超過quota允許數量的EC2
- ASG設定超過quota時,會以quota上限為準
- Auto Scaling balance: Best Practice是將Auto Scaling balance跨AZ
- 縮減規模時
- 需要定義Terminate Policy以決定要自動停掉的是哪些Instance
- 可以對特定Instance啟動terminate protect,可以避免Auto Scaling停掉該Instance
- 若要被Terminate的instance有資料要保存
- 務必存在外部服務如S3, RDS, DynamoDB
- Terminate掉的資料是救不回來的
- 若要被Terminate的instance上有正在服務的user
- EC2 Auto Scaling Group並不支援terminate wait
- 要實現需要透過Route53,Reserve Proxy或Microservice解決
Amazon EC2 Auto Scaling Group (ASG)
- 包含一組特性相似的EC2 instance的邏輯群組
- 刪除ASG會同時停掉該ASG中尚在執行的EC2 instance
- 一個ASG只能有一個Launch Configuration,而且建立後不能修改
- ASG內可以加入quota允許數量的EC2
- 在ASG建立後被啟動的Instance,不會自動將之前instance的資料複製到新的instance
- 在既有的EC2上create ASG時,不會自動建立AMI
- 可以將ASG內的Instance可以設定EC2 Type
- Spot Instance Only: Scale不一定會成功,但能省成本
- Reserved Instance
- On-Daemon Instance
Lifecycle Hooks
- EC2 Auto Scaling的instance啟動或停止時採取行動
- 有兩種:Launch Hook和Terminate Hook
- Launch Hook可以用來在base AMI上安裝所需的軟體環境
- Terminate可以在結束instance前收集資料
Health Check
- EC2 Auto Scaling有自己的health checks機制
- 如果有掛ELB,也可以支援ELB health checks
- 但ELB對EC2 Auto Scaling不是必要的
- 只是有ELB存在的話,使用ELB health check較正確
- 也支援ALB (Application Load Balancer)或NLB (Network Load Balancer)的health check
- EC2 Auto Scaling自帶的Health Check是可以手動觸發的的
- 透過API call: SetInstanceHealth,例如change instance state to UNHEALTHY
- 不是指ELB, ALB, NLB的Health Check
- 可以suspend暫停health check
- 透過API call: SuspendProcesses和ResumeProcess API