2019. 12. 13
ECS 再入門 vol.3 ECS と共有ストレージ
この記事は Fusic その 2 Advent Calendar 2019 13 日目の記事です。
はじめに
- ECS 再入門 vol.1 ECS とは
- ECS 再入門 vol.2 ECS とオートスケール
- ECS 再入門 vol.3 ECS と共有ストレージ 👈 いまここ
前回は、ECS を利用する際のオートスケールについて書きました。
システムによっては、オートスケールしても所定の位置にある画像ファイルを参照したい
などの要件があるかと思います。
今回は、そんな時に必要になる ECSで共有ストレージを使用する方法
について書きたいと思います。
ECS と共有ストレージ
共有ストレージの種類
ECSで利用可能な共有ストレージは、下記になります。
-
非永続データボリューム
タスクが終了すると消滅する、揮発性のボリューム。
Fargateは非永続ボリュームしか使用できない。
-
レイヤストレージ
タスク毎に10GB
割り当てられ、そこからイメージの容量を差し引いた容量(イメージが4GBなら6GB)を書き込み領域として使用可能。コンテナ間で互いに独立しているため、一切の共有はできない。 -
ボリュームストレージ
タスク毎に4GB
割り当てられ、タスク定義内でDockerボリュームとして利用可能。コンテナ間で共有可能だが、コンテナインスタンス間では共有できないので、2台以上のFagateで共有することはできない。
-
-
永続データボリューム
タスクが終了しても消滅しないボリューム。
コンテナインスタンス間でのストレージ共有
前述の通り、コンテナ間でのストレージ共有はECSの基本的な機能で賄うことができますが、コンテナインスタンスを跨いだストレージ共有は基本的な機能のみでは難しいです。
そこで、下記のような方法をとります。
[方法1] コンテナインスタンスにS3等をマウントして、そのマウントポイントをコンテナにマウントする
- 共有ストレージとして、EFSやS3等のストレージサービスを用意する
- ユーザーデータや
fstab
を使用して、コンテナインスタンス起動時に、共有ストレージを所定の位置にマウントするように設定する - タスク定義のバインドマウントを使用して、2で共有ストレージをマウントしたパスを、さらにコンテナにマウントする
文章に起こすと複雑ですが、こちらの方法が正攻法です。ただし、2019年12月12日現在、EC2起動タイプにしかできない方法になります。
[方法2] アプリケーション側でS3等をストレージとして参照するように設定する
-
共有ストレージとして、S3等のマウントする必要のないストレージサービスを用意する
-
アプリケーション側で用意したS3等の外部ストレージを仮想的にストレージ領域として使用する
アプリケーションをECS専用に改修する必要がありますが、EC2起動タイプ、Fargate起動タイプ問わずに利用が可能です。そのため、Fargateを使用する場合は現状こちらの選択肢しか無いかと思います。
まとめ
今回はECSをオートスケールした際に発生する、共有ストレージの問題について少し詳しくまとめてみました。 EC2起動タイプでは、アプリケーション側で一切意識することなく通常のストレージのように共有ストレージを利用する方法が存在しますが、2019年12月12日現在、Fargate起動タイプには存在しません。
ただ、将来的にはFargateもEFSに対応して、今よりももっと利便性が上がると信じています。