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

所要時間3分
0

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

解決策

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. EFS ファイルシステムのセキュリティグループルールを編集し、インバウンド接続を許可します。Fargate タスクまたはサービスに関連付けられているセキュリティグループでは、ポート 2049 (ネットワークファイルシステム、または NFS) でのインバウンド接続を許可する必要があります。
  3. Amazon ECS サービスのセキュリティグループを更新し、Amazon EFS ファイルシステムのセキュリティグループへのアウトバウンド接続をポート 2049 で許可します。

タスク定義を作成する

  1. Amazon ECS Classic コンソールを開きます。
  2. ナビゲーションペインで [タスク定義][新しいタスク定義の作成] の順に選択します。
  3. [起動タイプの互換性を選択] セクションで [FARGATE] を選択した後、[次のステップ] を選択します。
  4. [タスクとコンテナ定義の設定] セクションの [タスク定義の名前] に、タスク定義の名前を入力します。
  5. [ボリューム] セクションで [ボリュームの追加] を選択します。
  6. [名前] に、ボリュームの名前を入力します。
  7. [ボリュームタイプ] に EFS と入力します。
  8. [ファイルシステム ID] に、Amazon EFS ファイルシステムの ID を入力します。
    注: ルートディレクトリ転送時の暗号化EFS AWS Identity and Access Management (IAM) 認証には、カスタムオプションを指定できます。"/" がルートディレクトリであるデフォルトオプションを使用することもできます。
  9. [追加] を選択します。
  10. [コンテナ定義] セクションで [コンテナを追加] を選択します。
  11. [ストレージとログ] セクションの [マウントポイント] サブセクションで、ステップ 5 で [ソースボリューム] として作成したボリュームを選択します。
  12. [コンテナパス] で、コンテナパスを選択します。
  13. (オプション) [環境] セクションの [エントリポイント] に、エントリポイントを入力します。
  14. [コマンド][df ,-h] コマンドを入力して、マウントされたファイルシステムを表示します。
    注: このエントリポイントとコマンドを使用することで、Amazon EFS ファイルシステムが正常にマウントされたかどうかをテストできます。デフォルトでは、コンテナは df -h コマンドが正常に実行された後に終了します。ステップ 16 の JSON タスク定義例では、無限の while ループを使用しているため、タスクが実行中のままになります。
  15. [追加] を選択します。
  16. タスク定義ウィザードの残りのフィールドに情報を入力し、[作成] を選択します。

次の例の JSON タスク定義は、無限ループを使用してタスクを実行し続けます。このタスク定義**では、**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) があることも確認してください。
タスク定義で複数の mountPointsボリュームを定義することで、複数の EFS を複数の宛先 (ContainerPath) にマウントすることができます。

Fargate タスクを実行してタスクログを確認する

  1. 以前に作成したタスク定義を使用して Fargate タスクを実行します。
    重要: タスクを実行するには、Fargate プラットフォームバージョン 1.4.0 を使用する必要があります。
  2. Amazon EFS ファイルシステムが Fargate コンテナに正常にマウントされたことを確認するには、タスクログを参照します。
    df -h の出力例を次に示します。
    2020-10-27 15:15:35Filesystem 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

関連情報

Amazon EFS ボリュームのセキュリティとアクセス制御

Amazon ECS タスク定義で Amazon EFS ファイルシステムを指定する

コンソールを使用して Amazon ECS 用に Amazon EFS ファイルシステムを設定する

AWS公式
AWS公式更新しました 24日前
コメントはありません

関連するコンテンツ