Cloud Automatorを利用して、ALB/NLB配下に2台以上配置されているEC2をダウンタイムが発生しないように順番にスケールアップする方法をご説明します。
ジョブとジョブワークフローの作成
今回はALB/NLB配下のEC2インスタンスを順番にスケールアップさせるために、一度にスケールアップさせるEC2インスタンスごとに、以下のような流れの作業を行います。
- EC2インスタンスをALBのターゲットグループから解除する
- EC2インスタンスを停止する
- EC2インスタンスのインスタンスタイプを変更し、スケールアップする
- EC2インスタンスを起動する
- 再びEC2インスタンスをALBのターゲットグループに登録する
上記の作業をCloud Automatorジョブのアクションに置き換えると以下のようになります。
この順番でジョブ実行するジョブワークフローを作成します。
- ELB(ALB/NLB): ターゲットグループにEC2インスタンスを登録解除
- EC2: インスタンスを停止
- EC2: インスタンスタイプを変更
- EC2: インスタンスを起動
- ELB(ALB/NLB): ターゲットグループにEC2インスタンスを登録
ワークフロートリガージョブには今回HTTPトリガーを選択しましたが、ユースケースによって定時実行したい場合や、外部システムと連携する場合はタイマートリガーやSQSトリガーもご利用いただけます。後続ジョブに実行したいアクションのジョブを設定します。
設定のポイント
- 「EC2: インスタンスを停止」アクションのジョブでは「ジョブ実行後のリソースの状態までチェックする」をオンにします。これは、「 EC2: インスタンスタイプを変更」ジョブは対象のインスタンスが停止状態でない場合に失敗してしまうためです。「ジョブ実行後のリソースの状態までチェックする」をオンにすることで、インスタンスが完全に停止してから次のジョブが実行されるようになります。
- 同様に「 EC2: インスタンスを起動」アクションのジョブでも、「ジョブ実行後のリソースの状態までチェックする」をオンに設定します。EC2インスタンスが起動状態になってから、次のジョブを実行させるためです。
ジョブワークフローを連携し、順番に実行させる
ここまでで、1台のインスタンスをスケールアップさせるジョブワークフローを作成することができました。さらに同様の内容のジョブワークフローをもう1つ作成し、後処理によって連携させて実行させることで、順番に実行することができます。
連携は以下の手順で設定します。
- 2つ目のジョブワークフローのワークフロートリガージョブをHTTPトリガーまたは、SQSトリガーで作成します。
- 1つ目のジョブワークフローの最後のジョブに後処理を設定し、1で作成したHTTP、またはSQSをトリガーするように設定します。
トリガーと後処理の連携についての詳細は、こちらのマニュアルをご覧ください。
「ELB(ALB/NLB): ターゲットグループにEC2インスタンスを登録」アクションでは、登録したすべてのEC2インスタンスがHealthy状態になってからジョブが終了し、後処理が実行されます。そのため、2つ目のジョブワークフローは1台目のインスタンスがスケールアップ後、Healthy状態になったことが確認されてから実行されることになり、ダウンタイムの発生を防ぐことができます。
以上、ALB/NLB配下のEC2を順番にスケールアップする方法をご紹介しました。
Cloud Automatorのジョブはこのように組み合わせることでより便利に活用いただけるものが多いので、ぜひお試しください。