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

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

创建任务定义

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

创建新的任务定义

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

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

  3. Select launch type compatibilities (选择启动类型兼容性) 页面上,选择 FARGATE,然后选择 Next step (下一步)。

    注意

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

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

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

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

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

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

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

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

  7. 对于 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 为增量)
  8. 对于您的任务定义中的每个容器,请完成以下步骤:

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

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

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

  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 (添加卷)。有关更多信息,请参阅在 任务中使用数据卷

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

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

  14. 选择 Create

任务定义模板

空任务定义模板如下所示。您可以使用此模板创建任务定义,这些任务定义随后可粘贴到控制台 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" } } } ], "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