ALB/NLB配下の複数のEC2をダウンタイムなしで順番にスケールアップする

Cloud Automatorを利用して、ALB/NLB配下に2台以上配置されているEC2をダウンタイムが発生しないように順番にスケールアップする方法をご説明します。

ジョブとジョブワークフローの作成


今回はALB/NLB配下のEC2インスタンスを順番にをスケールアップさせるために、一度にスケールアップさせるEC2インスタンスごとに、以下のような流れの作業を行います。

  1. EC2インスタンスをALBのターゲットグループから解除する
  2. EC2インスタンスを停止する
  3. EC2インスタンスのインスタンスタイプを変更し、スケールアップする
  4. EC2インスタンスを起動する
  5. 再びEC2インスタンスをALBのターゲットグループに登録する

上記の作業をCloud Automatorジョブのアクションに置き換えると以下のようになります。
この順番でジョブ実行するジョブワークフローを作成します。

  1. ELB(ALB/NLB): ターゲットグループにEC2インスタンスを登録解除
  2. EC2: インスタンスを停止
  3. EC2: インスタンスタイプを変更
  4. インスタンスの起動
  5. ELB(ALB/NLB): ターゲットグループにEC2インスタンスを登録

__________2021-02-24_14_09_58.png

先頭ジョブに「 ELB(ALB/NLB): ターゲットグループにEC2インスタンスを登録解除」アクションのジョブを設定します。トリガーには今回HTTPトリガーを選択しましたが、ユースケースによって定時実行したい場合や、外部システムと連携する場合はタイマートリガーやSQSトリガーもご利用いただけます。

設定のポイント

  • 「EC2: インスタンスを停止」アクションのジョブでは「リソースの終了ステータスチェック」をオンにします。これは、「 EC2: インスタンスタイプを変更」ジョブは対象のインスタンスが停止状態でない場合に失敗してしまうためです。「リソースのステータスチェック」をオンにすることで、インスタンスが完全に停止してから次のジョブが実行されるようになります。
  • 同様に「 EC2: インスタンスを起動」アクションのジョブでも、「リソースの終了ステータスチェック」をオンに設定します。EC2インスタンスが起動状態になってから、次のジョブを実行させるためです。


ジョブワークフローを連携し、順番に実行させる

ここまでで、1台のインスタンスをスケールアップさせるジョブワークフローを作成することができました。さらに同様の内容のジョブワークフローをもう1つ作成し、後処理によって連携させて実行させることで、順番に実行することができます。

__________2021-02-24_15.28.49.png
連携は以下の手順で設定します。

  1. 2つ目のジョブワークフローの先頭ジョブをHTTPトリガーまたは、SQSトリガーで作成します。
  2. 1つ目のジョブワークフローの最後のジョブに後処理を設定し、1で作成したHTTP、またはSQSをトリガーするように設定します。

 

 トリガーと後処理の連携についての詳細は、こちらのマニュアルをご覧ください。

「ELB(ALB/NLB): ターゲットグループにEC2インスタンスを登録」アクションでは、登録したすべてのEC2インスタンスがHealthy状態になってからジョブが終了し、後処理が実行されます。そのため、2つ目のジョブワークフローは1台目のインスタンスがスケールアップ後、Healthy状態になったことが確認されてから実行されることになり、ダウンタイムの発生を防ぐことができます。


以上、ALB/NLB配下のEC2を順番にスケールアップする方法をご紹介しました。
Cloud Automatorのジョブはこのように組み合わせることでより便利に活用いただけるものが多いので、ぜひお試しください。

この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています
他にご質問がございましたら、リクエストを送信してください