EFSファイルシステムでECSを作成してみた。

2022.02.28

概要

EFSは、ECSタスクで使用するためのスケーラブルなファイルストレージとして使用できます。Amazon EFS ファイルシステムを使用すると、Amazon ECS のタスクのフリート全体のファイルシステムデータにアクセスできます。これにより、すべてのタスクから同じ永続的ストレージにアクセスできます。EFSは、EC2とFargate Launchタイプの両方で使用できます。

この記事では、EFSファイルシステムでECS (EC2 Launch Type)を作成してみました。

 

 

やってみた

クラスターの作成

  • ECS コンソールでCreate Clusterを選択しておきます。
  • Select cluster templateで[EC2 Linux + Networking]を選択しておきます。

 

 

  • クラスター名を入力して、次の設定でインスタンスを構成しておきます。
    • Provisioning Model : On-Demand Instance
    • EC2 instance type : t2.micro
    • Number of instances : 1
    • AMI : Linux 2 AMI
    • キーペアを選択しておきます。

 

 

  • 次の設定でネットワーキングを構成しておきます。
    • VPC : 新しいVPCを作成するか、既存のVPCを選択できます。既存のVPCと2つのサブネットを選択しておきます。
    • Auto assign public IP : Enabled
    • Security group : [Create a new security group]を選択しておきます。
  • Container instance IAM roleで[Create new role]を選択して、Clusterを作成しておきます。

 

 

EFS ファイルシステムの作成

 

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

  •  次の設定でEFSファイルシステムのセキュリティグループを作成ておきます。
    • VPC : ECSクラスターと同じVPC
    • Inbound rules
      • Type : NFS
      • Source : ECSのセキュリティグループ

 

ファイルシステムの作成

  • EFSのコンソールで、[Create file system]を選択します。
  • NetworkでECSと同じVPCを選択して、前の手順で作成したセキュリティグループを選択して、EFSファイルシステムを作成しておきます。

 

 

EC2インスタンスを使用してEFSファイルシステムにコンテンツを追加する

  • Amazon EFS ファイルシステムを Amazon EC2 インスタンスにマウントし、コンテンツを追加しておきます。

 

EC2 インスタンスの作成

  • この設定でEC2インスタンスを作成しておきます。
    • AMI : Linux 2 AMI
    • インスタンスタイプ : t2.micro
    • Configure Instance Details
      • Network : ECSと同じVPCを選択します。
      • Auto-assign Public IP : Enable
      • File systems : 前の手順で作成したEFSファイルシステムを選択します。EFSファイルシステムを選択すると、ユーザーデータが自動的に入力されます。
    • Security Group : Inbound - SSH and HTTP

 

 

EFS ファイルシステムにコンテンツを追加する

  • SSHを使用してEC2インスタンスに接続しておきます。
  • EFS ファイルシステムのマウント先のディレクトリに移動して、index.html ファイルを作成しておきます。

 

//change to the directory that the file system is mounted at.
cd /mnt/efs/fs1

//Create index.html file 
vi index.html

 

タスク定義を作成して実行する

 

タスク定義を作成する

  • ECS コンソールで[Create new Task Definition]を選択しておきます。
  • Launch type compatibilityとしてEC2を選択しておきます。

 

 

  • タスク定義名を入力して、VolumesでConfigure via JSONを選択しておきます。
  • 次のコードを追加して保存します。
  • タスク定義はデータボリュームを作成します。nginxコンテナは、データボリュームを NGINX ルートにマウントします。

 

{
    "containerDefinitions": [
        {
            "memory": 128,
            "portMappings": [
                {
                    "hostPort": 80,
                    "containerPort": 80,
                    "protocol": "tcp"
                }
            ],
            "essential": true,
            "mountPoints": [
                {
                    "containerPath": "/usr/share/nginx/html",
                    "sourceVolume": "efs-ecs"
                }
            ],
            "name": "nginx",
            "image": "nginx"
        }
    ],
    "volumes": [
        {
            "name": "efs-ecs",
            "efsVolumeConfiguration": {
                "fileSystemId": "your file system ID",
                "transitEncryption": "ENABLED"
            }
        }
    ],
    "family": "ecs-efs"
}

 

 

タスクを実行する

  • タスクを選択し、[Run new task]をクリックしておきます。

 

  • Launch typeをEC2として選択して、以前に作成したタスクとクラスターを選択して、タスクを実行しておきます。

 

テストする

  • クラスタで、コンテナインスタンスを展開してパブリックIPを検索します。
  • ブラウザでパブリックIPを使用してWebページをテストしておきます。

 

 

まとめ

EFSファイルシステムでECS (EC2 Launch Type)を作成してみました。FargateでEFSファイルシステムを試すこともできます。

Reference : ECS with EFS file system