こんにちは、rightgo09 です。今回は AWS Fargage のコンテナ間でのファイル共有についてまとめます。
よくありそうな例として、Fargate のタスク内にアプリケーションと HTTP サーバを別のコンテナとして設置したいが、アプリケーションが生成した静的ファイルたちは HTTP サーバに直接配信してもらいたい、という場合を考えます。
まとめ
アプリケーションの Dockerfile にて VOLUME 命令で共有したいディレクトリを指定して、タスク定義の HTTP サーバのコンテナの方でボリュームソースとして設定すれば共有が可能なようです。
まとめ画像
具体例
アプリケーションの Dockerfile
... WORKDIR /var/www/html COPY . /var/www/html/ RUN npm install RUN npm run build # 共有したいディレクトリを指定する。 # このディレクトリに静的ファイルたちがあって、HTTP サーバが直接配信してほしい。 VOLUME ["/var/www/html/public"]
HTTP サーバ(以下は Nginx)の 設定
server { # ルートを上記のディレクトリと同じように指定する。 # Nginx 単体ではこのディレクトリは存在していないので、マウントすることが前提となっている。 root /var/www/html/public; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_index index.php; fastcgi_pass localhost:9000; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name; }
ECS タスク定義で設定する
「読み取り専用」にチェックをする場合は、マウントするディレクトリには書き込みができません。
なお、現在、ECS の新しい管理画面では、まだこの設定ができず、通常の画面または JSON による設定が必要となるようです。
参考: