Amazon ECSでDockerコンテナのボリュームサイズを増やす

2018.12.21

Amazon ECSのクラスターをEC2で作成後、Dockerコンテナのボリュームサイズを増やす手順です。

まずはデフォルトのコンテナのサイズをSSHして確認したところ9.8GBでした。

$ df -h
Filesystem                                                                                        Size  Used Avail Use% Mounted on
/dev/mapper/docker-259:2-263271-1858fe0abdfdf46d96e1c50ef197c8933ee5859d64dadd04b827832fcbd263eb  9.8G  173M  9.1G   2% /
・・・

それでは9.8GB から20GBに増やしてみます。Dockerコンテナのボリュームサイズを増やすためにはクラスターを作成した際に作られたCloudFormationのスタックを更新します。Management ConsoleでCloudFormationのスタック一覧を開きます。EC2ContainerService-クラスター名 のスタックがあると思いますので、これを選択し更新します。

「現在のテンプレートの使用」にチェックが入っていることを確認し、「次へ」ボタンを押して次に進みます。

スタックのパラメータの画面になります。userdataというパラメータがあるのでここを変更します。

以下のテキストをbase64でエンコードしたものを入れます。7行目のdm.basesize=には変更後のサイズを入れてください。ここでは20GBにしてみます。13行目のECS_CLUSTER=の部分にはクラスター名を入れてください。私はtestにしています。

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=20G"' >> /etc/sysconfig/docker

--==BOUNDARY==
Content-Type: text/x-shellscript; charset="us-ascii"

#!/bin/bash
echo ECS_CLUSTER=test >> /etc/ecs/ecs.config
echo ECS_BACKEND_HOST= >> /etc/ecs/ecs.config

--==BOUNDARY==--

CloudFormationのスタックを更新しただけではまだ変更されていません。EC2を新しく作成する必要があります。スタックの状況がUPDATE_COMPLETEになったら、EC2の画面を開いてクラスターに対応するEC2を削除します。

Autoscalingが設定されているので新しいEC2インスタンスが起動します。起動した後にSSHしてサイズを確認したところ20GBになっていました。

$ df -h
Filesystem                                                                                        Size  Used Avail Use% Mounted on
/dev/mapper/docker-259:2-263274-fcaa095d4bdd64eda7a57194c33e98d616f99b9c80642bb8f71df0e4c4589e8f   20G  181M   19G   1% /
・・・