Amazon Elastic Container Service 部署操作参考 - AWS CodePipeline

Amazon Elastic Container Service 部署操作参考

您可以使用 Amazon ECS 操作来部署 Amazon ECS 服务和任务集。Amazon ECS 服务是部署到 Amazon ECS 集群的容器应用程序。Amazon ECS 集群是在云中托管容器应用程序的实例集。部署需要您在 Amazon ECS 中创建的任务定义,以及 CodePipeline 用于部署映像的映像定义文件。

重要

CodePipeline 的 Amazon ECS 标准部署操作会根据 Amazon ECS 服务使用的任务定义修订,创建自己的修订。如果您在不更新 Amazon ECS 服务的情况下为任务定义创建新的修订,则部署操作将忽略这些修订。

在创建管道之前,您必须事先创建 Amazon ECS 资源,在映像存储库中标记并存储映像,并将 BuildSpec 文件上传到您的文件存储库。

注意

本参考主题介绍 CodePipeline 的 Amazon ECS 标准部署操作。有关 CodePipeline 中 Amazon ECS 到 CodeDeploy 蓝绿部署操作的参考信息,请参阅 Amazon Elastic Container Service 和 CodeDeploy 蓝绿部署操作参考

操作类型

  • 类别:Deploy

  • 拥有者:AWS

  • 提供方:ECS

  • 版本:1

配置参数

ClusterName

必需:是

Amazon ECS 中的 Amazon ECS 集群。

ServiceName

必需:是

您在 Amazon ECS 中创建的 Amazon ECS 服务。

FileName

必需:否

您的映像定义文件,该 JSON 描述服务的容器名称以及映像和标签。您需要将此文件用于 ECS 标准部署。有关更多信息,请参阅输入构件适用于 Amazon ECS 标准部署操作的 imagedefinitions.json 文件

DeploymentTimeout

必需:否

Amazon ECS 部署操作超时(以分钟为单位)。该超时可配置为此操作的最大默认超时。例如:

"DeploymentTimeout": "15"

输入构件

  • 构件数:1

  • 描述:该操作会在管道的源文件存储库中查找 imagedefinitions.json 文件。映像定义文档是一个 JSON 文件,用于描述 Amazon ECS 容器名称以及映像和标签。CodePipeline 使用该文件从映像存储库(如 Amazon ECR)中检索映像。在未自动执行操作的情况下,您可以为管道手动添加 imagedefinitions.json 文件。有关 imagedefinitions.json 文件的信息,请参阅适用于 Amazon ECS 标准部署操作的 imagedefinitions.json 文件

    操作需要已推送到您的映像存储库的现有映像。由于映像映射由 imagedefinitions.json 文件提供,因此操作不要求包含 Amazon ECR 源以作为管道中的源操作。

输出构件

  • 构件数:0

  • 描述:输出构件不适用于此操作类型。

服务角色权限:Amazon ECS 标准操作

对于 Amazon ECS,以下是创建具有 Amazon ECS 部署操作的管道所需的最低权限。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "TaskDefinitionPermissions", "Effect": "Allow", "Action": [ "ecs:DescribeTaskDefinition", "ecs:RegisterTaskDefinition" ], "Resource": [ "*" ] }, { "Sid": "ECSServicePermissions", "Effect": "Allow", "Action": [ "ecs:DescribeServices", "ecs:UpdateService" ], "Resource": [ "arn:aws:ecs:*:111122223333:service/[[clusters]]/*" ] }, { "Sid": "ECSTagResource", "Effect": "Allow", "Action": [ "ecs:TagResource" ], "Resource": [ "arn:aws:ecs:*:111122223333:task-definition/[[taskDefinitions]]:*" ], "Condition": { "StringEquals": { "ecs:CreateAction": [ "RegisterTaskDefinition" ] } } }, { "Sid": "IamPassRolePermissions", "Effect": "Allow", "Action": "iam:PassRole", "Resource": [ "arn:aws:iam::111122223333:role/[[passRoles]]" ], "Condition": { "StringEquals": { "iam:PassedToService": [ "ecs.amazonaws.com", "ecs-tasks.amazonaws.com" ] } } } ] }

您可以选择加入以使用 Amazon ECS 中的标记授权。选择加入后,您必须授予以下权限:ecs:TagResource。有关如何选择加入以及如何确定是否需要权限和是否强制执行标记授权的更多信息,请参阅《Amazon Elastic Container Service 开发者指南》中的标记授权时间表

您必须添加 iam:PassRole 权限以使用 IAM 角色执行任务。有关更多信息,请参阅 Amazon ECS 任务执行 IAM 角色任务 IAM 角色。使用以下策略文本。

操作声明

YAML
Name: DeployECS ActionTypeId: Category: Deploy Owner: AWS Provider: ECS Version: '1' RunOrder: 2 Configuration: ClusterName: my-ecs-cluster ServiceName: sample-app-service FileName: imagedefinitions.json DeploymentTimeout: '15' OutputArtifacts: [] InputArtifacts: - Name: my-image
JSON
{ "Name": "DeployECS", "ActionTypeId": { "Category": "Deploy", "Owner": "AWS", "Provider": "ECS", "Version": "1" }, "RunOrder": 2, "Configuration": { "ClusterName": "my-ecs-cluster", "ServiceName": "sample-app-service", "FileName": "imagedefinitions.json", "DeploymentTimeout": "15" }, "OutputArtifacts": [], "InputArtifacts": [ { "Name": "my-image" } ] },

下列相关资源在您使用此操作的过程中会有所帮助。