前情提要
最近將一個服務掛上雲端(AWS),使用 EC2 ,
並且實作了 Auto Scaling ,特別紀錄一下。
概觀
以下使用的都是 AWS 的服務
Auto Scaling Group (ASG) :
本篇主角,根據指定的 Policies 與 LC 加開減少機器。Launch Configuration (LC) :
一個 ASG 背後一定要搭配一個 LC,可以說是 ASG 的生命共同體,
用來指定 EC2 的配置,並透過User Data
指定實體起動時所需要執行的工作。
註: 也有使用 Launch Template 的作法,這篇不會討論。Target Group (TG):
由 1 到多個 EC2 實體(instance)組成,用來與 ELB(ALB) 搭配。ALB :
流量負載平衡,與 TG 作為搭配。可以依不同條件轉導到不同 TG
組合零件
這有點像是在玩模型玩具,各個部份的小零件可以組成一個大零件,
再將各個部件結合,完成我所要的功能。
以下是這所需要的各個零件
- Golden Image : 由實際的 EC2 Instance 建立。並包含 Cloud Watch Agent 的配置。
- User Data : Lanuch Configuration 的一個子項目,可以在 EC2 啟動時,執行指定的命令,比如說在 WINDOWS 透過 Powershell 抓取新版程式來建置服務。
- Launch Configuration : 由上述兩個零件 (Gloden Image & User Data) 組成,另外還可以設定 EBS、Plocies 等設定…
- Target Group : 用來存放相關實體(EC2 Instance)的抽象概念, 可以設定 Health Check 來確定實體的健康情況。
- Auto Scaling Group : 透過 Lanuch Configuration 來建立實體,並且可以將實體放入指定的 Target Group 之中。並且可以設定 Policy 來實現 Scaling Out/In.
- ALB : 負載平衡的一種,透過設定,可以將 Request 導到對應的 Target Group。
紀錄
Add CloudWatch Agent
Login EC2 Instance
安裝 CloudWatch Agent
準備一個 Json 檔如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22{
"agent": {
"logfile": "c:\\ProgramData\\Amazon\\AmazonCloudWatchAgent\\Logs\\amazon-cloudwatch-agent.log"
},
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "D:\\logs\\**.log",
"log_group_name": "/MY/Service/Worker",
"log_stream_name": "{instance_id}",
"timezone": "UTC",
"timestamp_format": "%Y-%m-%dT%H:%M:%S"
}
]
}
},
"log_stream_name": "default-log-stream",
"force_flush_interval": 5
}
}開啟 powershell,切換目錄至 AmazonCloudWatchAgent
1
cd "C:\Program Files\Amazon\AmazonCloudWatchAgent"
執行以下語法
1
./amazon-cloudwatch-agent-ctl.ps1 -a fetch-config -m ec2 -c file:yourjsonfile.json -s
站台加入 Health Check
- 加入靜態檔案(ex:check.html)
- IIS Building _80
- 設定 Target Group 的 Health Check (ex:/check.html)
包成 Gloden Image
機器下 ALB
開啟 Ec2LaunchSettings.exe
透過 Ec2LaunchSettings 關機
Waitting Instance Stoped , Create Images
Create Launch Configuration
- Choose AMI
- Choose Instance Type
- Configure details
- Add Storage
- Configure Security Group
- Review
Create Auto Scaling group
- Configure Auto Scaling group details
- Configure scaling policies
略
- Configure Notifications
略
- Configure Tags
略
- Review
參考
- 使用 EC2 執行個體建立 Auto Scaling 群組 - Amazon EC2 Auto Scaling
- Launch Configurations - Amazon EC2 Auto Scaling
- 使用 AWS Application Load Balancer
- Network Load Balancers 的目標群組
- 為 Network Load Balancer 建立目標群組
- CloudWatch Logs
- 使用 CloudWatch 代理程式從 Amazon EC2 執行個體和現場部署伺服器收集指標和日誌 - Amazon CloudWatch
(fin)