LoginSignup
6
7

More than 1 year has passed since last update.

【AWS】ECS構築の基礎 −EFSとの連携−

Posted at

はじめに

今回はECSタスクからEFSへアクセスすることに挑戦してみました。

ECS初心者向けの記事を何本か書いていますので、どれか参考になれば幸いです。

ECSでのEFSの使用

ECSでEFSを使用すると、すべてのECSタスクからファイルシステムデータにアクセスできます。
ECSタスク定義でEFSやコンテナマウントポイントを参照すると、ECSが自動的にファイルシステムをコンテナにマウントします。

実装

AZをまたいで起動したタスク間で共有できるようなファイルシステムを構築します。
以下が構築の流れとなります。

  • EFS用のセキュリティグループの作成
  • EFS(マウントターゲット、アクセスポイント)の作成
  • IAMロールecsTackRoleの作成
  • タスク定義の作成
  • サービス作成

EFS用のセキュリティグループの作成

EC2インスタンスとマウントターゲット間のトラフィックを有効にするために、これらのセキュリティグループに次のルールを設定する必要があります。

  • マウントターゲットに関連付けるセキュリティグループは、ファイルシステムをマウントするすべてのEC2インスタンスから、NFSポート上のTCPプロトコルへのインバウンドアクセスを許可
  • ファイルシステムをマウントする各EC2インスタンスには、NFSポート上のマウントターゲットへのアウトバウンドアクセスを許可

これらのルールを満たすように、以下のようなセキュリティグループを作成します。
セキュリティグループはEC2にアタッチしているものを選択します。
スクリーンショット 2021-07-20 22.44.45.png

EFS(マウントターゲット、アクセスポイント)の作成

EFSを新しく作成します。
スクリーンショット 2021-07-21 7.08.27.png

EC2をファイルシステムに接続するVPCとマウントターゲットを設定します。
今回は、マウントターゲットを2つのAZに置き、作成したセキュリティグループefs-sec-groupを選択します。
スクリーンショット 2021-07-21 7.09.58.png

ポリシーオプションにチェックをつけて、ファイルシステムを作成します。
スクリーンショット 2021-07-21 7.15.40.png

作成したファイルシステムを開いて、アクセスポイントを新しく作成します。
スクリーンショット 2021-07-21 7.20.52.png
スクリーンショット 2021-07-21 21.42.04.png
スクリーンショット 2021-07-21 7.24.55.png

IAMロールecsTaskRoleの作成

IAMロールを新しく作成します。

スクリーンショット 2021-07-21 7.29.19.png

ポリシーを新しく作成します。
REGIONには該当リージョン、ACCOUNT_IDにはアカウントID(マイアカウントの12桁の数字)、fs-xxxxxxにはファイルシステムID、fsap-xxxxxxにはアクセスポイントIDを記述します。
スクリーンショット 2021-07-21 7.31.20.png

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "elasticfilesystem:ClientMount",
                "elasticfilesystem:ClientWrite"
            ],
            "Resource": "arn:aws:elasticfilesystem:REGION:ACCOUNT_ID:file-system/fs-xxxxxx",
            "Condition": {
                "StringEquals": {
                    "elasticfilesystem:AccessPointArn": "arn:aws:elasticfilesystem:REGION:ACCOUNT_ID:access-point/fsap-xxxxxxxxxxxxx"
                }
            }
        }
    ]
}

最後に名前をつけます。
スクリーンショット 2021-07-21 7.40.10.png

ロールの作成に戻り、作成したポリシーefs-share-demoをアタッチします。
スクリーンショット 2021-07-21 7.41.40.png

ロール名をつけます。
スクリーンショット 2021-07-21 7.42.38.png

タスク定義の作成

EFSの準備が整ったので、タスク定義を作成します。
EFSとコンテナ(タスク)には以下のような関係があり、タスク定義にはボリュームを追加してあげる必要があります。

また、今回はcoderaiser/cloudcmdという、ファイルマネージャのコンテナイメージを使用します。
スクリーンショット 2021-07-21 21.01.43.png

latest-alpineを使用します。
スクリーンショット 2021-07-21 21.04.29.png

新しくタスク定義を作成します。
スクリーンショット 2021-07-21 21.07.38.png

"ボリュームの追加"から作成したEFSを設定します。
スクリーンショット 2021-07-21 21.51.29.png

スクリーンショット 2021-07-21 21.12.36.png
スクリーンショット 2021-07-21 21.14.10.png

サービス作成

新しくサービスを作成します。
スクリーンショット 2021-07-21 21.16.36.png

スクリーンショット 2021-07-21 21.18.05.png

スクリーンショット 2021-07-21 21.20.08.png

EC2からロードバランサーを開くと、リスナーIDHTTP:8888のデフォルトの転送先が確かにfile-explorer-svcとなっています。
スクリーンショット 2021-07-21 21.22.24.png

[ロードバランサーのDNS名]:8888で正常に開ければ成功です。
スクリーンショット 2021-07-22 11.09.13.png

試しにefs-shareディレクトリにefs-demo.txt、ルートディレクトリにAAAディレクトリを作成します。
スクリーンショット 2021-07-22 11.15.18.png

ページをロードするとタスクが切り替わるため、AAAディレクトリはなくなりますが、efs-demo.txtはそのまま残ります。
このように、タスク間でファイルシステムが共有されます。

参考資料

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7