

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

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

# 示例：修改 Amazon ECS taskdef
<a name="render-ecs-action-example-workflow"></a>

以下是包含**渲染 Amazon ECS 任务定义**操作以及构建和部署操作的完整工作流示例。该工作流旨在构建 Docker 映像并将其部署到 Amazon ECS 集群中。工作流包含以下按顺序运行的构造块：
+ **触发器** – 当您将更改推送到源存储库时，此触发器会自动启动工作流运行。有关触发器的更多信息，请参阅[使用触发器自动启动工作流运行](workflows-add-trigger.md)。
+ **构建**操作（`BuildDocker`）– 此操作在触发后会使用 Dockerfile 构建 Docker 映像，使用提交 ID 标记该映像并将其推送到 Amazon ECR。有关构建操作的更多信息，请参阅[使用工作流进行构建](build-workflow-actions.md)。
+ **渲染 Amazon ECS 任务定义**操作（`RenderTaskDef`）– 构建操作完成后，此操作将使用包含正确提交 ID 的 `image` 字段值更新位于源存储库根目录中的现有 `taskdef.json`。它使用新的文件名（`task-definition-random-string.json`）保存更新后的文件，然后创建包含此文件的输出构件。渲染操作还会生成一个名为 `task-definition` 的变量，并将该变量设置为新任务定义文件的名称。构件和变量将用于接下来的部署操作。
+ **部署到 Amazon ECS** 操作（`DeployToECS`）– **渲染 Amazon ECS 任务定义**操作完成后，**部署到 Amazon ECS** 操作将查找渲染操作（`TaskDefArtifact`）所生成的输出构件，查找其中包含的 `task-definition-random-string.json` 文件，并将该文件注册到 Amazon ECS 服务。之后，Amazon ECS 服务将按照 `task-definition-random-string.json` 文件中的说明操作，在 Amazon ECS 集群中运行 Amazon ECS 任务以及关联的 Docker 映像容器。

```
Name: codecatalyst-ecs-workflow
SchemaVersion: 1.0

Triggers:
  - Type: PUSH
    Branches:
      - main
Actions:
  BuildDocker:
    Identifier: aws/build@v1
    Environment:
      Name: codecatalyst-ecs-environment
      Connections:
        - Name: codecatalyst-account-connection
          Role: codecatalyst-ecs-build-role
    Inputs:
      Variables:
        - Name: REPOSITORY_URI
          Value: 111122223333.dkr.ecr.us-east-2.amazonaws.com/codecatalyst-ecs-image-repo
        - Name: IMAGE_TAG
          Value: ${WorkflowSource.CommitId}
    Configuration:
      Steps:
        #pre_build:
        - Run: echo Logging in to Amazon ECR...
        - Run: aws --version
        - Run: aws ecr get-login-password --region us-east-2 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-east-2.amazonaws.com
        #build:
        - Run: echo Build started on `date`
        - Run: echo Building the Docker image...
        - Run: docker build -t $REPOSITORY_URI:latest .
        - Run: docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG
        #post_build:
        - Run: echo Build completed on `date`
        - Run: echo Pushing the Docker images...
        - Run: docker push $REPOSITORY_URI:latest
        - Run: docker push $REPOSITORY_URI:$IMAGE_TAG
        
  RenderTaskDef:
    DependsOn: 
      - BuildDocker
    Identifier: aws/ecs-render-task-definition@v1
    Inputs:
      Variables:
        - Name: REPOSITORY_URI
          Value: 111122223333.dkr.ecr.us-east-2.amazonaws.com/codecatalyst-ecs-image-repo
        - Name: IMAGE_TAG
          Value: ${WorkflowSource.CommitId}
    Configuration:      
      task-definition: taskdef.json
      container-definition-name: codecatalyst-ecs-container
      image: $REPOSITORY_URI:$IMAGE_TAG 
    # The output artifact contains the updated task definition file. 
    # The new file is prefixed with 'task-definition'.
    # The output variable is set to the name of the updated task definition file. 
    Outputs:
      Artifacts:
        - Name: TaskDefArtifact
          Files: 
            - "task-definition*"
      Variables:
        - task-definition
        
  DeployToECS:
    Identifier: aws/ecs-deploy@v1
    Environment:
      Name: codecatalyst-ecs-environment
      Connections:
        - Name: codecatalyst-account-connection
          Role: codecatalyst-ecs-deploy-role
    #Input artifact contains the updated task definition file.
    Inputs:
      Sources: []
      Artifacts:
        - TaskDefArtifact
    Configuration:
      region: us-east-2
      cluster: codecatalyst-ecs-cluster
      service: codecatalyst-ecs-service
      task-definition: ${RenderTaskDef.task-definition}
```