EC2 Auto Scaling Group でスタンバイ中インスタンスのスケーリングイベントがトリガーされるのか検証してみた
いわさです。
Auto Scaling Group (ASG) 運用をしている場合、夜間停止を行う際には通常は ASG の希望するキャパシティを夜間はゼロにすることで、インスタンスを終了させると思います。
稀に、起動・終了の頻度を最小限にしたくて、起動/終了ではなくて通常の EC2 インスタンスと同じように起動/停止をしたい場合があります。万が一のオートヒーリングのために ASG を導入する場合などです。
この場合、ASG のスタンバイ機能を併用することで、キャパシティを減らしつつ既存インスタンスを ASG によって自動削除させないようにできます。
このスタンバイ併用運用をした時、オートヒーリングが発生した際に SNS などで通知行いたい場合がありました。
本日はスタンバイインスタンスがある場合の ASG イベントの発生について調べてみました。
Event Bridge ルール
まずは EC2 Auto Scaling でどのようなイベントを拾うことが出来るのか Events Reference で確認してみます。
EC2 Auto Scaling イベントの対応状況は以下です。
色々とあるのですが、いつ何が発生するのかいまいちわかりません。
なので今回は検証用に次のように全イベントを拾ってみます。
そして CloudWatch Logs あたりに流して、発生タイミングとイベントログの内容を確認してみたいと思います。
Auto Scaling の構成を変更してイベント発生を観察
イベントを設定したので、あとは Auto Scaling Group の設定を変更してどういうイベントが発生するのかを観察してみます。
事前に起動テンプレートは構成済みで、1 台起動されている状態から開始します。
希望するキャパシティを 1 → 0 に変更
まずは、オートスケーリンググループ内のインスタンスを 0 台にしてみましょう。
ASG を使った際に夜間停止するような場合は普通この方法を取ると思います。
少し待つとオートスケーリンググループ内のインスタンスが 0 台になりました。挙動は期待どおりですね。
そしてこの時、次のようなイベントEC2 Instance Terminate Successful
が発生することを確認出来ました。
{
"version": "0",
"id": "b07ac56e-4d6a-1303-ef3c-372ab62466a8",
"detail-type": "EC2 Instance Terminate Successful",
"source": "aws.autoscaling",
"account": "123456789012",
"time": "2025-05-28T06:26:13Z",
"region": "ap-northeast-1",
"resources": [
"arn:aws:autoscaling:ap-northeast-1:123456789012:autoScalingGroup:aa7c02c5-4216-4e0d-bdd0-da87084b6a9b:autoScalingGroupName/hoge0528asg",
"arn:aws:ec2:ap-northeast-1:123456789012:instance/i-0757be3948138d734"
],
"detail": {
"Origin": "AutoScalingGroup",
"Destination": "EC2",
"Description": "Terminating EC2 instance: i-0757be3948138d734",
"EndTime": "2025-05-28T06:26:13.071Z",
"RequestId": "ddca718e-ee06-4519-8457-bfea733ea7b8",
"ActivityId": "ddca718e-ee06-4519-8457-bfea733ea7b8",
"StartTime": "2025-05-28T06:24:50.596Z",
"EC2InstanceId": "i-0757be3948138d734",
"StatusCode": "InProgress",
"StatusMessage": "",
"Details": {
"Subnet ID": "subnet-b461c1fc",
"Availability Zone": "ap-northeast-1a"
},
"Cause": "At 2025-05-28T06:24:41Z a user request update of AutoScalingGroup constraints to min: 0, max: 1, desired: 0 changing the desired capacity from 1 to 0. At 2025-05-28T06:24:50Z an instance was taken out of service in response to a difference between desired and actual capacity, shrinking the capacity from 1 to 0. At 2025-05-28T06:24:50Z instance i-0757be3948138d734 was selected for termination.",
"AutoScalingGroupName": "hoge0528asg"
}
}
希望するキャパシティを 0 → 1 に変更
続いて先程と逆で今度はキャパシティを増やすことで EC2 インスタンスを自動起動させてみましょう。
しばらく待つと起動テンプレートに従った新しい EC2 インスタンスが起動されました。
そして今度は、EC2 Instance Launch Successful
イベントが発生しました。
{
"version": "0",
"id": "806d4b8f-34ee-4104-d036-fcee8b727ec1",
"detail-type": "EC2 Instance Launch Successful",
"source": "aws.autoscaling",
"account": "123456789012",
"time": "2025-05-28T06:28:02Z",
"region": "ap-northeast-1",
"resources": [
"arn:aws:autoscaling:ap-northeast-1:123456789012:autoScalingGroup:aa7c02c5-4216-4e0d-bdd0-da87084b6a9b:autoScalingGroupName/hoge0528asg",
"arn:aws:ec2:ap-northeast-1:123456789012:instance/i-05ae144ad22835c68"
],
"detail": {
"Origin": "EC2",
"Destination": "AutoScalingGroup",
"Description": "Launching a new EC2 instance: i-05ae144ad22835c68",
"EndTime": "2025-05-28T06:28:02.231Z",
"RequestId": "ae165c56-4dfa-1edb-5eab-6b0fcd1f0e4d",
"ActivityId": "ae165c56-4dfa-1edb-5eab-6b0fcd1f0e4d",
"StartTime": "2025-05-28T06:27:57.191Z",
"EC2InstanceId": "i-05ae144ad22835c68",
"StatusCode": "InProgress",
"StatusMessage": "",
"Details": {
"Subnet ID": "subnet-b461c1fc",
"Availability Zone": "ap-northeast-1a"
},
"Cause": "At 2025-05-28T06:27:50Z a user request update of AutoScalingGroup constraints to min: 0, max: 1, desired: 1 changing the desired capacity from 0 to 1. At 2025-05-28T06:27:55Z an instance was started in response to a difference between desired and actual capacity, increasing the capacity from 0 to 1.",
"AutoScalingGroupName": "hoge0528asg"
}
}
スタンバイに移行
ここまでは基本パターンでした。
ここから本題のスタンバイの時の挙動を確認してみます。
オートスケーリンググループでは配下の EC2 をスタンバイいう状態にすることで、オートソケーリンググループから見ると稼働中ではないインスタンスとして扱うことが出来ます。
メンテナンスや問題が発生した EC2 を隔離して調査を行うためなどに使われたりします。
オートスケーリンググループのインスタンス管理メニューから「スタンバイに設定」を選択します。
この時、インスタンスを置き換えるオプションを選択することが出来ますが今回はチェックを外します。
インスタンスを置き換えた場合はスタンバイに移行したインスタンスの代わりに新しいインスタンスが立ち上がります。インスタンスを置き換えない場合はスタンバイに移行したインスタンスの分、オートスケーリンググループ内のキャパシティが減ります。
スタンバイに設定後、希望するキャパシティが 1 から 0 に減ったことを確認しました。
一方でインスタンス管理タブ上にはインスタンスが存在したままです。ただしライフサイクルステータスは「Standby」となっています。なるほど!
そしてこの時キャパシティは減っているわけですが、先ほどと異なりEC2 Instance Terminate Successful
イベントを初めとする EC2 Auto Scaling 関連のイベントは発生しませんでした。
スタンバイ中インスタンスの停止と開始
スタンバイ中のインスタンスは一応オートスケーリンググループのインスタンス管理タブに表示されていたので管理化ではあるようです。
EC2 コンソールからインスタンスの停止や起動をした場合どうなるでしょうか。
この場合もイベントは特に発生しませんでした。
スタンバイインスタンスがある状態で、希望するキャパシティを増やす
スタンバイインスタンスに移行したことで希望するキャパシティが減りました。ここで手動で希望するキャパシティを 0 から 1 に変更してみます。
ここではEC2 Instance Launch Successful
が発生しましたね。
{
"version": "0",
"id": "37f38742-4602-9b51-46b3-90ddff309653",
"detail-type": "EC2 Instance Launch Successful",
"source": "aws.autoscaling",
"account": "123456789012",
"time": "2025-05-28T06:41:27Z",
"region": "ap-northeast-1",
"resources": [
"arn:aws:autoscaling:ap-northeast-1:123456789012:autoScalingGroup:aa7c02c5-4216-4e0d-bdd0-da87084b6a9b:autoScalingGroupName/hoge0528asg",
"arn:aws:ec2:ap-northeast-1:123456789012:instance/i-0a0ac12f30357f597"
],
"detail": {
"Origin": "EC2",
"Destination": "AutoScalingGroup",
"Description": "Launching a new EC2 instance: i-0a0ac12f30357f597",
"EndTime": "2025-05-28T06:41:27.404Z",
"RequestId": "7b165c56-7f1f-c2b3-3a3b-72784efd17d7",
"ActivityId": "7b165c56-7f1f-c2b3-3a3b-72784efd17d7",
"StartTime": "2025-05-28T06:41:22.416Z",
"EC2InstanceId": "i-0a0ac12f30357f597",
"StatusCode": "InProgress",
"StatusMessage": "",
"Details": {
"Subnet ID": "subnet-b461c1fc",
"Availability Zone": "ap-northeast-1a"
},
"Cause": "At 2025-05-28T06:41:15Z a user request update of AutoScalingGroup constraints to min: 0, max: 2, desired: 1 changing the desired capacity from 0 to 1. At 2025-05-28T06:41:20Z an instance was started in response to a difference between desired and actual capacity, increasing the capacity from 0 to 1.",
"AutoScalingGroupName": "hoge0528asg"
}
}
まとめ
本日は EC2 Auto Scaling Group でスタンバイ中インスタンスのスケーリングイベントがトリガーされるのか検証してみました。
スタンバイ機能を使って夜間停止/起動をしているケースでオートヒーリングイベント検知したい場合、EC2 Instance Launch Successful
をトリガーとすることでオートヒーリングを検出出来そうだということがわかりました。
そう多くないケースだと思いますが、今回のような検出構成を行う際にはこのあたりのイベント発生を知っておくと良さそうです。