AWS Fargate 上の Amazon ECS コンテナのディスク容量を増やす方法を教えてください。
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 コンテナのディスク容量を増やすには、ユースケースに応じた手順を実行します。
エフェメラルストレージを構成する
次の手順を実行します。
-
タスク定義を作成または更新し、タスクにエフェメラルストレージを構成します。例:
"containerDefinitions": [ { "memory": 128, "essential": true, "name": "nginx", "image": "nginx" } ] "ephemeralStorage": { "sizeInGiB": 30 } -
更新したタスク定義を使用してタスクを実行します。
注: タスクがサービスに関連付けられている場合は、新しいタスク定義リビジョンを選択してサービスを更新してください。
詳細については、「Amazon ECS でバインドマウントを使用する」を参照してください。
Amazon EFS ボリュームでストレージを構成する
次の手順を実行します。
- Amazon EFS マウントターゲットのセキュリティグループを作成します。次に、ソースのタスクセキュリティグループからの NFS トラフィックをポート 2049 で許可するインバウンドルールを追加します。
- Amazon EFS ファイルシステムを作成し、セキュリティグループをマウントターゲットにアタッチします。
注: デフォルトでは、所定の AWS リージョンにおいて、各アベイラビリティーゾーンでマウントターゲットが構成されます。Fargate サービスの VPC サブネットが配置されたアベイラビリティーゾーンをすべて選択します。 - ファイルシステムのファイルシステム ID を書き留めておきます (例: fs-12345678)。
- タスク定義を作成または更新し、Amazon EFS ファイルシステムを含む Amazon ECS タスクのボリュームを構成します。例:
注: fs-12345678 をファイルシステム ID に置き換えてください。"volumes": [ { "name": "efs-test-volume", "efsVolumeConfiguration": { "fileSystemId": "fs-12345678", "transitEncryption": "ENABLED" } } ] - コンテナ定義セクションでコンテナ内のボリュームにマウントポイントを作成します。例:
注: containerPath は、ボリュームをマウントするコンテナ内のパスです。sourceVolume は、ボリューム名です。"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" } ] - 更新したタスク定義を使用してタスクを実行します。
注: タスクがサービスに関連付けられている場合は、新しいタスク定義リビジョンを選択してサービスを更新してください。
EBS ボリュームを Fargate にアタッチする
次の手順を実行します。
-
タスク定義を作成または更新し、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 } ] -
スタンドアロンタスクを起動します。または、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 に置き換えてください。
- トピック
- Containers
- 言語
- 日本語

関連するコンテンツ
質問済み 2年前