如何在 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 容器的磁盘空间,请根据您的用例完成以下任务。
配置临时存储
完成以下步骤:
-
"containerDefinitions": [ { "memory": 128, "essential": true, "name": "nginx", "image": "nginx" } ] "ephemeralStorage": { "sizeInGiB": 30 } -
使用更新后的任务定义来运行任务。
**注意:**对于与服务关联的任务,请选择新的任务定义修订版来更新该服务。
有关详细信息,请参阅将绑定挂载与 Amazon ECS 结合使用。
使用 Amazon EFS 卷配置存储
完成以下步骤:
- 为 Amazon EFS 挂载目标创建安全组。然后,添加入站规则,以接受端口 2049 上来自源任务安全组的 NFS 流量。
- 创建 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 卷。使用设置为 true 的"configuredAtLaunch"选项。例如:
"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。
- 语言
- 中文 (简体)

AWS 官方已更新 2 年前
没有评论