EFSファイルシステムでECSを作成してみた。
概要
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