Rolling Updates VMs via Cloud Formation on AWS
前言
要將一個服務上線, 除了需要將它架設起來之外, 還需要考慮到後續的維運, 若將來前端傳過來的請求後端無法負荷時(Overloaded), 後端該做什麼調整? 以及當將來有服務要更新時, 怎麼做才能確保服務不中斷Overloaded 的問題可以透過Auto Scaling的機制去解, 之前的文章有帶著大家利用CloudFormation來部屬有水平擴充功能的Auto Scaling Group
至於如何保證更新時服務不停機, 則可以透過滾動式的更新(Rolling Update), 在更新時一次只更新一小部分副本, 等成功後再去更新剩下的, 直到最後所有的副本都被更新完成
如何做Rolling Update
需要在Auto Scaling Group中定義好Update Policy"AutoScalingGroup": {
"Type": "AWS::AutoScaling::AutoScalingGroup",
"Properties": {
"AvailabilityZones": [ "us-east-2c" ],
"LaunchConfigurationName": { "Ref": "LaunchConfig" },
"MinSize": "1",
"MaxSize": "4",
"DesiredCapacity": "1",
"HealthCheckType": "ELB",
"HealthCheckGracePeriod": "1800",
"LoadBalancerNames": [{ "Ref": "LoadBalancer" }]
},
"UpdatePolicy": {
"AutoScalingRollingUpdate": {
"MinInstancesInService": "1",
"MaxBatchSize": "1",
"WaitOnResourceSignals": "true",
"PauseTime": "PT40M"
}
},
"CreationPolicy": {
"ResourceSignal": {
"Count": "1",
"Timeout": "PT40M"
}
}
}
當Stack 裡的資源描述檔(Template)變更時, 就會讓CloudFormation觸發Rolling update比如說,
原先描述檔中的參數(Parameter)如下所示
"Parameters": {
"myVPC": {
"Type": "String",
"Default": "vpc-da58b9b1"
},
"mykeyName": {
"Type": "String",
"Default": "app123"
},
"BuildNumber": {
"Type": "String",
"Default": "1",
"Description": "Number of the build being deployed"
}
},
用以下的指令將BuildNumber由1改為2aws cloudformation update-stack \
--stack-name myteststack07271new123 \
--use-previous-template \
--parameters "ParameterKey=BuildNumber,ParameterValue=proc"
這時Rolling update就會被啟動更新完成後可以看到狀態變更為
留言
張貼留言