AWS CloudFormation
User Guide (API Version 2010-05-15)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

AWS::ECS::Service

AWS::ECS::Service 资源创建运行并维护所需数量的任务和关联的负载均衡器的 Amazon Elastic Container Service (Amazon ECS) 服务。

语法

要在 AWS CloudFormation 模板中声明此实体,请使用以下语法:

JSON

{ "Type" : "AWS::ECS::Service", "Properties" : { "Cluster" : String, "DeploymentConfiguration" : DeploymentConfiguration, "DesiredCount" : Integer, "LoadBalancers" : [ Load Balancer Objects, ... ], "PlacementConstraints" : [ PlacementConstraints, ... ], "Role" : String, "PlacementStrategies" : [ PlacementStrategies, ... ], "ServiceName" : String, "TaskDefinition" : String } }

YAML

Type: "AWS::ECS::Service" Properties: Cluster: String DeploymentConfiguration: DeploymentConfiguration DesiredCount: Integer LoadBalancers: - Load Balancer Objects, ... PlacementConstraints: - PlacementConstraints, ... PlacementStrategies: - PlacementStrategies, ... Role: String ServiceName: String TaskDefinition: String

属性

注意

当您使用 Auto Scaling 或 Amazon Elastic Compute Cloud (Amazon EC2) 为 Amazon ECS 群集创建容器实例时,Amazon ECS 服务资源必须对 Auto Scaling 组或 Amazon EC2 实例具有依赖关系。这样,在 AWS CloudFormation 创建 Amazon ECS 服务之前就可以使用容器实例并将它们与 Amazon ECS 群集相关联。

Cluster

要在其上运行 Amazon ECS 服务的群集的名称或 Amazon 资源名称 (ARN)。如果未指定群集,则 Amazon ECS 使用默认群集。

Required: No

Type: String

更新要求替换

DeploymentConfiguration

配置在部署期间运行的任务数。

Required: No

Type: Amazon Elastic Container Service 服务 DeploymentConfiguration

更新要求无需中断

PlacementConstraints

服务中任务的放置约束。

Required: No

Type: Amazon Elastic Container Service Service PlacementConstraint

更新要求替换

PlacementStrategies

决定如何放置服务任务的放置策略。

Required: No

Type: Amazon Elastic Container Service Service PlacementStrategies

更新要求替换

DesiredCount

要在群集上运行的并发任务数。使用 TaskDefinition 属性可指定任务。

Required: Conditional。仅在创建 Amazon ECS 服务时是必需的。

Type: Integer

更新要求无需中断

LoadBalancers

要与群集关联的负载均衡器对象的列表。如果您指定了 Role 属性,那么还必须指定 LoadBalancers。有关可为每个服务指定的负载均衡器的数目的信息,请参阅 Amazon Elastic Container Service Developer Guide 中的服务负载均衡

Required: Conditional

Type: Amazon Elastic Container Service 服务 LoadBalancers 列表

更新要求替换

Role

允许您的 Amazon ECS 容器代理调用负载均衡器的 AWS Identity and Access Management (IAM) 角色的名称或 ARN。

注意

在某些情况下,您可能需要添加对服务角色策略的依赖关系。有关更多信息,请参阅 DependsOn 属性 中的 IAM 角色策略。

Required: Conditional。只在指定了 LoadBalancers 属性时才需要。

Type: String

更新要求替换

ServiceName

您的服务的名称。名称长度不得超过 255 个字符,且只能使用字母 (大写和小写字母)、数字、连字符和下划线。一个群集中的服务名称必须唯一,但是您可以为一个区域或多个区域中多个群集中的服务提供相似的名称。

Required: No

Type: String

更新要求替换

TaskDefinition

要在群集上运行的任务定义的 ARN (包括修订号),如 arn:aws:ecs:us-east-1:123456789012:task-definition/mytask:3。您无法使用 :latest 指定修订,因为它是不确定的。例如,如果 AWS CloudFormation 需要回滚更新,它将不知道要回滚到哪个版本。

Required: Yes

Type: String

更新要求时而中断

返回值

Ref

当此资源的逻辑 ID 提供给 Ref 内部函数时,Ref 会返回 ARN。

在以下示例中,Ref 函数将返回 MyECSService 服务的 ARN,如 arn:aws:ecs:us-west-2:123456789012:service/sample-webapp

{ "Ref": "MyECSService" }

有关使用 Ref 功能的更多信息,请参阅参考

Fn::GetAtt

Fn::GetAtt 返回一个此类型指定属性的值。以下为可用属性和示例返回值。

Name

Amazon ECS 服务的名称,例如 sample-webapp

有关使用 Fn::GetAtt 的更多信息,请参见 Fn::GetAtt

示例

定义基本 Amazon ECS 服务

以下示例定义一项 Amazon ECS 服务,该服务使用在相同模板中的其他位置声明的群集和任务定义:

JSON

"WebApp": { "Type": "AWS::ECS::Service", "Properties" : { "Cluster": { "Ref": "cluster" }, "DesiredCount": { "Ref": "desiredcount" }, "TaskDefinition" : { "Ref": "taskdefinition" } } }

YAML

WebApp: Type: "AWS::ECS::Service" Properties: Cluster: Ref: "cluster" DesiredCount: Ref: "desiredcount" TaskDefinition: Ref: "taskdefinition"

将应用程序负载均衡器关联至服务

下面的示例通过引用 AWS::ElasticLoadBalancingV2::TargetGroup 资源,将应用程序负载均衡器关联至 Amazon ECS 服务。

注意

Amazon ECS 服务需要对 应用程序负载均衡器 侦听器规则和 应用程序负载均衡器 侦听器的显式依赖。这可以防止该服务在侦听器准备就绪前启动。

JSON

"service" : { "Type" : "AWS::ECS::Service", "DependsOn": ["Listener"], "Properties" : { "Role" : { "Ref" : "ECSServiceRole" }, "TaskDefinition" : { "Ref" : "taskdefinition" }, "DesiredCount" : "1", "LoadBalancers" : [{ "TargetGroupArn" : { "Ref" : "TargetGroup" }, "ContainerPort" : "80", "ContainerName" : "sample-app" }], "Cluster" : { "Ref" : "ECSCluster" } } }

YAML

service: Type: AWS::ECS::Service DependsOn: - Listener Properties: Role: Ref: ECSServiceRole TaskDefinition: Ref: taskdefinition DesiredCount: 1 LoadBalancers: - TargetGroupArn: Ref: TargetGroup ContainerPort: 80 ContainerName: sample-app Cluster: Ref: ECSCluster

更多信息