web-dev-qa-db-ja.com

ECSタスクでAmazon EFSをデータボリュームとしてマウントする方法

起動構成のユーザーデータ:

#!/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にマッピングする方法

5
sith

ランチ構成を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サービスを開始する必要があります。

2
sith