概要
次の手順を示します
- AWS Batchで起動されるコンテナのストレージ容量はデフォルトで10GBになっている
- 処理するデータ量が10GBを超える場合、ストレージ割当を増やしたい
- EC2の起動テンプレート(Launch Template)を使うことで(事前にAMIを作成せずに)対処する
補足
- AWS Batchの実態はAmazon ECSであり、ECSはDockerです
- Dockerが割り当てるストレージデフォルトが10GBなのでそういうことになるのだと思われます
デフォルトストレージが10GBであることを確認
- AWS Batchは準備手順が少し複雑で、はじめての利用者には難しいと思います
- そういう背景からだと思うのですが、手順ウィザードが準備されています
- ウィザードに従って設定すれば busyboxイメージ(docker image)を起動して「hello world」を出力(CloudWatch Logsへ)することができます
-
hello world
をdf -h
に変更することでコンテナに割り当てられたストレージ容量を確認します
ジョブ定義
コンテナプロパティ部分
実行結果
CloudWatchLogsで確認(10GBといいつつ、9.8GBですが)
これを100GBにします
ストレージ拡張設定(起動テンプレート作成)
EC2ページの起動テンプレート→起動テンプレートの作成で、「Storage100G」というテンプレートを作成しました
設定箇所は2箇所で、他はデフォルトです
設定箇所(1):ストレージ(ボリューム)
- Device Nameに
/dev/xvdcz
を指定します - ECSで使用されるAMIがこのデバイス名なので、合わせる感じです
設定箇所(2):高度な詳細 → ユーザーデータ
ユーザーデータに下記を指定します
起動時(かつDockerd起動前)にストレージオプションを指示する、ということですね
(参考)https://aws.amazon.com/jp/premiumsupport/knowledge-center/increase-default-ecs-docker-limit/
Content-Type: multipart/mixed; boundary="==BOUNDARY=="
MIME-Version: 1.0
--==BOUNDARY==
Content-Type: text/cloud-boothook; charset="us-ascii"
cloud-init-per once docker_options echo 'OPTIONS="${OPTIONS} --storage-opt dm.basesize=100G"' >> /etc/sysconfig/docker
--==BOUNDARY==--
ストレージ拡張設定(AWS Batchの設定)
コンピュート環境の作成
- コンピューティングリソースの設定→Launch templateに上記で設定した起動テンプレートを指定します
ジョブキューの編集
- ジョブキューを編集し、上記で作成したコンピュート環境を指定します
ストレージ拡張した状態でジョブを投入して結果を確認
ジョブ投入
- 最初に作成したジョブ(
df -h
を実行するジョブ)を投入します
実行結果
- CloudWatchLogsで確認
- Sizeが97.9Gになっていることが確認できます
まとめ
- かなり説明はハショったのでわかりにくいかもしれません
- うまく起動しなかったり、起動までに時間がかかるので検証シンドイ
- Fargateの場合はストレージ10GB制限は外せないですね(少なくとも現時点では)
参考にした記事
ありがとうございます 🙏