LoginSignup
27
24

More than 5 years have passed since last update.

Auto ScalingのSuspend/Resumeを使って、Elastic BeanstalkインスタンスをTerminateしないで停止・再起動する

Last updated at Posted at 2014-10-29

Elastic Beanstalkから作成したインスタンスは、再起動しようと停止するとAuto ScalingによりTerminateされてしまい新規インスタンスが作られてしまいます。そんなインスタンスをTerminateしなくて済む方法を確認

方法

過去にインスタンスの再起動がしたくてサポートに問い合わせてみた時の回答

1.Terminate 処理を Suspend にします
2.インスタンスを Stop します
3.インスタンスを Start します
4.ELB で該当インスタンスは InService になることを確認します
※ELB に設定した Healthy Check 条件を満たすにも関わらず、InService にならなかった場合は、一度該当インスタンスを ELB から外し、再度登録します。その後、InService になるのを確認します
5.SetInstanceHealth にて該当インスタンスを Healthy 状態にします
6.Terminate 処理を Resume にします

1.と6.の「Terminate 処理のSuspend/Resume」がAWSのマネジメントコンソール上から見ても分からん・・・
CLIのヘルプからそれっぽいものを探してみる

Auto ScalingのSuspendとResume

Suspend and Resume Auto Scaling Process

EC2のAuto Scaling Groupsから止めたいインスタンスのグループ名を調べてから、CLIのsuspend-processesを実行する。

Terminate処理をSuspend
$ aws autoscaling suspend-processes --auto-scaling-group-name <グループ名> --scaling-processes Terminate
$ aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name <グループ名>
--省略--
SUSPENDEDPROCESSES      Terminate       User suspended at 2014-10-29T07:34:26Z
--省略--
$

Suspended Processes が Terminate と出ればOK(マネジメントコンソールのDetailsでも表示される)。この間はインスタンスを停止してもTerminateされない。戻すときはresume-processesを実行する

Terminate処理をresume
aws autoscaling resume-processes --auto-scaling-group-name <グループ名> --scaling-processes Terminate

これでterminateなしで停止できるッ!と思ったらResumeした時点でインスタンスをTerminateしてから新規にインスタンス作成し始めた・・・

と、ここまで書いて公開していたが、後日以下の実施が漏れていたことに気が付いた

5.SetInstanceHealth にて該当インスタンスを Healthy 状態にします

該当インスタンスをHealthy状態にする
aws autoscaling set-instance-health --instance-id <インスタンスID> --health-status Healthy

一度手動で Stop したインスタンスは、その後 Start して正常な状態になっても Auto Scaling で自動的に Healthy になりません。
従いまして、以下のドキュメントにあります SetInstanceHealth を利用して、該当インスタンスを Healthy 状態にしてから、 Terminate を Resume する必要があります。

 SetInstanceHealth
 http://docs.aws.amazon.com/AutoScaling/latest/APIReference/API_SetInstanceHealth.html

こういうことらしい。Resumeした時点でAuto ScalingがインスタンスをUnhealthy状態と判断してTerminateしたようだ
Suspendして再起動後にインスタンスをHealthy状態にしてからresumeを実施してみると、インスタンスはTerminateされずに起動した

EBの検証

これ入れてやった方が早いか?
AWS Elastic Beanstalk Command Line Tool
Getting Started with Eb

インストールして初期設定後にstop/startを実施

インスタンスの停止
$ eb stop
Terminate environment? [y/n]: y
Stopping environment "test-env". This may take a few minutes.
--省略--
Stop of environment "test-env" has completed.
インスタンスの開始
$ eb start
Starting application "test".
Some of your option settings are ignored because they don't apply to your environment type.
Waiting for environment "test-env" to launch.
--省略--
Application is available at "test-env-XXXXXXXX.elasticbeanstalk.com".

これもインスタンスは一旦Terminateしてから新規にインスタンスを作成している

結論

  • Auto ScalingのTerminate処理をSuspendしている間は、インスタンスを停止してもTerminateされない
  • Terminate処理をResumeすることでAuto Scalingの設定を元に戻すことができる
  • インスタンスを停止させるとUnhealthy状態と判断されるので、手動でHealthy状態にする必要がある
27
24
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
27
24