【考察】インスタンスのキャパシティ不足が起こる裏側を考えてみる

サーバルーム AWS

皆さんはインスタンスのキャパシティ不足(insufficient capacity error:ICE)に遭遇したことはありますか?
以前の記事でリスクについて記載しましたが、今回はその裏側どうなってるのかを考察してみたいと思います。
AWS上の物理サーバー構成は不明なので、例として12,288Gのメモリを積んだサーバーがあるとして、メモリ量をもとに考察していきます。

汎用インスタンスを上げるとどうなる?

まずは汎用インスタンス(T3)を例に考えてみます。
12,288Gのメモリを積んだサーバーが2台あるとします、T3最大のt3.2xlargeはメモリ32Gなので
左側空き12,288Gサーバーは384のインスタンス、右側空き2,048Gサーバーは64のインスタンスが立ち上がります。結構余裕ですね。

メモリ最適化インスタンスを上げるとどうなる?

次にメモリ最適化のインスタンス(x2iedn)を上げるとどうなるでしょう。
先程と同じく12,288Gのメモリを積んだサーバーが2第あるとして、x2iedn.8xlargeを上げるとどうなるでしょうか。x2iedn.8xlargeはメモリ1,024Gのメモリが必要なため左側空き12,288Gサーバーは10のインスタンス、右側空き2,048Gサーバーは2のインスタンスが立ち上がります。
これがx2iedn.24xlargeとなるとメモリが3,072Gのメモリが必要となるため、左側に4インスタンス、右側は起動することができなくなります。

結局どういうことなの?

裏側のサーバー状況を想像すると、キャパシティ不足の背景がなんとなくイメージ出来たんじゃないでしょうか?
ではどうやって回避したら良いのでしょうか。以下3つの回避方法について説明したいと思います。

1.再起動する。時間をおいてリトライする

一番シンプルな回避方法になります。
キャパシティ不足は一時的なものになり、いずれは解消されます。運が良ければ再起動で起動できますが、場合によっては1日以上起動しないこともあります。いつ解消できるのかは運次第なのでおまじない程度で入れておくのが良いと思います。

2.インスタンスサイズを小さくする

EC2を立ち上げる基板側も物理サーバーがいて、たくさんのインスタンスがリソースを取り合っている状態になります。インスタンスサイズが大きいと起動できる基盤が限られてきて、小さいサイズのインスタンスだと起動しやすくなります。性能不足した際に単にスケールアップを図るより、小さいサイズのインスタンスを増やしてスケールできるようにした方が、費用対効果も高いのでオススメです。

3.複数のインスタンスタイプ、Azで起動できるようにする

Az障害時でなければ、別のインスタンスタイプ、別Azで起動できることが多いと思われます。1つのインスタンスタイプ・1つのAzでキャパシティ不足が発生しても、別のインスタンスタイプ、別Az上で起動する選択肢がアレアb、基盤の分母が増えるので起動する確率は上がります。

人によっては難しい所があったりすると思いますが、そう思うという所は運用面で課題を抱えているという事の裏返しかと思うので、一度構成変更について考えてみて頂ければと思います!

参考リンク 

EC2 インスタンスを開始または起動する際に発生する、InsufficientInstanceCapacity エラーのトラブルシューティング方法を教えてください。
インスタンスの起動に関する問題のトラブルシューティング

コメント

タイトルとURLをコピーしました