この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
概要
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