tail -f /dev/null

If you haven't had any obstacles lately, you're not challenging. be the worst.

AWS CodeDeploy を利用した Blue-Green deployment において, Autoscaling group の Suspended processes 値が残る

事象

  • 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回のみしか発生していないという, 極めて稀な事象である.

本事象について知見をお持ちの方, 良ければコメント下さい.