EC2 Auto Scaling のリバランシング機能でスポットインスタンスの自動交換を確認してみた

キャパシティリバランシング機能を利用して、強制停止リスクの高まったスポットインスタンスの入替動作を確認してみました。
2020.11.18

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWSチームのすずきです。

2020/11/4 のアップデートで、Amazon EC2 Auto Scaling で キャパシティリバランシング機能が利用可能になりました。

当設定を有効にした環境で、停止リスクの高まったスポットインスタンスの交換を確認する機会がありましたので、 紹介させていただきます。

設定

EC2 オートスケーリングの設定より、「キャパシティーの再調整」を有効化しました。

CloudFormation を利用する場合、「CapacityRebalance: true」で設定可能です。

  Ec2InstanceAutoScalingGroup:
    Type: AWS::AutoScaling::AutoScalingGroup
    CreationPolicy:
    Properties:
      CapacityRebalance: true
      MixedInstancesPolicy:
        InstancesDistribution:
          OnDemandBaseCapacity: 0
          OnDemandPercentageAboveBaseCapacity: 0
          SpotAllocationStrategy: capacity-optimized
        LaunchTemplate:
          LaunchTemplateSpecification:
            LaunchTemplateId: !Ref 'Ec2LaunchTemplate'
            Version: !GetAtt 'Ec2LaunchTemplate.LatestVersionNumber'
          Overrides:
            - InstanceType: t3a.micro
            - InstanceType: t3.micro

確認

「キャパシティーの再調整」を有効化後、11/12 23時台 に 発生していた リバランスの挙動を確認しました。

EC2 オートスケール (History)

ステータス 説明 原因
Successful Launching a new EC2 instance: i-0a727c389660b6734 At 2020-11-12T23:14:49Z an instance was launched in response to an EC2 Instance rebalance recommendation.
Successful Terminating EC2 instance: i-000a66fd275cd41bd At 2020-11-12T23:42:43Z an instance was taken out of service in response to a EC2 Instance rebalance recommendation.

EventBridge

EC2が起動した 13秒前に、リバランスの通知が記録されていました。

{
  "version": "0",
  "id": "00000000-0000-0000-0000-000000000000",
  "detail-type": "EC2 Instance Rebalance Recommendation",
  "source": "aws.ec2",
  "account": "000000000000",
  "time": "2020-11-12T23:14:36Z",
  "region": "ap-northeast-1",
  "resources": [
    "arn:aws:ec2:ap-northeast-1:000000000000:instance/i-000a66fd275cd41bd"
  ],
  "detail": {
    "instance-id": "i-000a66fd275cd41bd"
  }
}

EC2 交換詳細

起動インスタンス(i-0a727c389660b6734 )

項番 事象 説明 時刻
1 EC2起動開始 RunInstances 23:14:52
2 ELB登録開始 RegisterTargets 23:15:23
3 ヘルスチェック完了 (5回x20秒) 23:17:03

停止インスタンス(i-000a66fd275cd41bd)

項番 事象 説明 時刻
1 ELBから取り外し開始 DeregisterTargets 23:42:44
2 登録解除待機 (Deregistration delay) 20秒 23:43:04
3 EC2停止 TerminateInstances 23:43:13

ELBメトリック

有効な EC2 インスタンスの台数が維持されている事、EC2 交換中にエラーが発生していない事を確認できました。

まとめ

複数のインスタンスタイプ、AZを利用するEC2 オートスケール環境、 キャパシティのリバランシング機能を利用する事で、 強制停止のリスクが高まったスポットインスタンスを自動で予防交換可能になりました。

スポットインスタンスは、オンデマンド費用と比較して70%削減、3年契約のリザーブドインスタンスに匹敵する価格で利用可能です。

EC2オートスケールの複数インスタンスタイプの混在指定や、キャパシティーで最適化された新しい配分設定と合わせてご利用ください。

リバランシングを有効化した後、スポットインスタンスの強制終了は確認できていませんが、 スポット在庫が急激に逼迫した場合などには、リバランスが間に合わず強制終了が発動する事は起きうる模様です。

スポットインスタンスの強制終了による影響の極小化が望まれる場合、 強制終了2分前 (EC2 Spot Instance Interruption Warning) の通知を利用して、 EventBridge と Lambda 関数 などで 対象のインスタンスを 安全に除外する処理も併用してご利用ください。