Amazon EC2 Auto Scaling & AWS Auto Scaling

# Amazon EC2 Auto Scaling & AWS Auto Scaling

https://d1.awsstatic.com/webinars/jp/pdf/services/20191002_AWS-Blakbelt_Auto_Scaling.pdf

## コンセプト

Auto Scaling サービス群により、実際の需要に合わせたオートスケールが可能

 

## 基礎知識

  • 希望する容量(Desired Capacity)を目標に
    • 手動でDesired Capacity を設定
    • 何かをトリガーに自動でDesired Capacity を調節
  • インスタンスの分散
  • Pet としてではなく、Cattle として扱う

 

  • Auto Scaling の世界
    • AWS Auto ScalingEC2の予測スケーリングの管理)
      • 様々なリソースのスケーリングプラン(動的スケーリング+予測スケーリング)
    • EC2 Auto ScalingEC2の管理)
    • Application Auto Scasling
      • ECSクラスタ
      • スポットフリート
      • EMRクラスタ
      • AppStream 2.0 フリート
      • DynamoDB テーブル
      • Aurora レプリカ
      • SageMakerエンドポイントバリアント
      • カスタムリソース

 

## スケーリングの主要機能

  • 動的なスケーリング
    • 簡易スケーリング
      • EC2 Auto Scaling のみ
      • 1つのメトリクスに対して1種類だけのスケーリング調整値を指定
      • 現在は非推奨
    • ステップスケーリング
      • EC2 Auto Scaling, Application Auto Scaling
      • 1つのメトリクスに対して複数のスケーリング調整値を指定可能
      • ウォームアップ期間
        • 新しいインスタンスがサービス開始できるようになるまで何秒かかるかを設定する値
    • ターゲット追跡スケーリング
      • EC2 Auto Scaling, Application Auto Scaling
      • 1つのメトリクスに対し、単に目標値を指定する
        • CPU使用率を40%に維持してほしい
      • 目標値を満たす様に自動的にリソースが調整される
      • スケールインとスケールアウトのCloudWatch Alarm が作成される
      • 素早くスケールアウト、ゆっくりスケールインと行ったことも可能
  • 予測スケーリング
    • EC2 Auto Scaling のみ
    • 2週間分のメトリクスを分析し、今後2日間の需要を予測
    • 24時間ごとに次の48時間の予測値を作成し、キャパシティの増減をスケジュールする
    • お試しにスケーリングを行わない、「予測のみ」を利用してみる
  • スケジュールスケーリング
    • EC2 Auto Scaling, Application Auto Scaling
    • 一度限り、もしくは定期的なスケジュールを指定可能
    • MinCapacity MaxCapacity のいずれか、または両方を指定可能

 

  • スケーリングオプションの選択指針
    • EC2
      • 大まかなキャパシティ増減は予測スケーリングに任せて前もってスケールしておく
      • 実際の負荷に対して不足した分をターゲット追跡で補充する

 

 

## Auto Scaling の機能

  • ミックスインスタンスグループ
  • 起動テンプレートを利用する(起動設定の後継)
  • 速やかにオートスケールさせたいとき
    • CloudWatch メトリクスを1分間隔にする(有料)
    • ゴールデンイメージを用意しておく
  • スケールアウトした後、サービス開始前にインスタンスに準備させたい。スケールイン前に処理を行わせたいときにはライフサイクルフックを利用
  • 特定のインスタンスAuto Scaling グループから外す
    • スタンバイ or デタッチ
  • 特定のインスタンスをスケール院から保護したい
  • 一時的にスケールを停止したい。
    • スケーリングプロセスの中断

 

 

## 雑感

Auto Scaling といったらEC2のオートスケーリンググループの話とばかり思っていたが、他のサービスでも自動的にスケールされていたりするというのを、Auto Scaling の種別(AWS Auto Scaling, EC2 Auto Scaling, Application Auto Scaling ) を確認していく中で知った。

EC2Auto Scaling ばかり利用しているがEC2の予測スケーリングなどもっと使いこなせる部分は多いなと思った。スパイクがあって、通常リクエスト量が少ないとかだったらサーバーレスな構成にした方がいいとは思うが、EC2を利用しないといけない状況でいいかんじにリソース管理をしてくれるAuto Scaling は使いこなせればかなり無駄が少なくなるのかなと思った。

複数項目をトリガーに一気にスケールアウトし、徐々にスケールインといったことや、事前の予測からスパイクの少し前にスケールアウトしておくといったことができそう。

ただ、そのためにはAPがステートレスになっていないと管理が難しいのでそのためのアプリケーション設計も必要になってくるだろう。