0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【備忘録】AutoScallingGroupにインスタンスが1台しかない時にもう1台起動せずに既存のインスタンスを停止起動する方法

Posted at

目次

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系

ASGプロセス停止➀
aws autoscaling suspend-processes --auto-scaling-group-name <ASG名>
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'
ASGプロセス起動➂
aws autoscaling resume-processes --auto-scaling-group-name <ASG名>

以下は使用しませんが、ご参考程度にどうぞ

ASG特定のプロセス停止
aws autoscaling suspend-processes --auto-scaling-group-name <ASG名> --scaling-processes <プロセス名>
ASG特定のプロセス再開
aws autoscaling resume-processes --auto-scaling-group-name <ASG名> --scaling-processes <プロセス名>

5. まとめ

ASGの設定値をいじることなくプロセス起動停止の間で停止起動することで新規のインスタンスが立ち上がらず既存の一台を起動停止することができました。

ぐぐってもなかなかややこしい部分で書いてる人が見つけられなかったのでこの記事を備忘録として置いておきます。

デタッチは必要ないので、その点も便利かなと思います。

もっといい方法があればコメントいただけるとしっぽブンブンです。
よろしくお願いいたします~~

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?