创建任务定义 - Amazon Elastic Container Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

创建任务定义

您必须先创建任务定义,然后才能在 Amazon ECS 上运行 Docker 容器。您可以在单个任务定义中定义多个容器和数据卷。有关在任务定义中可用参数的更多信息,请参阅 任务定义参数.

创建新的任务定义

  1. https://console.amazonaws.cn/ecs/ 上打开 Amazon ECS 控制台。

  2. 在导航窗格中,选择 task definitions (任务定义)、Create new task definition (创建新任务定义)。

  3. Select compatibilities 页面上,选择您的任务应使用的启动类型,然后选择 Next step.

    注意

    Fargate 启动类型与 Windows 容器不兼容。

  4. 根据您选择的启动类型,按照下列一个选项卡下的步骤操作。

Fargate launch type

使用 Fargate 启动类型兼容性模板

如果您选择 Fargate ,请完成以下步骤:

  1. (可选) 如果您有任务定义的 JSON 表示形式,请完成以下步骤:

    1. Configure task and container definitions 页面上,滚动到页面底部并选择 Configure via JSON

    2. 将您的任务定义 JSON 粘贴到文本区域并选择 Save

    3. 验证您的信息并选择 Create

    滚动到页面底部,选择 Configure via JSON (通过 JSON 配置)

  2. Task Definition Name (任务定义名称) 中,为任务定义键入名称。最多能包含 255 个字母 (大写和小写字母)、数字、连字符和下划线。

  3. (可选)对于 Task Role (任务角色),选择 IAM 角色,该角色可提供权限,允许任务中的容器代表您调用 AWS API 操作。有关更多信息,请参阅 任务的 IAM 角色

    注意

    此处仅显示具有 Amazon EC2 Container Service Task Role 信任关系的角色。有关如何为任务创建 角色的更多信息,请参阅 。

  4. 对于 Task execution IAM role (任务执行 IAM 角色),选择您的任务执行角色,或者选择 Create new role (新建角色),以便控制台可以为您创建一个。有关更多信息,请参阅Amazon ECS 任务执行 IAM 角色

  5. 对于 Task size,选择 Task memory (GB)Task CPU (vCPU) 的值。下表显示了有效组合。

    CPU 值 内存值
    256 (.25 vCPU) 512 MB、1 GB、2 GB
    512 (.5 vCPU) 1GB、2GB、3GB、4GB
    1024 (1 vCPU) 2GB、3GB、4GB、5GB、6GB、7GB、8GB
    2048 (2 vCPU) 4GB 到 16GB 之间 (以 1GB 为增量)
    4096 (4 vCPU) 8 GB 到 30 GB(以 1 GB 为增量)
  6. 对于您的任务定义中的每个容器,请完成以下步骤:

    1. 选择 Add container (添加容器)

    2. 填写每个必填字段以及要在您的容器定义中使用的任何可选字段。Advanced container configuration (高级容器配置) 菜单中提供了更多容器定义参数。有关更多信息,请参阅 任务定义参数

    3. 选择 Add (添加),将容器添加到任务定义。

  7. (可选)对于服务集成,要配置 App Mesh 集成的参数,请选择启用 App Mesh 集成,然后执行以下操作:

    1. 对于网格名称,选择要使用的现有 App Mesh 服务网格。如果没有看到列出任何网格,则需要先创建一个网格。有关更多信息,请参阅 AWS App Mesh 用户指南 中的服务网格

    2. 对于 App Mesh 终端节点,请选择以下选项之一。

      • 虚拟节点 – 输入或选择以下信息。

        • 对于应用程序容器名称,选择要用于 App Mesh 集成的容器名称。必须已在任务定义中定义此容器。

        • 对于虚拟节点名称,选择要使用的现有 App Mesh 虚拟节点。如果您没有看到列出任何虚拟节点,则需要先创建一个虚拟节点。有关更多信息,请参阅 AWS App Mesh 用户指南 中的虚拟节点

        • 对于虚拟节点端口 – 将使用在 App Mesh 中的虚拟节点上设置的侦听器端口进行预先填充。

      • 虚拟网关 – 输入或选择以下信息。

        • 对于虚拟网关名称,请选择要使用的现有 App Mesh 虚拟网关。如果您没有看到列出任何虚拟网关,则需要先创建一个虚拟网关。有关更多信息,请参阅 AWS App Mesh 用户指南 中的虚拟网关

        • 对于虚拟网关端口 – 将使用在 App Mesh 中的虚拟网关上设置的侦听器端口进行预先填充。

    3. 对于 Envoy 映像,对于除 me-south-1 and ap-east-1 外的所有区域输入 840364872350.dkr.ecr.us-west-2.amazonaws.com/aws-appmesh-envoy:v1.15.1.0-prod。您可以将 us-west-2 替换为除 me-south-1 and ap-east-1 之外的任何区域。如果您的应用程序位于其中一个区域,则您还需要将 840364872350 替换为与您的区域相对应的值。有关更多信息,请参阅 AWS App Mesh 用户指南 中的 Envoy 映像

    4. 选择应用,然后选择确认。这将为任务添加一个 Envoy 代理容器以及支持它的设置。如果您选择了虚拟节点,它还将自动为下一步填充 App Mesh 代理配置设置。如果选择了虚拟网关,则代理配置将被禁用,因为它不用于虚拟网关。

  8. (可选)如果在服务集成中选择了虚拟节点,则对于代理配置,请验证所有预填充的值。有关这些字段的更多信息,请参阅更新服务中的“JSON”选项卡。

  9. (可选)对于日志路由器集成,您可以添加自定义日志路由配置。选择启用 FireLens 集成,然后执行以下操作:

    1. 对于类型,选择要使用的日志路由器类型。

    2. 对于映像,输入日志路由器容器的映像 URI。如果您选择 fluentbit 日志路由器类型,则映像字段会预先填充 AWS for Fluent Bit 映像。有关更多信息,请参阅使用 AWS for Fluent Bit 映像

    3. 选择 Apply。这将为名为 log_router 的任务定义创建一个新的日志路由器容器,并应用相应设置来提供支持。如果您更改了日志路由器集成字段,请再次选择应用以更新 FireLens 容器。

  10. (可选)要为您的任务定义数据卷,请选择 Add volume (添加卷)。有关更多信息,请参阅在任务中使用数据卷

    1. 对于 Name (名称),键入卷名称。最多能包含 255 个字母 (大写和小写字母)、数字、连字符和下划线。

  11. Tags (标签) 部分中,为要与任务定义关联的每个标签指定键和值。有关更多信息,请参阅标记您的 Amazon ECS 资源

  12. 选择 Create

EC2 launch type

使用 EC2 启动类型兼容性模板

如果您选择 EC2 ,请完成以下步骤:

  1. (可选) 如果您有任务定义的 JSON 表示形式,请完成以下步骤:

    1. Configure task and container definitions 页面上,滚动到页面底部并选择 Configure via JSON.

    2. 将您的任务定义 JSON 粘贴到文本区域并选择 Save.

    3. 验证您的信息并选择 Create.

    滚动到页面底部,选择 Configure via JSON (通过 JSON 配置).

  2. 对于 task definition Name,键入任务定义的名称。 最多能包含 255 个字母 (大写和小写字母)、数字、连字符和下划线。

  3. (可选)对于 Task Role (任务角色),选择一个 IAM 角色,该角色为任务中的容器提供代表AWSAPIs您调用 的权限。有关更多信息,请参阅任务的 IAM 角色.

    对于使用 EC2 启动类型的任务,这些权限通常由 Amazon ECS 容器实例 IAM 角色授予。有关更多信息,请参阅Amazon ECS 容器实例 IAM 角色.

    注意

    此处仅显示具有 Amazon EC2 Container Service 任务角色信任关系的角色。有关如何为任务创建 IAM 角色的更多信息,请参阅 为任务创建 IAM 角色和策略.

  4. (可选)对于 Network Mode (网络模式),选择要用于任务中的容器的 Docker 网络模式。可用的网络模式对应于 Docker 运行参考中的 Network settings (网络设置) 中所述的网络模式。如果您在以下步骤中选择 Enable App Mesh integration (启用 App Mesh 集成),则必须选择 awsvpc.

    默认 Docker 网络模式为 bridge。 如果网络模式设置为 none,则无法在容器定义中指定端口映射,并且任务的容器没有外部连接性。如果网络模式为 awsvpc,则任务会分配一个弹性网络接口。hostawsvpc 网络模式为容器提供最高的联网性能。这是因为他们使用 Amazon EC2 网络堆栈而不是 bridge 模式提供的虚拟化网络堆栈。但是,公开的容器端口将直接映射到相应的主机端口。因此,如果使用了端口映射,则您无法利用动态主机端口映射或在单个容器实例上运行同一任务的多个实例化。

  5. (可选)对于 Task execution role (任务执行角色),选择一个 IAM 角色,该角色为任务中的容器提供代表AWSAPIs您调用 的权限。

    对于使用 EC2 启动类型的任务,这些权限通常由 Amazon ECS 容器实例 IAM 角色授予,该角色在前面指定为 Task Role (任务角色). 无需指定任务执行角色。有关更多信息,请参阅Amazon ECS 任务执行 IAM 角色.

  6. (可选) 对于 Task size,选择 Task memory (GB)Task CPU (vCPU). 的值。支持Task CPU (vCPU)的值介于 128 个 CPU 单元 (0.125 vCPUs) 和 10240 个 CPU 单元 (10 vCPUs) 之间。

    注意

    Windows 容器将忽略任务级 CPU 和内存参数。我们建议为 Windows 容器指定容器级资源。

  7. 对于您的任务定义中的每个容器,请完成以下步骤。

    1. 选择 Add container.

    2. 输入每个必填字段和要在容器定义中使用的任何可选字段。高级容器配置菜单中提供了更多容器定义参数。有关更多信息,请参阅任务定义参数.

    3. 选择 Add (添加) 以将容器添加到任务定义。

  8. (可选)对于 Constraint (约束),您定义从此任务定义创建的任务如何放置在集群中。对于使用 EC2 启动类型的任务,则可以使用约束来根据可用区、实例类型或自定义属性来放置任务。有关更多信息,请参阅Amazon ECS 任务放置约束.

  9. (可选)对于服务集成,要配置 App Mesh 集成的参数,请选择启用 App Mesh 集成,然后执行以下操作:

    1. 对于网格名称,选择要使用的现有 App Mesh 服务网格。如果没有看到列出任何网格,则需要先创建一个网格。有关更多信息,请参阅 AWS App Mesh 用户指南 中的服务网格

    2. 对于 App Mesh 终端节点,请选择以下选项之一。

      • 虚拟节点 – 输入或选择以下信息。

        • 对于应用程序容器名称,选择要用于 App Mesh 集成的容器名称。必须已在任务定义中定义此容器。

        • 对于虚拟节点名称,选择要使用的现有 App Mesh 虚拟节点。如果您没有看到列出任何虚拟节点,则需要先创建一个虚拟节点。有关更多信息,请参阅 AWS App Mesh 用户指南 中的虚拟节点

        • 对于虚拟节点端口 – 将使用在 App Mesh 中的虚拟节点上设置的侦听器端口进行预先填充。

      • 虚拟网关 – 输入或选择以下信息。

        • 对于虚拟网关名称,请选择要使用的现有 App Mesh 虚拟网关。如果您没有看到列出任何虚拟网关,则需要先创建一个虚拟网关。有关更多信息,请参阅 AWS App Mesh 用户指南 中的虚拟网关

        • 对于虚拟网关端口 – 将使用在 App Mesh 中的虚拟网关上设置的侦听器端口进行预先填充。

    3. 对于 Envoy 映像,对于除 me-south-1 and ap-east-1 外的所有区域输入 840364872350.dkr.ecr.us-west-2.amazonaws.com/aws-appmesh-envoy:v1.15.1.0-prod。您可以将 us-west-2 替换为除 me-south-1 and ap-east-1 之外的任何区域。如果您的应用程序位于其中一个区域,则您还需要将 840364872350 替换为与您的区域相对应的值。有关更多信息,请参阅 AWS App Mesh 用户指南 中的 Envoy 映像

    4. 选择应用,然后选择确认。这将为任务添加一个 Envoy 代理容器以及支持它的设置。如果您选择了虚拟节点,它还将自动为下一步填充 App Mesh 代理配置设置。如果选择了虚拟网关,则代理配置将被禁用,因为它不用于虚拟网关。

  10. (可选)如果在服务集成中选择了虚拟节点,则对于代理配置,请验证所有预填充的值。有关这些字段的更多信息,请参阅更新服务中的“JSON”选项卡。

  11. (可选)对于日志路由器集成,您可以添加自定义日志路由配置。选择启用 FireLens 集成,然后执行以下操作:

    1. 对于类型,选择要使用的日志路由器类型。

    2. 对于映像,输入日志路由器容器的映像 URI。如果您选择 fluentbit 日志路由器类型,则映像字段会预先填充 AWS for Fluent Bit 映像。有关更多信息,请参阅使用 AWS for Fluent Bit 映像

    3. 选择 Apply。这将为名为 log_router 的任务定义创建一个新的日志路由器容器,并应用相应设置来提供支持。如果您更改了日志路由器集成字段,请再次选择应用以更新 FireLens 容器。

  12. (可选)要为您的任务定义数据卷,请选择 Add volume. 您可以创建一个绑定挂载或 Docker 卷。有关更多信息,请参阅在任务中使用数据卷.

    1. 对于 Name (名称),键入卷名称。最多能包含 255 个字母 (大写和小写字母)、数字、连字符和下划线。

    2. (可选) 要创建绑定挂载卷,请为 Source path (源路径) 键入主机容器实例上要提供给容器的路径。如果您将此字段保留为空,Docker 守护程序将为您分配一个主机路径。如果您指定源路径,数据卷将在主机容器实例上的指定位置保留,除非您手动将其删除。如果主机容器实例上不存在源路径,则 Docker 守护程序会创建它。如果该位置不存在,则源路径文件夹的内容将导出至容器。

    3. 要创建 Docker 卷,选择 Specify a volume driver (指定卷驱动程序).

      1. 对于 Driver (驱动程序),选择要使用的 Docker 卷驱动程序。驱动程序值必须与 Docker 提供的驱动程序名称相符。对您的容器实例使用 docker plugin ls 来检索驱动程序名称。

      2. 对于 Scope (范围),选择用于确定 Docker 卷生命周期的选项。当任务开始时,将自动预配置范围限定为 task 的 Docker 卷;而当任务停止时销毁此卷。任务停止后,范围限定为 shared 的 Docker 卷将持续存在。

      3. 选择 Enable auto-provisioning (启用自动预置) 以创建 Docker 卷(如果它尚不存在)。此选项仅适用于指定 shared 范围的卷。

      4. 对于 Driver options (驱动程序选项),指定要使用的驱动程序特定的键值。

      5. 对于 Volume labels (卷标签),指定要添加到 Docker 卷的自定义元数据。

  13. Tags (标签) 部分中,为要与任务定义关联的每个标签指定键和值。有关更多信息,请参阅标记您的 Amazon ECS 资源

  14. 选择创建.

任务定义模板

空任务定义模板如下所示。您可以使用此模板创建任务定义,这些任务定义随后可粘贴到控制台 JSON 输入区域或保存到文件并与 AWS CLI --cli-input-json 选项结合使用。有关更多信息,请参阅任务定义参数.

{ "family": "", "taskRoleArn": "", "executionRoleArn": "", "networkMode": "awsvpc", "containerDefinitions": [ { "name": "", "image": "", "repositoryCredentials": {"credentialsParameter": ""}, "cpu": 0, "memory": 0, "memoryReservation": 0, "links": [""], "portMappings": [ { "containerPort": 0, "hostPort": 0, "protocol": "tcp" } ], "essential": true, "entryPoint": [""], "command": [""], "environment": [ { "name": "", "value": "" } ], "environmentFiles": [ { "value": "", "type": "s3" } ], "mountPoints": [ { "sourceVolume": "", "containerPath": "", "readOnly": true } ], "volumesFrom": [ { "sourceContainer": "", "readOnly": true } ], "linuxParameters": { "capabilities": { "add": [""], "drop": [""] }, "devices": [ { "hostPath": "", "containerPath": "", "permissions": ["read"] } ], "initProcessEnabled": true, "sharedMemorySize": 0, "tmpfs": [ { "containerPath": "", "size": 0, "mountOptions": [""] } ], "maxSwap": 0, "swappiness": 0 }, "secrets": [ { "name": "", "valueFrom": "" } ], "dependsOn": [ { "containerName": "", "condition": "HEALTHY" } ], "startTimeout": 0, "stopTimeout": 0, "hostname": "", "user": "", "workingDirectory": "", "disableNetworking": true, "privileged": true, "readonlyRootFilesystem": true, "dnsServers": [""], "dnsSearchDomains": [""], "extraHosts": [ { "hostname": "", "ipAddress": "" } ], "dockerSecurityOptions": [""], "interactive": true, "pseudoTerminal": true, "dockerLabels": {"KeyName": ""}, "ulimits": [ { "name": "msgqueue", "softLimit": 0, "hardLimit": 0 } ], "logConfiguration": { "logDriver": "awslogs", "options": {"KeyName": ""}, "secretOptions": [ { "name": "", "valueFrom": "" } ] }, "healthCheck": { "command": [""], "interval": 0, "timeout": 0, "retries": 0, "startPeriod": 0 }, "systemControls": [ { "namespace": "", "value": "" } ], "resourceRequirements": [ { "value": "", "type": "GPU" } ], "firelensConfiguration": { "type": "fluentd", "options": {"KeyName": ""} } } ], "volumes": [ { "name": "", "host": {"sourcePath": ""}, "dockerVolumeConfiguration": { "scope": "task", "autoprovision": true, "driver": "", "driverOpts": {"KeyName": ""}, "labels": {"KeyName": ""} }, "efsVolumeConfiguration": { "fileSystemId": "", "rootDirectory": "", "transitEncryption": "ENABLED", "transitEncryptionPort": 0, "authorizationConfig": { "accessPointId": "", "iam": "ENABLED" } }, "FSxWindowsFileServerVolumeConfiguration": { "fileSystemId": "", "rootDirectory": "", "authorizationConfig": { "credentialsParameter": "", "domain": "" } } } ], "placementConstraints": [ { "type": "memberOf", "expression": "" } ], "requiresCompatibilities": ["EC2"], "cpu": "", "memory": "", "tags": [ { "key": "", "value": "" } ], "pidMode": "task", "ipcMode": "none", "proxyConfiguration": { "type": "APPMESH", "containerName": "", "properties": [ { "name": "", "value": "" } ] }, "inferenceAccelerators": [ { "deviceName": "", "deviceType": "" } ] }

您可以使用以下 AWS CLI 命令生成此任务定义模板:

aws ecs register-task-definition --generate-cli-skeleton