起動構成のユーザーデータ:
#!/bin/bash
echo ECS_CLUSTER=prodcluster >> /etc/ecs/ecs.config
Sudo yum install -y nfs-utils
Sudo mkdir /home/ec2-user/web_file_uploads
Sudo chmod 777 /home/ec2-user/web_file_uploads
Sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 fs-abcdef.efs.ap-southeast-2.amazonaws.com:/ /home/ec2-user/web_file_uploads
タスク定義:
{
"networkMode": "bridge",
"containerDefinitions": [
{
"portMappings": [
...
],
"essential": true,
"mountPoints": [
{
"containerPath": "/src/temp_uploads/",
"sourceVolume": "web_file_uploads",
"readOnly": null
}
],
"name": "webapp",
"readonlyRootFilesystem": null,
"image": "911911911.dkr.ecr.ap-southeast-2.amazonaws.com/webapp:release6",
"memoryReservation": 150
}
],
"volumes": [
{
"Host": {
"sourcePath": "/home/ec2-user/web_file_uploads"
},
"name": "web_file_uploads"
}
],
"family": "webapp-task"
}
注:セキュリティグループに必要なポートを追加しました。 src/temp_uploadsフォルダーは、このタスク定義で起動された他のすべてのコンテナーインスタンス内にある必要があります。
問題:Sudo mount ... folder1
を使用して手動でマウントする場合、いくつかのファイルをそこに配置し、同じファイルをSudo mount ... folder2
フォルダーにマウントします。2には、正しくマウントされたことを示す変更が含まれています。
問題は、タスク定義によってマップされたボリュームがefs
をマップしないことです。代わりに、実際に/home/ec2-user/web_file_uploads
内にコンテンツを配置/使用します。このボリュームを実際にefs
にマッピングする方法
ランチ構成をEFSをマウントした直後にdockerサービスを再起動するに変更します。次に、ECSのみがマウントされたEFSをボリュームとして使用します。それ以外の場合は、元のディレクトリを使用します(マウントは無視されます)。
#!/bin/bash
echo ECS_CLUSTER=prodcluster >> /etc/ecs/ecs.config
Sudo yum install -y nfs-utils
Sudo stop ecs
Sudo mkdir /home/ec2-user/web_file_uploads
Sudo chmod 777 /home/ec2-user/web_file_uploads
Sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 fs-abcdef.efs.ap-southeast-2.amazonaws.com:/ /home/ec2-user/web_file_uploads
Sudo service docker restart
Sudo start ecs
注:ECSエージェントはdocker内で実行されるため、dockerサービスを再起動するとECSサービスが停止します。後でECSサービスを開始する必要があります。