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

Service Discovery

Amazon ECS 服务可以选择配置为使用 Amazon ECS Service Discovery。Service discovery使用 AWS Cloud Map API 操作来管理 Amazon ECS 服务的 HTTP 和 DNS 命名空间。有关更多信息,请参阅 AWS Cloud Map Developer Guide 中的什么是 AWS Cloud Map?

Service Discovery 概念

Service discovery 包括以下组件:

  • Service discovery命名空间:共享相同域名的service discovery服务的逻辑组,例如 example.com

  • Service discovery 服务:存在于 service discovery 命名空间中,由命名空间的服务名称和 DNS 配置组成。它提供了以下核心组件:

    • 服务注册:让您可通过 DNS 或 AWS Cloud Map API 操作查找服务,并获取一个或多个可用于连接到该服务的可用终端节点。

  • Service discovery实例:存在于service discovery服务中并包含与服务目录中的每个 Amazon ECS 服务相关联的属性。

    • 实例属性:将以下元数据添加为配置为使用service discovery的每个 Amazon ECS 服务的自定义属性:

      • AWS_INSTANCE_IPV4 – 对于 A 记录,为 Route 53 响应 DNS 查询而返回和 AWS Cloud Map 在发现实例详细信息时返回的 IPv4 地址,例如 192.0.2.44

      • AWS_INSTANCE_PORT – 与service discovery服务关联的端口值。

      • AVAILABILITY_ZONE – 任务启动到的可用区。对于使用 EC2 启动类型的任务,这是容器实例存在于的可用区。对于使用 Fargate 启动类型的任务,这是弹性网络接口存在于的可用区。

      • REGION – 任务存在于的区域。

      • ECS_SERVICE_NAME – 任务属于的 Amazon ECS 服务的名称。

      • ECS_CLUSTER_NAME – 任务属于的 Amazon ECS 集群的名称。

      • EC2_INSTANCE_ID – 在其上放置任务的容器实例的 ID。如果任务使用的是 Fargate 启动类型,则不会添加此自定义属性。

      • ECS_TASK_DEFINITION_FAMILY – 任务使用的任务定义系列。

  • Amazon ECS 运行状况检查:Amazon ECS 执行定期容器级别的运行状况检查。如果终端节点不传递运行状况检查,则会将其从 DNS 路由中删除并标记为不正常。

Service Discovery 注意事项

使用 service discovery 时应注意以下事项:

  • 如果使用平台版本 v1.1.0 或更高版本,则使用 Fargate 启动类型的任务支持Service discovery。有关更多信息,请参阅AWS Fargate 平台版本

  • Amazon ECS 控制台中的创建服务工作流程仅支持向私有 DNS 命名空间注册服务。在创建 AWS Cloud Map 私有 DNS 命名空间时,将自动创建 Route 53 私有托管区域。

  • Amazon ECS 不支持向公有 DNS 命名空间注册服务。

  • Service discovery 要求任务指定 awsvpcbridgehost 网络模式(不支持 none)。

  • 如果您的服务任务指定的任务定义使用 awsvpc 网络模式,您可以为每个服务任务创建 A 或 SRV 记录的任何组合。如果您使用 SRV 记录,则需要端口。

  • 如果您的服务任务指定的任务定义使用 bridgehost 网络模式,则 SRV 记录是唯一受支持的 DNS 记录类型。为每个服务任务创建 SRV 记录。SRV 记录必须从任务定义中指定容器名称和容器端口组合。

  • service discovery 服务的 DNS 记录可以在 VPC 中查询。它们采用以下格式:<service discovery service name>.<service discovery namespace>。有关更多信息,请参阅 步骤 3:验证Service Discovery

  • 在服务名称上执行 DNS 查询时,A 记录返回与您任务对应的一组 IP 地址。SRV 记录返回各个任务的一组 IP 地址和端口。

  • 您可以为负载均衡器后面的 ECS 服务配置 service discovery,但 service discovery 流量始终路由至此任务而非负载均衡器。

  • Service discovery 不支持使用 传统负载均衡器。

  • 建议对service discovery服务使用由 Amazon ECS 管理的容器级别的运行状况检查。

    • HealthCheckCustomConfig – Amazon ECS 代表您管理运行状况检查。Amazon ECS 使用来自容器和运行状况检查的信息以及任务状态来更新 AWS Cloud Map 的运行状况。在创建 service discovery 服务时,使用 --health-check-custom-config 参数来指定。有关更多信息,请参阅 AWS Cloud Map API Reference 中的 HealthCheckCustomConfig

  • 如果使用 Amazon ECS 控制台,则工作流程将为每个 ECS 服务创建一个service discovery服务。它将所有任务 IP 地址映射为 A 记录,或将任务 IP 地址和端口映射为 SRV 记录。

  • Service discovery 只能在首次创建服务时进行配置。不支持更新现有服务以首次配置 service discovery 或更改当前配置。

  • 必须手动清除使用service discovery时创建的 AWS Cloud Map 资源。有关更多信息,请参阅教程:使用 Service Discovery 创建服务主题中的 步骤 4:清除

Amazon ECS 控制台体验

Amazon ECS 控制台中的服务创建和服务更新工作流程支持service discovery。

要创建使用service discovery的新 Amazon ECS 服务,请参阅创建服务

Service Discovery 定价

使用 Amazon ECS service discovery的客户需要为 Route 53 资源和 AWS Cloud Map 发现 API 操作付费。这涉及到创建 Route 53 托管区域和查询服务注册表的成本。有关更多信息,请参阅 AWS Cloud Map Developer Guide 中的 AWS Cloud Map 定价

Amazon ECS 执行容器级别的运行状况检查并将其公开到 AWS Cloud Map 自定义运行状况检查 API 操作。目前将此提供给客户没有任何额外成本。如果您为公开任务配置其他网络运行状况检查,则会向您收取这些运行状况检查的费用。