Fargate で実行されている Amazon ECS コンテナまたはタスクに Amazon EFS ファイルシステムをマウントする方法を教えてください。

最終更新日: 2020 年 12 月 17 日

Amazon Elastic File System (Amazon EFS) ファイルシステムを、AWS Fargate で実行している Amazon Elastic Container Service (Amazon ECS) コンテナまたはタスクにマウントしたいと考えています。

簡単な説明

Amazon EFS ファイルシステムを Fargate タスクまたはコンテナにマウントするには、タスク定義を作成してから、AWS リージョンのすべてのアベイラビリティーゾーンにわたってタスク内のコンテナでそのタスク定義を使用できるようにする必要があります。次に、Fargate タスクは Amazon EFS を利用して、ファイルシステムをタスク定義で指定したタスクに自動的にマウントします。

重要: 以下の解決方法は Fargate プラットフォームバージョン 1.4.0 以降で利用できます。このバージョンには、Amazon ECS のタスクおよびコンテナレベルで定義できる永続的ストレージがあります。Fargate プラットフォームバージョン 1.3.0 以前では、Amazon EFS を利用した永続的ストレージはサポートされていません。

解決方法セクションの手順を実行する前に、以下を用意する必要があります。

解決方法

Amazon EFS ファイルシステムを作成して設定する

1.    Amazon EFS ファイルシステムを作成し、EFS ID とセキュリティグループ ID を書き留めます。

注: Amazon EFS ファイルシステム、Amazon ECS クラスター、および Fargate タスクはすべて同じ VPC 内に存在する必要があります。

2.    ポート 2049 (ネットワークファイルシステム、または NFS) で Fargate タスクまたはサービスに関連付けられたセキュリティグループからのインバウンド接続を許可するには、EFS ファイルシステムのセキュリティグループルールを編集します

3.    Amazon ECS サービスのセキュリティグループを更新して、ポート 2049 で Amazon EFS ファイルシステムのセキュリティグループへのアウトバウンド接続を許可します。

タスク定義を作成します。

1.    Amazon ECS コンソールを開きます。

2.    ナビゲーションペインで [タスク定義] を選択し、次に [新規タスク定義の作成] を選択します。

3.    [起動タイプの互換性の選択] セクションで、[ FARGATE ] を選択してから、[次のステップ] をクリックします。

4.    [タスクとコンテナ定義の設定] セクションで、 [タスク定義名] にタスク定義の名前を入力します。

5.    [ボリューム] セクションで、[ ボリュームの追加 ] を選択します。

6.    [名前] にはポリシーの名前を入力します。

7.    [ボリュームタイプ] に「EFS」と入力します。

8.    [ファイルシステム ID] に、Amazon EFS ファイルシステムの ID を入力します。

注: ルートディレクトリ転送中の暗号化 および EFS IAM 認証のオプションをカスタムで指定できます。 または、デフォルトを受け入れることもできます (「/」はルートディレクトリです)。

9.    [追加] を選択します。

10.    [コンテナの定義] セクションで、[コンテナの追加] を選択します。

11.    [ストレージとログ] セクションの [マウントポイント] サブセクションで、手順 5 でソースボリューム用に作成したボリュームを選択します。

12.    [コンテナパス] で、お客様のコンテナパスを選択します。

13.    (オプション) [環境] セクションの [エントリポイント] に、お客様のエントリポイントを入力します。

14.    [コマンド] で [df ,-h] コマンドを入力して、マウントされたファイルシステムを表示します。 

注: エントリポイントとコマンドを使用して、Amazon EFS ファイルシステムが正常にマウントされているかどうかをテストできます。デフォルトでは、df-h コマンドが正常に実行された後、コンテナは終了します。ステップ 16 の JSON タスク定義の例では、無限の while ループを使用してタスクを実行したままにします。

15.    [追加] を選択します。

16.    タスク定義ウィザードの残りのフィールドに入力してから、[作成] を選択します。

次の例では、タスク定義efs-test という名前のデータボリュームが作成されます。nginx コンテナは、Any_Container_Path パスにホストデータボリュームをマウントします。

{
    "family": "sample-fargate-test",
    "networkMode": "awsvpc",
    "executionRoleArn": "arn:aws:iam::1234567890:role/ecsTaskExecutionRole",
    "containerDefinitions": [
        {
            "name": "fargate-app",
            "image": "nginx",
            "portMappings": [
                {
                    "containerPort": 80,
                    "hostPort": 80,
                    "protocol": "tcp"
                }
            ],
            "essential": true,
            "entryPoint": [
                "sh",
		"-c"
            ],
            "command": [
                "df -h && while true; do echo \"RUNNING\"; done"
            ],
            "mountPoints": [
                {
                    "sourceVolume": "efs-test",
                    "containerPath": "Any_Container_Path"
                }
            ],
            "logConfiguration": {
              "logDriver": "awslogs",
              "options": {
                "awslogs-group": "AWS_LOG_GROUP_PATH",
                "awslogs-region": "AWS_REGION",
                "awslogs-stream-prefix": "AWS_STREAM_PREFIX"
              }
            }
        }
    ],

    "volumes": [
        {
            "name": "efs-test",
            "efsVolumeConfiguration": {
                "fileSystemId": "fs-123xx4x5"
            }
        }
    ],

    "requiresCompatibilities": [
           "FARGATE"
       ],

    "cpu": "256",
    "memory": "512"
}
注: fileSystemIdlogConfigurationcontainerPath、およびその他のプレースホルダー値を、カスタム設定の値に置き換えます。また、タスク定義に、 awslogs ログドライバーをサポートするための実行ロール Amazon リソースネーム (ARN) があることを確認します。

Fargate タスクを実行し、タスクログをチェックする

1.    上記で作成したタスク定義を使用して Fargate タスクを実行します。

重要: Fargate プラットフォームバージョン 1.4.0 でタスクを実行してください。

2.    Amazon EFS ファイルシステムが Fargate コンテナに正常にマウントされたことを確認するには、タスクログを確認します

df-h の出力は次のようになります。

2020-10-27 15:15:35
Filesystem 1K-blocks Used Available Use% Mounted on

2020-10-27 15:15:35
overlay 30832548 9859324 19383976 34% /

2020-10-27 15:15:35
tmpfs 65536 0 65536 0% /dev

2020-10-27 15:15:35
shm 2018788 0 2018788 0% /dev/shm

2020-10-27 15:15:35
tmpfs 2018788 0 2018788 0% /sys/fs/cgroup

2020-10-27 15:15:35
fs-xxxxxxxx.efs.us-east-1.amazonaws.com:/ 9007199254739968 0 9007199254739968 0% /Any_Container_Path

2020-10-27 15:15:35
/dev/xvdcz 30832548 9859324 19383976 34% /etc/hosts

2020-10-27 15:15:35
tmpfs 2018788 0 2018788 0% /proc/acpi

2020-10-27 15:15:35
tmpfs 2018788 0 2018788 0% /sys/firmware

2020-10-27 15:15:35
tmpfs 2018788 0 2018788 0% /proc/scsi 

RUNNING