AWS Batch@Amazon Linux 2のコンテナストレージを増やしてみた

今回はBatch@Amazon Linux 2のコンテナストレージを増やす方法について調べてやってみました。
2021.02.22

こんにちは。AWS事業本部のKyoです。

はじめに

AWS Batchではその特性上、大きなファイルを扱うことが多いと思います。 EFSやFsx for Lustreなどを利用するケースもあるかと思いますが、まずはコンテナストレージを大きくしてみたい、というケースもあると思います。

Batchは昨年の11月末にAmazon Linux2(以下、AL2)をサポートしました。

[アップデート] AWS Batch がコンピューティング環境での Amazon Linux2 の利用をサポートしました

※ 細かく言うとAmazon ECS-optimized Amazon Linux 2 AMIが利用できるようになりました

Amazon Linux(以下、AL1)はサポートが延長されているとは言え、今から新規構築するのであればAL2を利用したいものです。

Amazon Linux のサポート期間延長のアナウンスについて

今回はBatch@Amazon Linux 2のコンテナストレージを増やす方法について調べてやってみました。

調べてみた

以下のようなページがありました。

AWS Batch の「No space left on device (デバイスに空きスペースがありません)」エラーを解決する方法を教えてください。

この方法ではユーザーデータでcloud-init-perを利用しますが、これはAL1でのみサポートされています。

現時点では、Amazon Linux AMIをベースにしたECS Containersのみ(Amazon Linux 2 AMIではありません)がcloud-init-perをサポートしています。

またAL1とAL2ではボリュームの構成も異なります。

起動テンプレートを使用して AWS Batch で Amazon EBS ボリュームのサイズを増やす方法を教えてください。

さらに調べていくと、以下の方法を見つけました。

Amazon Linux 2 ストレージ設定

デフォルトでは、Amazon Linux 2 ベースの Amazon ECS 最適化 AMI (Amazon ECS-optimized Amazon Linux 2 AMI、Amazon ECS-optimized Amazon Linux 2 (arm64) AMI、Amazon ECS GPU-optimized AMI) は単一の 30 GiB ルートボリュームが付属された状態で出荷されます。30 GiB ルートボリュームのサイズを起動時に変更して、コンテナインスタンスで使用可能なストレージを増やすことができます。このストレージは、オペレーティングシステム用と Docker イメージおよびメタデータ用に使用されます。

起動テンプレートを利用して、ルートボリュームを増やせばいいということですね。

やってみた

起動テンプレートの作成

Amazon Linux 2 (ECS Optimized)のAMIはamzn2-ami-ecs-hvm-で検索するとヒットします。 起動画面からルートのデバイス名を確認すると/dev/xvdaでした。

参考: Linux インスタンス上のデバイスの命名

/dev/xvdaに変更を加えた起動テンプレートを作成します(ストレージ以外はデフォルト設定を利用します)。 なお比較のため、30GBのテンプレートと100GBのテンプレートをバージョン違いで作っておきます。

※ 一部のパラメータについては、起動テンプレートで指定を行ってもBatchにより上書きされてしまうのでご注意ください。

起動テンプレートのサポート

コンピューティング環境の作成

起動テンプレートを使ってBatchのコンピューティング環境を作成します。プロビジョニングモデルは実際に使うことの多い「スポット」を指定しています。

起動テンプレートの項で/dev/xvdaを30GBに指定したテンプレートの名前とバージョンを指定します。

また、EC2設定のイメージタイプで「Amazon Linux 2」を指定してください。

なおデフォルトではこれらの設定は隠れているのでご注意ください。 また、コンピューティング環境作成後は起動テンプレートやそのバージョンの変更はできませんので、こちらもご注意ください。

作成したコンピューティング環境をクローンして、起動テンプレートの項でストレージを100GBにした起動テンプレートのバージョンを指定します。

これらのコンピューティング環境をそれぞれ適当なキューに関連づけておきます。

2つのコンピューティング環境ができました。

ジョブ定義と実行

デフォルトのamazonlinuxコンテナによるHellow Worldのコマンドをディスクの使用状況を表示するdf -hに変更しました。

それぞれの環境について実行します。

EC2インスタンスが起動してくるので、コンソールからストレージを確認します。

ジョブの結果を確認します。

コンテナインスタンス、コンテナともにストレージサイズが反映されていることがわかりました。

おわりに

今回はBatch@AL2のコンテナストレージを増やしてみました。

AL1と比較して以下3点がポイントになります。

  • AL1, AL2ともにコンテナストレージを増やすためには起動テンプレートを利用する
  • EBS ボリュームのサイズを増やす、というアプローチは同じであるものの、増やすべきボリュームが異なる
  • AL2ではユーザーデータのCloud init perは不要

これで大きなファイルをコンテナ内部で処理することも可能ですね。

以上、何かのお役に立てれば幸いです。