何が起こったか
AWS Batchでやってた、数GBの動画ファイルのフォーマット変換処理が、EC2 インスタンスのディスク容量不足が原因で、失敗する事態に。
調べてみた
標準のAMIだと、Dockerコンテナに割り当てられるディスクは、10GBが既定らしい。
参考:How do I increase the default 10 GiB storage limit with Docker container volumes for ECS?
答えもここに書いてある。例えば、20GBにしたかったら、
#cloud-boothook
#!/bin/bash
cloud-init-per once docker_options echo 'OPTIONS="${OPTIONS} --storage-opt dm.basesize=20G"' >> /etc/sysconfig/docker
と書け、と。
・・・、どこに?
やったこと
ディスクを拡張したECインスタンスをつくる
どうやら、AWS Batch(or ECS)標準で使われるAMIを拡張する必要があるらしい。
標準のAMIは、"Amazon ECS-Optimized Amazon Linux"というらしい。
なので、一度このAMIを使って、EC2インスタンスを作る。
この時、ユーザーデータにさっきのbashスクリプトを書いておいて、実際のディスク容量も増やしておく。
すると、Dockerコンテナが使えるディスク容量が増えた状態で、EC2インスタンスが立ち上がる。
AMIを作る
このEC2インスタンスでやる作業はないので、シャットダウンして、これをベースにAMIを作る。
AMIの作成は、コンソールのメニューから、選択するだけ。
AMIのIDは後から使うので覚えておく。
Batch用コンピューティング環境を作る
最後に、AWS Batchで使うコンピューティング環境作成時に、作成したAMIのIDを指定する。
これで、Batch実行時にディスク容量を増加したAMIをベースに、ECSの仮想マシンが起動するので、数GBクラスのデータの一次利用にも耐えられる。