ECS(Fargate)でEFSをマウントさせてみた(2023年版)
こんにちは、シマです。
皆さんはECSでEFSを使っていますか?ECS(Fargate)でEFSが利用できるようになったのは2020年4月なのでもう3年半も経過しています。
その間、Fargateもたくさんのアップデートがあったため、上記記事の頃とはAWS管理コンソールの画面も変わっていて、少し迷子になったので改めて記事にしておこうと思います。
今回は、シンプルにEFSの作成と既に構築済みのECS(Fargate)にマウントの設定を追加実装してみました。
構成
今回の構成は以下の通りです。
前述の通り、以下記載の設定の流れでは、既存のECSに対してEFSを追加していきます。
設定の流れ
セキュリティグループ作成
EFSへアタッチするセキュリティグループを作成します。AWS管理コンソールのVPCの画面から「Security groups」を選び「セキュリティグループを作成」を押下します。
任意のセキュリティグループ名、説明を設定し、対象のVPCを選択します。インバウンドルールではタイプはNFSを指定し、ソースはECSのサービスに割り当てるセキュリティグループを指定して作成します。
EFS作成
AWS管理コンソールのEFSの画面から「ファイルシステムの作成」を押下します。
最初に表示される画面は詳細な設定ができないため「カスタマイズ」を押下します。
任意の名前を入力します。また、今回は検証環境なので自動バックアップとライフサイクル管理は無効にします。
対象のVPCを選択し、マウントターゲットを配置するサブネットIDを指定します。セキュリティグループでは先ほど作成したものを指定します。
ファイルシステムポリシーはデフォルトのまま「次へ」を押下し、作成します。
ECS設定変更
AWS管理コンソールのECSの画面から「タスク定義」をクリックし、対象のタスク定義を選択し、「新しいリビジョンの作成」を押下します。
画面下の方にある「ストレージ- オプション」を変更します。「ボリュームの追加」を押下します。
「ボリューム - 1」内の設定値を設定します。ボリュームタイプはEFSを選択し、ボリューム名は任意の名前を設定します。「ファイルシステム ID」は先ほど作成したEFSを指定します。「コンテナマウントポイント」では、対象のコンテナや先ほど設定した「ボリューム - 1」のボリューム名をソースボリュームとして指定します。コンテナパスは「/mnt/efs」として設定しています。
サービスの更新を行い、タスク定義を反映させます。クラスターをクリックし、対象クラスターにある対象サービスを選択し、更新を押下します。
表示される画面から、先ほど作成したリビジョンを指定し、更新します。
動作確認
実際にマウントされたEFSへの書き込みや読み込みを行い動作確認を行います。まず、更新したリビジョンがタスクに反映されていることを確認します。
AWS管理コンソールからCloudShellを開き、以下のコマンドで1つ目のタスクのコンテナへ接続します。
aws ecs execute-command \ --cluster 【クラスタ名】 \ --task 【タスクID】 \ --container 【コンテナ名】 \ --interactive \ --command "/bin/bash"
dfコマンドで正しくマウントされていることを確認しました。
bash-5.2# df -h Filesystem Size Used Avail Use% Mounted on overlay 30G 9.7G 19G 35% / tmpfs 64M 0 64M 0% /dev shm 1.8G 0 1.8G 0% /dev/shm tmpfs 1.8G 0 1.8G 0% /sys/fs/cgroup fs-xxxx.efs.ap-northeast-1.amazonaws.com:/ 8.0E 0 8.0E 0% /mnt/efs /dev/nvme1n1 30G 9.7G 19G 35% /etc/hosts /dev/nvme0n1p1 4.9G 2.6G 2.3G 54% /managed-agents/execute-command tmpfs 1.8G 0 1.8G 0% /proc/acpi tmpfs 1.8G 0 1.8G 0% /sys/firmware
touchコマンドでEFS内にテストファイルを作成します。
bash-5.2# touch /mnt/efs/test-20231012-01.txt bash-5.2# ls -l /mnt/efs total 4 -rw-r--r-- 1 root root 0 Oct 12 00:53 test-20231012-01.txt
exitコマンドでコンテナから抜けて、先ほどと同様の手順でCloudShellから2つ目のタスクのコンテナへ接続し、lsコマンドでファイルを確認します。
bash-5.2# ls -l /mnt/efs total 4 -rw-r--r-- 1 root root 0 Oct 12 00:53 test-20231012-01.txt
1つ目のタスクのコンテナで作成したテキストファイルが、2つ目のタスクのコンテナから確認できました。
最後に
今回は、EFSの作成とECS(Fargate)にマウントの設定を追加してみました。IaCも良いですが、AWS管理コンソールで色々操作してみると新しい発見があって楽しいですね。
本記事がどなたかのお役に立てれば幸いです。