[アップデート]EC2 AutoScalingでインスタンスタイプの重み付けができるようになりました

2019.11.22

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

EC2 AutoScalingでインスタンスタイプの重み付けができるようになりました。

どういうこと?

  • Auto Scaling Groupの設定では、一つのGroup内に複数のインスタンスタイプを指定することができます。
  • 各インスタンスタイプごとに重み付けをすることが可能になりました。
  • AutoScaling Groupは、稼働中のインスタンスの重みの合計が希望キャパシティと同等かそれ以上になるようにフリートを維持します。

まずは重み付けとはどういうことか、理解する

簡単な例を使って重み付けの概要を理解しましょう。以下はAuto Scaling Groupの設定画面です。

赤枠で囲ったところに重みを入力できるようになっています。が、一旦入力なしでいきます。 インスタンスタイプも t2.small一種類だけです。

オレンジ枠で囲った通り、希望キャパシティは4です。作成されるインスタンス群は、、

はい。当たり前ですが t2.smallが4台ですね。


では、先ほど空欄にしていた重み付けの欄に「2」をいれて更新してみます。

どうなるでしょうか。

2台Terminateされました。

これは、一台あたりの重みが2になったので、希望キャパシティ÷ 一台あたりの重み = 4 ÷ 2 = 2 と 2台だけで希望キャパシティを満たせるようになったからです。


さらに重みを1に更新すると、、

4台構成になりました。 (希望キャパシティ÷ 一台あたりの重み = 4 ÷ 1 = 4 で4台)

何が嬉しいの?

より要求スペックに近い状態が維持しやすくなります

例えば、c5.2xlargeインスタンスが4台あれば十分リクエストを捌けるワークロードがあったとします。Auto Scalingをc5.2xlargeで組めば良いですが、リソース枯渇を考慮してより上位のインスタンスタイプc5.4xlargeもAuto Scaling Groupで作成できるインスタンスタイプとして入れておくとします。c5.4xlargeのスペックはc5.2xlargeの2倍、コストも2倍です。

この時、希望キャパシティ4台の内訳は、狙い通りc5.2xlarge4台になる可能性もあれば、最悪c5.4xlarge4台になる可能性もあります。オーバースペックになってしまいますね。その分コストが上がります。

ここで重み付けを使ってみましょう。c5.2xlargeを1,c5.4xlargeを2と重み付けし、希望キャパシティは4のままです。重み付けを使用した場合、希望キャパシティの単位は台数ではなく重みになります。そのためこの場合、フリートの構成は以下のいずれかになります。オーバースペックになることがないのでコストが急増することはないはずです。

  • c5.2xlarge 4台 (= 1 × 4 = 4)
  • c5.2xlarge 2台 + c5.4xlarge 1台 (= 1 × 2 + 2 × 1 = 4)
  • c5.4xlarge 2台 (= 2 × 2 = 4)

また、どのインスタンスタイプにどのような重みをつけるかは完全にユーザーがコントロールできます。CPUバウンドなワークロードであればCPUのスペックで、メモリバウンドならばメモリのスペックで重み付けるなどということができます。上記は同じインスタンスシリーズを使った例ですが、異なるシリーズのインスタンスタイプを混ぜて使っても良いでしょう。スペックはまちまちですが、そのまちまちのスペックに応じた重みを付ければ良いのです。

よりコストメリットの高いフリートを作成しやすくなります

例えば、以下のインスタンスタイプと重み付けでAuto Scaling Groupを作成し、希望キャパシティは48としたとします。

インスタンスタイプ 重み付け
c5.2xlarge 2
c5.4xlarge 4
c5.12xlarge 12
c5.18xlarge 18
c5.24xlarge 24

この場合、フリートの構成例としては以下のように色々考えられますね。他にも色々なパターンがあります。

  • c5.24xlarge 2台 (48 ÷ 24 = 2)
  • c5.2xlarge 24台 (48 ÷ 2 = 24)
  • c5.12xlarge 4台 (48 ÷ 12 = 4)

さて、「1重みあたりのコスト」について考えてみましょう。これは、各インスタンスタイプの値段 ÷ そのインスタンスタイプにつけた重みで出すことができます。このコストが下がるほど、よりコストメリットのあるフリート構成といえます。

フリートを構成するインスタンスは、オンデマンドインスタンスとスポットインスタンスの2種類存在します。オンデマンド部分については、先ほどの重み付け設定の場合「1重みあたりのコスト」はどのインスタンスタイプを使う構成になっても変わりありません。インスタンスタイプの料金と重み付けが綺麗に比例しているからです。例えばc5.4xlargeの値段はc5.2xlargeの2倍であり、重みも2倍です。

ではスポットインスタンスの場合はどうか。スポットインスタンスの料金は、インスタンスタイプ × AZごとに異なり、かつそのときの需要に応じて値段が変動していきます。ですので、「1重みあたりのコスト」つまり「インスタンスタイプの料金 ÷ そのインスタンスタイプにつけた重み」が、インスタンスタイプごとに異なってくるわけです。

例えば、前述のc5系インスタンスタイプのスポットインスタンスをus-east-1a AZで起動した場合の料金が以下だったとします。

インスタンスタイプ us-east-1a AZでのスポットインスタンス料金
c5.2xlarge $0.180
c5.4xlarge $0.341
c5.12xlarge $0.779
c5.18xlarge $1.207
c5.24xlarge $1.555

これをそれぞれの重みで割って、「1重みあたりのコスト」を出します。

インスタンスタイプ us-east-1a AZでのスポットインスタンス料金 重み 1重みあたりのコスト 
c5.2xlarge $0.180 2 $0.090
c5.4xlarge $0.341 4 $0.085
c5.12xlarge $0.779 12 $0.065
c5.18xlarge $1.207 18 $0.067
c5.24xlarge $1.555 24 $0.065

この場合、c5.12xlargeかc5.24xlargeを使ったフリート構成にした方が、コストメリットがあるということがわかりました。Auto Scaling Groupの設定「スポット割り当て戦略」でlowest-price(スポットインスタンスを X アベイラビリティーゾーンごとに最も価格の安いインスタンスタイプ間で多様化する)を選択していれば、この安いフリート構成が自動で選ばれるようになります。(capacity-optimized(アベイラビリティーゾーンごとの利用可能なスポットキャパシティーに基づいて、最適な形でスポットインスタンスを起動する)は可用性を重視する戦略なので、各インスタンスタイプの空き容量によってどのインスタンスタイプが選択されるか決定されます)

その他

この重み付け機能を利用するにあたっての考慮点や、細かい仕様についてはユーザーガイドをご覧ください。

参考情報