目次
BeeXの榊原です。今回はDedicatedHost(以下DH)を立てる際、ちょっとしたトラブルに遭遇したので事象と解決策をまとめます。事象解決にはAWSサポートを利用しました。いつも本当にありがとうございます。
今回起こった事象
DH上にr6i.16xlarge(64vCPU)のインスタンスを起動したい。vCPU利用率は64/128なので、64vCPU分空きがあるのに、なぜか「Dedicated host h-xxxx has insufficient capacity to launch the instances in this request.」と表示される。
DHのホスト容量を見ると、r6i.16xlarge(64vCPU)どころか、それより小さいr6i.12xlarge(48vCPU)のインスタンスすら構築できない。
キャパシティがギリギリなのが悪いのか、さらにインスタンスを停止しvCPU利用率44/128(84vCPUの空き)にしました。するとr6i.12xlarge以上のインスタンスが1つは立てられるようになるかと思いきや、r6i.8xlarge以下のインスタンスの起動可能個数が増えただけでした。
さあ困りました。インスタンスを止めども止めども、大きいサイズのインスタンスタイプを立てられません。どうすればよいのでしょう。
解決策
公式ドキュメントを確認すると、以下のような記述を発見しました。
複数のインスタンスサイズをサポートする Dedicated Hosts については、大きいインスタンスサイズから始め、必要に応じて残りのインスタンスキャパシティを小さいインスタンスサイズで埋めることをお勧めします。(公式ドキュメント「Amazon EC2 専用ホストで Amazon EC2 インスタンスを起動する」より引用)
今回のケースだと大きいインスタンスサイズを最後に埋めるパターンとなっているため、どうやら関係がありそうです。AWSサポートに問い合わせたところ、結論解決策は「 DH上で起動している EC2 インスタンスを全て停止し、大きいサイズのインスタンスから順に起動する」というものでした。
いったいなぜそうする必要があるのでしょう。まずr6iのDHの仕様から確認します。公式ページを見ると、今回使用しているr6iインスタンスファミリーは2ソケット64コアからなる計128 vCPUで構成されています。ソケットとコアのイメージを軽くします。
ソケット:CPUの入れ物。1ソケット当たり1CPU入る。
コア:CPUの中にある頭脳。1CPU当たり複数のコア(頭脳)を持てる。
スレッド:1つのコアが扱える作業単位。今回は関係ないですがおまけ。
なのでr6iインスタンスファミリーをざっくり図示すると以下の通りです。
今回空き容量は128 - 44 = 84vCPUなので、今回以下のようにvCPUが消費されていると仮定(断言できない理由は後述)します。
この場合現時点ですと、今回起動したいr6i.16xlarge(64vCPU)のインスタンスは1ソケット丸ごと64vCPUを使用して起動する挙動のようです。その場合、どちらのソケットも既に利用されている部分があるためr6i.16xlargeを起動することができません。
また、AWSサポートの方曰く「現時点でソケットごとのvCPUの利用数や空きを確認する方法はなく、DH上のリソースはシステムが自動で配置する挙動となっている」とのことです。そのため、冒頭に記載した通り、公式からは大きいサイズのインスタンスから起動することが推奨されているようです。
この後、DH上のインスタンスを全て停止してから、再度大きいサイズ順にインスタンスを立てたら無事問題は解決しました。
最後に
今回は大きいサイズのインスタンスをDH上に起動する場合の注意点についてまとめました。vCPUのキャパシティが空いているから、その分は何もせずとも好きなサイズのインスタンスを立てられるわけではないです。皆様も十分お気を付けください。DH上のインスタンスは大きいやつから立てる!ありがとうございました。