Amazon ECS で Amazon EFS を使用して Docker ボリュームを作成する方法

最終更新日: 2019 年 6 月 10 日

Docker ボリュームを作成して Amazon Elastic Container Service(Amazon ECS) で Amazon Elastic File System(Amazon EFS) を使用しています。次に、クラスタ インスタンスに追加のボリュームプラグインをインストールすることなくデータを保持して共有できます。どうすればできますか?

解決方法

1.    Amazon EFS ファイルシステムを作成します。

2.    新しいファイルシステムの設定をコピーし、コピーした設定を使用してファイルシステムをマウントします。

重要 :Linux ディストリビューションに 応じて、ファイルシステムのマウント前に NFS クライアントを インストールします。次の例では、ファイルシステムはマウントされた別の Amazon Elastic Compute Cloud (Amazon EC2) インスタンスにローカルの Amazon Virtual Private Cloud(Amazon VPC) からマウントされます。index.html ファイルは、Amazon EFS マウントポイントのルートレベルで作成されます。

sudo mkdir /efs
sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport fs-XXXXXX.efs.us-east-1.amazonaws.com:/ /efs
echo "<html><body><h1>It works! EFS Demo :)</h1></body></html>" | sudo tee /efs/index.html

注: 後でタスク定義を作成するには、ファイルシステム設定が必要になります。fs-XXXXXXus-east-1 を必ず自分の設定した値で置き換えてください。

3.    Amazon ECS クラスターを作成します

注 : このステップでは、Amazon ECS クラスターを EC2 Linux+Networking テンプレートから作成していることを想定します。Amazon EFS では ネットワーキングのみ (Fargate) と EC2 Windows+ ネットワーキング テンプレートをサポートしていません。

4.    Amazon EFS ファイル システムで作成したものと同じ VPC でクラスター インスタンスを起動します

5.    セキュリティグループを作成 または既存のセキュリティグループを使用して、マウントターゲットに関連付けます。

重要 : マウントターゲットは、Amazon ECS のすべての Amazon EC2 インスタンスから NFS ポート (2049) 上の TCP プロトコルへのインバウンドアクセスを許可する必要があります。

6.    タスク定義を作成します

次の例では、タスク定義は httpd コンテナイメージで作成されます。Docker ボリューム efs-demo は、Amazon EFS により提供される設定を使用して、JSON テンプレートのボリュームプロパティで定義されます。sourceVolume プロパティは、efs-demo に設定され、containerPath はプロパティがに設定されます。

{
    "containerDefinitions": [
        {
            "memory": 128,
            "portMappings": [
                {
                    "hostPort": 80,
                    "containerPort": 80,
                    "protocol": "tcp"
                }
            ],
            "essential": true,
            "name": "apache-container",
            "image": "httpd",
            "cpu": 1024,
            "mountPoints": [
                {
                    "containerPath": "/usr/local/apache2/htdocs/",
                    "sourceVolume": "efs-demo"
                }
            ]
        }
    ],
    "networkMode": "bridge",
    "requiresCompatibilities": [
        "EC2"
    ],
    "volumes": [
        {
            "name": "efs-demo",
            "host": null,
            "dockerVolumeConfiguration": {
                "autoprovision": true,
                "labels": null,
                "scope": "shared",
                "driver": "local",
                "driverOpts": {
                    "type": "nfs",
                    "device": ":/",
                    "o": "addr=fs-XXXXXX.efs.us-east-1.amazonaws.com,nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport"
                }
            }
        }
    ],
    "family": "taskdefinition-demo-efs",
    "placementConstraints": [],
    "memory": null,
    "cpu": null
}

注: fs-XXXXXXus-east-1 を必ず自分の設定した値で置き換えてください。

7.    Amazon ECS クラスターでタスクを実行し 、ステップ 3 で作成したを選択します。

8.    Amazon EFS ボリューム内で作成されたテストファイルを確認するには、 Amazon ECS コンソール を開き、クラスタを選択します。[タスク] タブを選択し、ステップ 6 で作成したタスクを選択するためにドロップダウン矢印を選びます。[詳細] セクションの情報を確認することができます。[ネットワークバインディング] で、外部リンクが表示されます。[マウントポイント] でコンテナパスとソースボリュームが表示されます。

注 : マウントステータスを確認する前に、タスクが実行中のステータスである必要があります。


この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合