事象
- AWS CodeDeploy Blue-Green deployment 経由で application をリリースしている
- In-Place と異なり, Blue-Green deployment は既存の Autoscaling group を複製する
- デプロイ時 (複製時) に自動 scaling しないよう, CodeDeploy が ASG の suspended process に値を挿入する
- 何らかの要因で suspended process が残ったままの状態となるケースが存在する
- ScheduledActions が suspended process に残ったままだと, 例えば夜間に Auto scaling capacity を 0台にしたい場合に処理が動かない
調査
AWS CodeDeploy で Blue-Green deployment を行う際に, CodeDeploy service により複製された Autoscaling group に対し次の API が呼ばれる.
SuspendProcesses API
- デプロイ開始直後に CodeDeploy service が呼び出す API.
ReplaceUnhealthy, AddToLoadBalancer, AlarmNotification, AZRebalance, InstanceRefresh, ScheduledActions
を複製した Autoscaling group の Suspended processes に追加する.
ResumeProcesses API
- デプロイ完了時 (AfterBlockTraffic) に CodeDeploy service が呼び出す API.
- 複製した Autoscaling group の Suspended processes に追加した値を元の状態に戻す.
Suspended processes に ScheduledActions が指定され, 当該の処理が動かなかった場合に次の activity が Autoscaling group に記録される.
% aws autoscaling describe-scaling-activities --include-deleted-groups --auto-scaling-group-name CodeDeploy_TestApp-003_d-xxx --profile xxx
{ "Activities": [ { "ActivityId": "xxx", "AutoScalingGroupName": "CodeDeploy_TestApp-003_d-xxx", "Description": "Skipping scheduled action TestApp-003_auto_stop since scheduled actions are suspended for the group.", "Cause": "", "StartTime": "2023-10-01T14:45:00.540000+00:00", "EndTime": "2023-10-01T14:45:00+00:00", "StatusCode": "Cancelled", "Progress": 100, "Details": "{}", "AutoScalingGroupState": "InService", "AutoScalingGroupARN": "arn:aws:autoscaling:ap-northeast-1:000:autoScalingGroup:xxx:autoScalingGroupName/CodeDeploy_TestApp-003_d-xxx" },
この activity を遡り, 発生当初の Autoscaling group, CodeDeploy の挙動から原因を調査できる.
まとめ
上記手順で当該事象の原因を調査できるのだが, Autoscaling group の activity は過去 2weeks 前までしか遡れない.
且つ上記事象の再現性が3年で2回のみしか発生していないという, 極めて稀な事象である.
本事象について知見をお持ちの方, 良ければコメント下さい.