Amazon-Elastic-Container-Service

ECS FargateのコンテナにEFSをマウントしてみた

はじめに

こんにちは、omkです。
ちょっとずつコンテナ勉強中です。

さて、ECS Fargate上で実行されているコンテナにEFSをマウントする方法を記載します。
ややこしいのでちょっと画像多めでいきます。

やってみた

今回はECS FargateでWEBサーバのコンテナを動かします。そのときにEFSをコンテンツ領域にマウントすることでEFSに保存したページをWEBサーバに出力させます。

利用するコンテナイメージは php:7.4-apache とします。

EFS作成

VPC作成は省略しまして、EFSの作成から進めます。
EFSを作成し、ECSのタスクを起動する想定のVPCにEFSのマウントターゲットを作成します。
マウントターゲットに設定するセキュリティグループでNFSを許可するようにします。
これでEFSが利用可能になります。

次にEFSにソースをアップします。
わざわざソースを上げるためにEC2を立てて接続するのも面倒なのでSimple File Manager for Amazon EFSを使います。

リンク先の「AWSコンソールで起動する」を選択して、CFnの画面に移ったら画面に従ってスタックを作成します。
あとはスタックの完成を待って、出力されたCloudFrontのURLを踏みます。

ログインユーザーは設定したメールアドレス、パスワードはメールに届くので確認してログインします。

EFSが認識されています。
このEFSの「Managed: false」をクリックすることで対象EFSのマウントポイントが作成されてアクセスできるようになります。
スタックの作成を待って、「Managed: true」になったら「File System ID」を選択します。
これでEFSにファイルをアップロードできるようになります。

さて、マウントポイント直下にhtmlという階層をつくり、そこにindex.htmlを配置します。
つまりapacheデフォルトのコンテンツ領域/var/wwwにマウントポイントをマウントすることで対象にアクセスした際に/var/www/html/index.htmlが表示される寸法です。

index.htmlの内容はテキトーに、

<html>
    <body>
        From EFS
    </body>
</html>

とします。このページが表示されるとEFSからファイルが渡されていることが分かります。

ファイルをアップしました。

これでEFSの準備は終わりです。

ECS作成

本題のECSの設定に移ります。

まずはECSクラスターを作成します。

次にタスク定義を作成します。

起動タイプをFargateとして適当に定義名を付けてスペックを設定します。タスク実行ロールは標準のものを利用します。

で、コンテナの定義の前にボリュームの設定を行います。
「ボリュームの追加」から作ったEFSを設定していきます。

ボリュームタイプを「EFS」、ファイルシステムIDに作成したEFSのIDを選択、アクセスポイントに「Simple File Manager」で作成されたものを選択します。
アクセスポイントを設定するので「転送時の暗号化」を有効にする必要があります。

こんな感じになります。

では、「追加」を押してボリュームの追加を完了します。

「コンテナの追加」に戻ります。
イメージを「php:7.4-apache」としてtcp80をポートマッピングします。

しばらく飛ばして「ストレージとログ」のセクションで、マウントポイントに設定したボリュームを選択し、コンテナパスを「/var/www」とします。

これでコンテナを追加してタスク定義を作成します。

では、最後にECSクラスターで作成したタスクを起動して動くことを確認します。
クラスターから「新しいタスクの実行」を選択して作成したタスク定義を選択、EFSを作成したVPCを選択して、(本環境ではパブリックサブネットにパブリックIP付きで)タスクを起動します。

タスクが「RUNNING」になっていることを確認してアクセスします。

正常に表示されましたのでEFSがコンテナにマウントされていることが確認できました。

おわりに

今回はWEBページを表示させるかたちでマウントしましたが、コンテナ側で発生した消したくない、もしくはコンテナ間で共有したいデータをEFSに置いておくのもいいかもしれないと思います。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA