跳至内容

如何在 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 挂载目标创建安全组。然后,添加入站规则,以接受端口 2049 上来自源任务安全组的 NFS 流量。
  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 卷。使用设置为 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
            }
        ]
  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 官方已更新 1 年前