スキップしてコンテンツを表示

AWS Fargate 上の Amazon ECS コンテナのディスク容量を増やす方法を教えてください。

所要時間2分
0

AWS Fargate 上の Amazon Elastic Container Service (Amazon ECS) コンテナのディスク容量を増やしたいです。

簡単な説明

デフォルトでは、プラットフォームバージョン 1.40 で起動する Fargate タスクには、20 GiB のタスクストレージサイズが単一のエフェメラルボリュームとして含まれます。20 GiB を超えるストレージが必要な場合は、次のいずれかの方法で追加のストレージを構成します。

  • 200 GiB 以内のストレージには、Fargate のエフェメラルストレージを使用します。エフェメラルストレージは永続的ストレージではありません。
  • スケーラブルなファイルストレージには、Amazon Elastic File System (Amazon EFS) ボリュームを使用します。Amazon EFS ボリュームは永続的なストレージを提供します。
  • データ集約型ストレージには、EBS ボリュームを Fargate にアタッチします。EBS ボリュームは、非永続的です。

重要: Amazon EFS ボリュームの作成時には、Fargate サービスに割り当てた Amazon Virtual Private Cloud (Amazon VPC) およびサブネットと同一のものを使用してください。

解決策

**注:**AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

Fargate 上の Amazon ECS コンテナのディスク容量を増やすには、ユースケースに応じた手順を実行します。

エフェメラルストレージを構成する

次の手順を実行します。

  1. タスク定義を作成または更新し、タスクにエフェメラルストレージを構成します。例:

    "containerDefinitions": [ {
       "memory": 128,
         "essential": true,  
          "name": "nginx",
          "image": "nginx"
       }
    ]
    "ephemeralStorage": {
        "sizeInGiB": 30
        }
  2. 更新したタスク定義を使用してタスクを実行します。
    注: タスクがサービスに関連付けられている場合は、新しいタスク定義リビジョンを選択してサービスを更新してください。

詳細については、「Amazon ECS でバインドマウントを使用する」を参照してください。

Amazon EFS ボリュームでストレージを構成する

次の手順を実行します。

  1. Amazon EFS マウントターゲットのセキュリティグループを作成します。次に、ソースのタスクセキュリティグループからの NFS トラフィックをポート 2049 で許可するインバウンドルールを追加します。
  2. Amazon EFS ファイルシステムを作成し、セキュリティグループをマウントターゲットにアタッチします。
    注: デフォルトでは、所定の AWS リージョンにおいて、各アベイラビリティーゾーンでマウントターゲットが構成されます。Fargate サービスの VPC サブネットが配置されたアベイラビリティーゾーンをすべて選択します。
  3. ファイルシステムのファイルシステム ID を書き留めておきます (例: fs-12345678)。
  4. タスク定義を作成または更新し、Amazon EFS ファイルシステムを含む Amazon ECS タスクのボリュームを構成します。例:
    "volumes": [    {
          "name": "efs-test-volume",
          "efsVolumeConfiguration": {
               "fileSystemId": "fs-12345678",
               "transitEncryption": "ENABLED"
          }
       }
     ]
    注: fs-12345678 をファイルシステム ID に置き換えてください。
  5. コンテナ定義セクションでコンテナ内のボリュームにマウントポイントを作成します。例:
    "containerDefinitions": [ {
       "memory": 128,
        "portMappings": [
           {
              "hostPort": 80,
              "containerPort": 80,
               "protocol": "tcp"
            }
         ],
         "essential": true,
         "mountPoints": [
            {
            "containerPath": "/mount/path/inside/container",
            "sourceVolume": "efs-test-volume"
            }
          ],
          "name": "nginx",
          "image": "nginx"
       }
    ]
    注: containerPath は、ボリュームをマウントするコンテナ内のパスです。sourceVolume は、ボリューム名です。
  6. 更新したタスク定義を使用してタスクを実行します。
    注: タスクがサービスに関連付けられている場合は、新しいタスク定義リビジョンを選択してサービスを更新してください。

EBS ボリュームを Fargate にアタッチする

次の手順を実行します。

  1. タスク定義を作成または更新し、EBS ボリュームを起動時に構成するための設定を行います。"configuredAtLaunch" オプションを指定し、true に設定します。例:

    "containerDefinitions": [
            {
                "name": "nginx",
                "image": "public.ecr.aws/nginx/nginx:latest",
                "networkMode": "awsvpc",
                "portMappings": [
                    {
                        "name": "nginx-80-tcp",
                        "containerPort": 80,
                        "hostPort": 80,
                        "protocol": "tcp",
                        "appProtocol": "http"
                    }
                ],
                "mountPoints": [
                    {
                        "sourceVolume": "myEBSVolume",
                        "containerPath": "/mount/ebs",
                        "readOnly": true
                        }
                    ]
                }
            ],
            "volumes": [
            {
                "name": "myEBSVolume",
                "configuredAtLaunch": true
            }
        ]
  2. スタンドアロンタスクを起動します。または、JSON の一部としてボリューム構成を含め、サービスの一環としてタスクを起動します。
    スタンドアロンタスクの JSON 例:

    {
      "cluster": "mycluster",
      "taskDefinition": "mytaskdef",
      "volumeConfigurations": [
        {
          "name": "datadir",
          "managedEBSVolume": {
            "volumeType": "gp3",
            "sizeInGiB": 100,
            "roleArn": "arn:aws:iam:1111222333:role/ecsInfrastructureRole",
            "encrypted": true,
            "kmsKeyId": "arn:aws:kms:region:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
          }
        }
      ]
    }

    注: 例示した通り、タスクの起動にはスナップショットは必要ではありません。
    サービス JSON の例:

    {
        "cluster": "mycluster",
        "taskDefinition": "mytaskdef",
        "serviceName": "mysvc",
        "desiredCount": 2,
        "volumeConfigurations": [
            {
                "name": "myEbsVolume",
                "managedEBSVolume": {
                "roleArn":"arn:aws:iam:1111222333:role/ecsInfrastructureRole",
                "snapshotId": "snap-12345"
                }
            }
        ]
    }

    注: roleArn をアカウントの ecsInfrastructureRole に置き換えてください。snapshotId をボリューム作成元のスナップショット ID に置き換えてください。

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

関連するコンテンツ