Amazon Elastic Container Service
开发人员指南 (API 版本 2014-11-13)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

ecs-cli compose service up

从复合文件创建 Amazon ECS 服务(如果该服务不存在)并在集群上运行该任务的一个实例(createstart 命令的组合)。此命令将服务的预期数量更新为 1

语法

ecs-cli compose service up [--deployment-max-percent n] [--deployment-min-healthy-percent n] [--load-balancer-name value|--target-group-arn value] [--container-name value] [--container-port value] [--role value] [--health-check-grace-period integer] [--timeout value] [--launch-type launch_type] [--create-log-groups] [--force-deployment] [--enable-service-discovery] [--vpc value] [--private-dns-namespace value] [--private-dns-namespace-id value] [--public-dns-namespace value] [--public-dns-namespace-id value] [--sd-container-name value] [--sd-container-port value] [--dns-ttl value] [--dns-type value] [--healthcheck-custom-config-failure-threshold value] [--update-service-discovery] [--scheduling-strategy value] [--tags key1=value1,key2=value2] [--disable-ecs-managed-tags] [--help]

选项

名称

描述

--deployment-max-percent

指定部署期间可在服务中保持运行状态的运行任务数的上限(服务的 desiredCount 的百分比)。有关更多信息,请参阅 maximumPercent

默认值:200

必需:否

--deployment-min-healthy-percent

指定部署期间必须在服务中保持运行状态以及正常运行的运行任务数的下限(服务的 desiredCount 的百分比)。有关更多信息,请参阅 minimumHealthyPercent

默认值:100

必需:否

--target-group-arn

指定要与服务关联的之前配置的 Elastic Load Balancing 目标组的完整 Amazon 资源名称 (ARN)。

必需:否

--container-name

指定容器名称(与在容器定义中显示的相同)。如果指定了负载均衡器或目标组,则此参数是必需的。

必需:否,除非指定了负载均衡器或目标组。

--container-port

指定要与负载均衡器关联的容器上的端口。此端口必须对应于服务的任务定义中的 containerPort。如果指定了负载均衡器或目标组,则此参数是必需的。

必需:否,除非指定了负载均衡器或目标组。

--load-balancer-name

指定要与服务关联的之前配置的 Elastic Load Balancing 负载均衡器的名称。

必需:否

--role

指定允许 Amazon ECS 代表您调用负载均衡器或目标组的 IAM 角色的名称或完整 Amazon 资源名称 (ARN)。当您要将负载均衡器或目标组用于服务时才需要此参数。如果指定了角色参数,您还必须指定负载均衡器名称或目标组 ARN,以及容器名称和容器端口。

必需:否,除非指定了负载均衡器或目标组。

--health-check-grace-period

指定在任务首次启动后,Amazon ECS 服务计划程序应忽略不正常的 Elastic Load Balancing 目标运行状况检查的时长(以秒为单位)。

必需:否

--create-log-groups

创建您的 Compose 文件中指定的 CloudWatch 日志组。

必需:否

--force-new-deployment

强制实施服务的新部署。

必需:否

--enable-service-discovery

指定是否要为此服务启用服务发现。

必需:否

--vpc

指定将附加到 service discovery 的私有 DNS 命名空间的 VPC。如果指定了 --private-dns-namespace,则需要此参数。

必需:否

--private-dns-namespace

指定要用于 service discovery 的私有 DNS 命名空间的名称。如果此命名空间不存在,Amazon ECS CLI 将自动进行创建。例如,如果命名空间是 corp,则可以通过 DNS,用 foo.corp 访问名为 foo 的服务。如果使用此参数,您还必须使用 --vpc 参数指定 VPC。

必需:否

--private-dns-namespace-id

指定要用于 service discovery 的现有的私有 DNS 命名空间的 ID。如果使用此参数,您将无法指定 --private-dns-namespace--vpc

必需:否

--public-dns-namespace

指定要用于 service discovery 的公有 DNS 命名空间的名称。例如,如果命名空间是 corp,则可以通过 DNS,用 foo.corp 访问名为 foo 的服务。

必需:否

--public-dns-namespace-id

指定要用于 service discovery 的现有的公有 DNS 命名空间的 ID。如果使用此参数,您将无法指定 --public-dns-namespace

必需:否

--sd-container-name

指定容器的名称,在 Docker Compose 文件中称为服务。有关更多信息,请参阅服务配置参考。如果您使用 SRV 记录,则需要此参数。

必需:否,除非使用 SRV DNS 记录。

--sd-container-port

指定将用于 service discovery 的容器上的端口。如果您使用 SRV 记录,则需要此参数。

必需:否,除非使用 SRV DNS 记录。

--dns-ttl

指定您希望 DNS 解析程序缓存用于 service discovery 的 DNS 记录设置的时长(以秒为单位)。

默认值:60

必需:否

--dns-type

指定用于 service discovery 的 DNS 记录的类型。接受的值为 ASRV。如果您的任务使用 bridgehost 网络模式,则需要 SRV 记录。如果您的任务使用 awsvpc 网络模式,A 记录为默认值。

必需:否

--healthcheck-custom-config-failure-threshold

指定在收到 UpdateInstanceCustomHealthStatus 请求后,您希望 service discovery 服务在更改运行状况之前等待的 30 秒间隔数目。

默认值:1

必需:否

--update-service-discovery

如果指定,将导致更新针对 --dns-ttl--healthcheck-custom-config-failure-threshold 的 service discovery 服务设置。

必需:否

--scheduling-strategy value

指定要用于服务的计划策略。

There are two service scheduler strategies available:

  • REPLICA—The replica scheduling strategy places and maintains the desired number of tasks across your cluster. By default, the service scheduler spreads tasks across Availability Zones. You can use task placement strategies and constraints to customize task placement decisions. For more information, see 副本.

  • DAEMON—The daemon scheduling strategy deploys exactly one task on each active container instance that meets all of the task placement constraints that you specify in your cluster. When using this strategy, there is no need to specify a desired number of tasks, a task placement strategy, or use Service Auto Scaling policies. For more information, see 守护程序.

    注意

    Fargate tasks do not support the DAEMON scheduling strategy.

有关更多信息,请参阅 服务计划程序概念

类型:字符串

有效值:REPLICA | DAEMON

默认值:REPLICA

必需:否

--tags key1=value1,key2=value2

指定要用于您的 AWS 资源的元数据。每一个标签都包含一个键和一个可选值。标签使用以下格式:key1=value1,key2=value2,key3=value3。如果您已选择使用新的 Amazon 资源名称 (ARN) 和资源标识符 (ID) 格式,则默认情况下启用 Amazon ECS 托管标签,除非您使用 --disable-ecs-managed-tags 标记明确禁用它们。有关更多信息,请参阅标记资源

类型:键值对

必需:否

--disable-ecs-managed-tags

禁用 Amazon ECS 托管标签。有关更多信息,请参阅 标记资源以便于计费

必需:否

--region, -r region

指定要使用的 AWS 区域。默认为使用 configure 命令配置的集群。

类型:字符串

必需:否

--cluster-config cluster_config_name

指定要使用的 Amazon ECS 集群配置的名称。默认为作为默认值设置的集群设置。

类型:字符串

必需:否

--ecs-profile ecs_profile

指定要使用的 Amazon ECS 配置文件的名称。默认为使用 configure profile 命令配置的配置文件。

类型:字符串

必需:否

--aws-profile aws_profile

指定要使用的 AWS 配置文件。使您能够使用 ~/.aws/credentials 中现有指定配置文件中的 AWS 凭证。

类型:字符串

必需:否

--cluster, -c cluster_name

指定要使用的 Amazon ECS 集群名称。默认为使用 configure 命令配置的集群。

类型:字符串

必需:否

--help, -h

显示指定命令的帮助文本。

必需:否

使用负载均衡器

您可选择借助负载均衡器运行您的服务。负载均衡器将在与服务关联的各个任务间分配流量。有关更多信息,请参阅 服务负载均衡。在创建服务后,在服务定义中指定的负载均衡器名称或目标组 ARN、容器名称和容器端口是不可变的。

注意

您必须先创建负载均衡器资源,然后才能将服务配置为使用它们。您的负载均衡器资源应与您的容器实例位于同一 VPC 中,并且应将它们配置为使用相同的子网。您还必须向容器实例安全组添加一个安全组规则,该规则允许来自负载均衡器的入站流量。有关更多信息,请参阅 创建负载均衡器

  • 要将服务配置为使用现有 Elastic Load Balancing 传统负载均衡器,您必须指定负载均衡器名称、容器名称 (显示在容器定义中) 和要从负载均衡器访问的容器端口。将此服务中的任务放在容器实例上后,容器实例将注册到在此处指定的负载均衡器。

  • 要将服务配置为使用现有 Elastic Load Balancing 应用程序负载均衡器,您必须指定负载均衡器目标组 ARN、容器名称 (显示在容器定义中) 和要从负载均衡器访问的容器端口。将此服务中的任务放在容器实例上后,容器实例和端口组合将注册为在此处指定的目标组中的目标。

--health-check-grace-period 选项指定一个时长,在任务首次启动后,Amazon ECS 服务计划程序在此时长内(以秒为单位)将忽略不正常的 Elastic Load Balancing 目标运行状况检查。您的服务只有配置为使用负载均衡器时此设置才适用。如果您的任务需要一段时间才能启动并响应 Elastic Load Balancing 运行状况检查,您最长可以指定 1800 秒的运行状况检查宽限期,在此期间 Amazon ECS 服务计划程序将忽略 Elastic Load Balancing 运行状况检查状态。此宽限期可防止 Amazon ECS 服务计划程序将由于时间不足而未启动的任务标记为不正常并停止它们。

使用 Service Discovery

Amazon ECS 服务可以选择配置为使用 Amazon ECS Service Discovery。Service discovery 使用 Amazon Route 53 自动命名 API 操作来管理服务任务的 DNS 条目,使其可在 VPC 中供搜索。有关更多信息,请参阅教程:使用 Amazon ECS CLI 创建使用Service Discovery的 Amazon ECS 服务

标记资源

Amazon ECS CLI 支持以资源标签的形式将元数据添加到您的 AWS 资源。每一个标签都包含一个键和一个可选值。资源标签可用于成本分配、自动化和访问控制。有关更多信息,请参阅 AWS 标记策略

使用 ecs-cli compose service up 命令时,使用 --tags 标记让您可以将元数据标签添加到任务定义和服务。在创建资源时,这些标签将会添加到服务和任务定义中。这些标签将会从您的任务定义传播到服务创建的任务。如果您已选择使用新的 Amazon 资源名称 (ARN) 和资源标识符 (ID) 格式,则默认情况下启用 Amazon ECS 托管标签,除非您使用 --disable-ecs-managed-tags 标记明确禁用它们。有关更多信息,请参阅标记资源以便于计费

示例

示例 1

此示例将启动 hello-world.yml 复合文件中的项目名称为 hello-world 的 Amazon ECS 服务。

ecs-cli compose --project-name hello-world --file hello-world.yml service up

输出:

INFO[0000] Using ECS task definition TaskDefinition="ecscompose-hello-world:7" INFO[0000] Created an ECS service service=ecscompose-service-hello-world taskDefinition="ecscompose-hello-world:7" INFO[0000] Updated ECS service successfully desiredCount=1 serviceName=ecscompose-service-hello-world INFO[0015] (service ecscompose-service-hello-world) has started 1 tasks: (task 682dc22f-8bfa-4c28-b6f8-3a916bd8f86a). timestamp=2017-08-18 21:16:00 +0000 UTC INFO[0060] Service status desiredCount=1 runningCount=1 serviceName=ecscompose-service-hello-world INFO[0060] ECS Service has reached a stable state desiredCount=1 runningCount=1 serviceName=ecscompose-service-hello-world

示例 2

此示例将从 nginx-compose.yml 复合文件创建服务并将其配置为使用现有 应用程序负载均衡器。

ecs-cli compose -f nginx-compose.yml service up --target-group-arn arn:aws:elasticloadbalancing:us-east-1:aws_account_id:targetgroup/ecs-cli-alb/9856106fcc5d4be8 --container-name nginx --container-port 80 --role ecsServiceRole

示例 3

此示例将从 nginx-compose.yml 复合文件创建服务并将其配置为使用运行状况检查宽限期为 25 秒的现有 应用程序负载均衡器。

ecs-cli compose -f nginx-compose.yml service up --target-group-arn arn:aws:elasticloadbalancing:us-east-1:aws_account_id:targetgroup/ecs-cli-alb/9856106fcc5d4be8 --container-name nginx --container-port 80 --role ecsServiceRole --health-check-grace-period 25