目次
1.はじめに
2.前提条件
3.手順
4.CLI系
5.まとめ
1. はじめに
皆さんこんにちは、こんばんは、おはようございます
タイトル通りなんですけど、このパターンの時皆さんどうしてますか?
そもそもユースケースが少ないのですが、リタイアメント通知が来た時このパターンに合致しました。
私がこの記事を書くきっかけといってはなんですが、スケールイン保護して手動停止したのですがインスタンスが削除されてしまって大失敗、改めて検証と調査をしました。
スケールイン保護は最小キャパシティを元にASGのプロセスから守る為って感じなので手動停止等には対応していない(適用されない)ようです。
もう1台作成しないことを条件に1台完結で起動停止ができる方法を模索しました。
なおコンソール上では解決しないのでCLIでASGを制御する方法を採用しました。
2. 前提条件
Cloudshellを使用しコマンドを実行します。
別途サーバからコマンド打ちたい方はAWS CLIを打てるように環境を整えてください。
以下ASGのプロセスの知識を覚えておいてください。
プロセス名 | 説明 |
---|---|
Launch | インスタンスの起動を制御。 |
Terminate | インスタンスの終了を制御。 |
HealthCheck | ヘルスチェックを制御。 |
ReplaceUnhealthy | 非正常なインスタンスの置き換えを制御。 |
AZRebalance | アベイラビリティゾーン間のバランスを制御。 |
AlarmNotification | アラーム通知に基づくスケーリングを制御。 |
ScheduledActions | スケジュールされたアクションを制御。 |
InstanceRefresh | インスタンスのリフレッシュ操作を制御。 |
AddToLoadBalancer | インスタンスをロードバランサに登録するプロセスを制御。 |
RemoveFromLoadBalancerLowPriority | 低優先度インスタンスのロードバランサからの削除を制御。 |
インスタンスはASGからデタッチしないので注意です。
デタッチしてしまうと、プロセスを停止するため再アタッチできなくなります。
プロセスを稼働させれば再アタッチできますが、プロセスを再稼働させた時点で新規のインスタンスが立ち上がってしまいます。
3. 手順
手順については以下の流れ
1.ASGのプロセスを停止→➀のコマンド
2.現在稼働しているプロセスを確認→➁のコマンド
3.インスタンス停止
4.インスタンス起動
5.ASGのプロセス再開→➂のコマンド
6.現在稼働しているプロセスを確認→➁のコマンド
4. CLI系
aws autoscaling suspend-processes --auto-scaling-group-name <ASG名>
aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names <ASG名> | jq '
.AutoScalingGroups[].SuspendedProcesses | map(.ProcessName) as $suspended |
["Launch", "Terminate", "HealthCheck", "ReplaceUnhealthy", "AZRebalance", "AlarmNotification", "ScheduledActions", "InstanceRefresh", "AddToLoadBalancer", "RemoveFromLoadBalancerLowPriority"] - $suspended'
aws autoscaling resume-processes --auto-scaling-group-name <ASG名>
以下は使用しませんが、ご参考程度にどうぞ
aws autoscaling suspend-processes --auto-scaling-group-name <ASG名> --scaling-processes <プロセス名>
aws autoscaling resume-processes --auto-scaling-group-name <ASG名> --scaling-processes <プロセス名>
5. まとめ
ASGの設定値をいじることなくプロセス起動停止の間で停止起動することで新規のインスタンスが立ち上がらず既存の一台を起動停止することができました。
ぐぐってもなかなかややこしい部分で書いてる人が見つけられなかったのでこの記事を備忘録として置いておきます。
デタッチは必要ないので、その点も便利かなと思います。
もっといい方法があればコメントいただけるとしっぽブンブンです。
よろしくお願いいたします~~