プログラマでありたい

おっさんになっても、プログラマでありつづけたい

AWSのAutoScalingの整理 スケーリングポリシー編

 AWS認定試験の対策本を書いていることもあって、試験についての相談を受けることがよくあります。その中で、AutoScaling関係の問題が難しいという相談が多い。話しを聞いていると、ELBの機能かAutoScalingの機能か切り分けて理解していないケースが多いようです。実務的には、ELBとAutoScalingは一体で使うことが多く、無理もないかなぁと思います。
 私も曖昧な理解している所が多かったので、改めてAutoScalingの機能について整理してみました。そうすると思っていた以上に多くの機能がアップデートされていて、定期的に知識のアップデートすることが必用だなと痛感させられます。ということで、今日はAWSのAutoScalingについて整理してみます。

EC2 AutoScaling


 EC2 AutoScalingは、EC2インスタンスの利用状況に応じて動的に増減させるサービスです。クラウドの特徴を活かした機能で、必用な時に必用なリソースを用意するというクラウドの象徴的な機能の一つではないでしょうか?私も初めてこの機能を使った時の感激はひとしおでした。さて、このEC2 AutoScalingには複数のスケーリング方法があり、次の3つの分類できます。

  • 動的なスケーリング
  • 予測スケーリング
  • スケジュールスケーリング

一番代表的なのが、1つ目の動的なスケーリングです。動的なスケーリングには、更に3種類のスケーリングの設定方法があります。

  • 簡易スケーリング
  • ステップスケーリング
  • ターゲット追跡スケーリング
簡易スケーリング

 1つ目の簡易スケーリングはCPU使用率が70%を超えたらといったように、1つのメトリクスに対して1つの閾値を設定します。簡易スケーリングという名前に変えられてしまいましたが、これが最初期のスケーリング方法です。古参のAWSユーザーには馴染みが深いのでは思います。で、実はこれは今は非推奨になっていて、簡易スケーリングを使いたい場合は、それよりも次で紹介するステップスケーリングを使うべきとなっています。

ステップスケーリング

 では、そのステップスケーリングです。ステップスケーリングは、1つのメトリクスに対して複数の閾値を設定します。例えば、CPU使用率が50%を超えた場合、60%を超えた場合と段階(ステップ)ごとの設定ができます。また、複数の閾値を設定できるものの1つの閾値のみを設定することもできます。つまり、簡易スケーリングの上位互換ということです。そのため、AWSとしては簡易スケーリングよりステップスケーリングを推奨しています。

AutoScalingグループの初期設定画面で、簡易スケーリングとステップスケーリングが選択できない

 と、ここまで来てAutoScalingグループの初期設定画面をみてみましょう。いつからかこうなっているのか解らないのですが、今では初期設定段階では簡易スケーリングもステップスケーリングも選択できなくなっています。これから紹介するターゲット追跡スケーリングか、スケーリングポリシー無しのどちらかです。AutoScalingグループなのにスケーリングなしって何だよと突っ込みたくなるかもしれませんが、例えば初期に設定した2台をずっと維持したい場合や、途中でインスタンスの障害が発生しても新たに立ち上げて2台を維持したいという場合、スケジュールスケーリングで時間に従ってインスタンスの増減させたい場合に効力を発揮します。
f:id:dkfj:20200808105951p:plain

 では、簡易スケーリングとステップスケーリングは設定できないのかというとそうではなく、AutoScaling グループ作成後に設定変更で選択できるようにはなっています。またCLIでは、パラメータを指定すれば初期設定時点から指定ができます。AWSとしては、この2つではなくターゲット追跡スケーリングを使ってねという強い意志を感じますね。

f:id:dkfj:20200808110009p:plain

ターゲット追跡スケーリング

 最後にターゲット追跡スケーリングです。1つのメトリクスに対して、目標値を設定します。例えばCPUの利用率を50%という目標値を設定すると、AutoScalingグループ全体でCPU利用率が50%を維持できるように自動的に調整されます。ステップスケーリングのように、細かく刻んで設定しなくてもAWS側があんじょうやってくれます。これは楽でいいですよね。従来ですとメトリクスに対してどのようにスケーリングさせるのかは、ある意味ノウハウでした。この辺りがお任せできます。

f:id:dkfj:20200808113306p:plain

 ということで、EC2ダッシュボードの新UIで、AutoScalingの設定の動画です。ELBと連携させず、また起動テンプレートを設定済みという状況での作成の流れです。


EC2ダッシュボードの新UIでAutoScaling設定

起動設定と起動テンプレート


 ここまで読んで起動テンプレートってなんぞやと思った人もいるかと思います。起動設定じゃないのと。従来、AutoScalingグループは、起動設定を利用していました。今は、起動設定と起動テンプレートのどちらの指定も可能となっています。そして、新UIでは、起動テンプレートがデフォルトとなっています。つまり、起動テンプレートが推奨なのですね。
 起動テンプレートは、よく使うEC2の起動設定をテンプレート化して再利用しやすくするものです。一度、テンプレート化しておけば、二度目以降は台数指定するだけで同じ設定のものを起動できるようになります。この起動テンプレートは、別にAutoScalingグループのためだけにあるのではなく、通常のEC2の起動にも使えます。また設定内容も起動設定よりも細かく指定できるので、上位互換ですね。こちらもデフォルトになっていって、起動設定は恐らく緩やかにフェードアウトしていくのでしょう。

スケジュールスケーリング


 スケジュールスケーリングは、Auto Scalingの設定後にオプションで設定します。詳細画面の自動スケーリングタブの予定されたアクションから設定できます。

f:id:dkfj:20200809094808p:plain

 指定の仕方は、Cron式や、5分毎・30分毎・1時間毎・毎日・毎週・一度の指定ができます。注意点としては、時間の指定はUTCであることと、一時的に増やした場合は対となる減らす設定も必用ということです。

f:id:dkfj:20200809100845p:plain

AWS Auto ScalingとAmazon EC2 Auto Scaling


 ここまでがEC2のAuto Scalingグループのスケーリングポリシーの説明でした。最初に3つのスケーリングポリシーがあると言っていたものの、予測スケーリングがまだ出てきていません。実はややこしいことに、今現在のAWSのAuto Scalingは、AWS Auto ScalingとAmazon EC2 Auto Scaling、そしてApplication Auto Scalingの3種類があります。このうち、Application Auto Scalingは、ECSやEMRのクラスターやDynamoDBなどのアプリケーションのAuto Scalingを担当します。AWS Auto Scalingは独立したサービスのカテゴリーとして存在し、予測スケーリングはAWS Auto Scalingから設定することになります。AWS Auto Scalingは、管理カテゴリーに属するサービスとなります。

f:id:dkfj:20200808221245p:plain

 EC2のAuto Scalingで予測スケーリングを利用する場合は、設定済みのAuto Scalingグループを指定します。その際は、スケーリングポリシーはなしにしておきましょう。

f:id:dkfj:20200809101725p:plain

 そして、どういった方針に従ってスケーリングさせるかのスケーリング戦略を指定します。カスタムで細かく指定することも出来ますが、可用性最適化・コスト最適化などのデフォルトの戦略があるので、それを使うのも良いと思います。

f:id:dkfj:20200809101744p:plain

 こういった感じで、AWS Auto Scalingを利用した予測スケーリングも簡単に指定できます。ただし、EC2の管理画面から離れているということもあり、初見では解りづらいというのもあるかと思います。そのうち、EC2のダッシュボードからも指定できるようになるのではという気がします。

まとめ


 かなり長くなってきたので、今回はここまでとします。AutoScalingは、実はAWS AutoScalingとApplication AutoScaling、Amazon EC2 AutoScalingの3つがあります。一般的にAutoScalingと言われているものは、Amazon EC2 AutoScalingだと思いますが、今後はカテゴリーとして独立しているAWS AutoScalingの機能拡張がされていきそうです。Amazon EC2 AutoScalingのスケーリングポリシーには、簡易スケーリング・ステップスケーリング・ターゲット追跡スケーリングの3つがありますが、AWSとしてはターゲット追跡スケーリングを推しているようです。実際、細かいことを考えずに充分使えるのでお勧めです。

 もともと猶予期間やウォームアップ・終了ポリシーなどの解説をしようとしたのですが、Auto Scalingのアップデートを追っているうちに長くなってしまいました。次回、Auto Scalingの細かい話を解説します。AutoScalingは、AWSを使いこなす上でも、AWSの認定試験の対策でも重要なテーマとなります。どういった設定ができるのか、またどういった時に使わけるのか、しっかりと理解しておきましょう。

AWSのAutoScalingの整理 猶予期間・ウォームアップ・終了ポリシー編 - プログラマでありたい