

亚马逊 CodeCatalyst 不再向新买家开放。现有客户可以继续正常使用该服务。有关更多信息，请参阅 [如何从中迁移 CodeCatalyst](migration.md)。

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

# 修改 Amazon ECS 任务定义
<a name="render-ecs-action"></a>

本节介绍如何使用 CodeCatalyst 工作流程更新亚马逊弹性容器服务 (Amazon [ECS) 任务定义](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html#welcome-task-definitions)文件中的`image`字段。为此，您必须将**渲染 Amazon ECS 任务定义**操作添加到工作流。此操作使用工作流在运行时提供的 Docker 映像名称更新任务定义文件中的映像字段。

**注意**  
您还可以通过此操作使用环境变量更新任务定义的 `environment` 字段。

**Topics**
+ [何时使用此操作](#render-ecs-action-when-to-use)
+ [“渲染 Amazon ECS 任务定义”操作的工作原理](#render-ecs-action-how-it-works)
+ [“渲染 Amazon ECS 任务定义”操作使用的运行时映像](#render-ecs-action-runtime)
+ [示例：修改 Amazon ECS taskdef](render-ecs-action-example-workflow.md)
+ [添加“渲染 Amazon ECS 任务定义”操作](render-ecs-action-add.md)
+ [查看更新后的任务定义文件](render-ecs-action-view.md)
+ [“渲染 Amazon ECS 任务定义”变量](render-ecs-action-variables.md)
+ [“渲染 Amazon ECS 任务定义”操作 YAML](render-ecs-action-ref.md)

## 何时使用此操作
<a name="render-ecs-action-when-to-use"></a>

如果您的工作流使用动态内容（例如提交 ID 或时间戳）来构建和标记 Docker 映像，请使用此操作。

如果您的任务定义文件包含始终保持不变的映像值，请不要使用此操作。在这种情况下，您可以手动将映像名称输入任务定义文件中。

## “渲染 Amazon ECS 任务定义”操作的工作原理
<a name="render-ecs-action-how-it-works"></a>

您必须在工作流中将**渲染 Amazon ECS 任务定义**操作与**构建**和**部署到 Amazon ECS** 操作结合使用。通过结合使用这些操作可实现以下目的：

1. **构建**操作会构建 Docker 映像，并使用名称、提交 ID、时间戳或其他动态内容对其进行标记。例如，您的构建操作可能与以下内容类似：

   ```
   MyECSWorkflow
     Actions:
       BuildAction:
         Identifier: aws/build@v1
         ...
         Configuration:
           Steps:
           # Build, tag, and push the Docker image...
             - Run: docker build -t MyDockerImage:${WorkflowSource.CommitId} .
             ...
   ```

   在前面的代码中，`docker build -t` 指令指示构建 Docker 映像，并在操作运行时使用提交 ID 对其进行标记。生成的映像名称可能与以下内容类似：

   `MyDockerImage:a37bd7e`

1. **渲染 Amazon ECS 任务定义**操作会将动态生成的映像名称 `MyDockerImage:a37bd7e` 添加到您的任务定义文件中，如下所示：

   ```
   {
       "executionRoleArn": "arn:aws:iam::account_ID:role/codecatalyst-ecs-task-execution-role",
       "containerDefinitions": [
           {
               "name": "codecatalyst-ecs-container",
               "image":  MyDockerImage:a37bd7e, 
               "essential": true,
               ...
               "portMappings": [
                   {
                       "hostPort": 80,
                       "protocol": "tcp",
                       "containerPort": 80
                   }
               ]
           }
       ],
   ...
   }
   ```

   （可选）您也可以让**渲染 Amazon ECS 任务定义**操作将环境变量添加到任务定义中，如下所示：

   ```
   {
     "executionRoleArn": "arn:aws:iam::account_ID:role/codecatalyst-ecs-task-execution-role",
     "containerDefinitions": [
       {
         "name": "codecatalyst-ecs-container",
         "image":  MyDockerImage:a37bd7e,
         ...
         "environment": [
           {
             name": "ECS_LOGLEVEL",
             value": "info"
           }
         ]
       }
     ],
   ...
   }
   ```

   有关环境变量的更多信息，请参阅《Amazon Elastic Container Service 开发人员指南》**中的[指定环境变量](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/taskdef-envfiles.html)。

1. **部署到 Amazon ECS** 操作会将更新后的任务定义文件注册到 Amazon ECS。注册更新后的任务定义文件会将新映像 `MyDockerImage:a37bd7e` 部署到 Amazon ECS 中。

## “渲染 Amazon ECS 任务定义”操作使用的运行时映像
<a name="render-ecs-action-runtime"></a>

**渲染 Amazon ECS 任务定义**操作在 [2022 年 11 月版映像](build-images.md#build.previous-image)上运行。有关更多信息，请参阅 [活动映像](build-images.md#build-curated-images)。