创建 Amazon Cloud Map 服务 - Amazon Cloud Map
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

创建 Amazon Cloud Map 服务

要创建服务,请执行以下过程。

Amazon Web Services Management Console
  1. 登录 Amazon Web Services Management Console 并打开 Amazon Cloud Map 控制台,网址为 https://console.aws.amazon.com/cloudmap/

  2. 在导航窗格中,选择 Namespaces (命名空间)

  3. Namespaces (命名空间) 页面上,选择要将服务添加的命名空间。

  4. Namespace: namespace-name (命名空间: namespace-name) 页面上,选择 Create service (创建服务)

  5. Create service (创建服务) 页面上,输入适用的值。有关更多信息,请参阅创建服务时指定的值

  6. 选择 Create service

Amazon CLI
  • 使用 create-service 命令创建一个服务(将红色值替换为您自己的值)。

    aws servicediscovery create-service \ --name service-name \ --namespace-id ns-xxxxxxxxxxx \ --dns-config "NamespaceId=ns-xxxxxxxxxxx,RoutingPolicy=MULTIVALUE,DnsRecords=[{Type=A,TTL=60}]"

    输出:

    { "Service": { "Id": "srv-xxxxxxxxxxx", "Arn": "arn:aws:servicediscovery:us-west-2:123456789012:service/srv-xxxxxxxxxxx", "Name": "service-name", "NamespaceId": "ns-xxxxxxxxxxx", "DnsConfig": { "NamespaceId": "ns-xxxxxxxxxxx", "RoutingPolicy": "MULTIVALUE", "DnsRecords": [ { "Type": "A", "TTL": 60 } ] }, "CreateDate": 1587081768.334, "CreatorRequestId": "567c1193-6b00-4308-bd57-ad38a8822d25" } }
Amazon SDK for Python (Boto3)
  1. 如果您尚未安装 Boto3,则可以在此处找到安装、配置和使用Boto3的说明。

  2. 导入 Boto3 并将 servicediscovery 用作您的服务。

    import boto3 client = boto3.client('servicediscovery')
  3. 使用 create_service() 创建一个服务(将红色值替换为您自己的值)。

    response = client.create_service( DnsConfig={ 'DnsRecords': [ { 'TTL': 60, 'Type': 'A', }, ], 'NamespaceId': 'ns-xxxxxxxxxxx', 'RoutingPolicy': 'MULTIVALUE', }, Name='service-name', NamespaceId='ns-xxxxxxxxxxx', )

    示例响应输出

    { 'Service': { 'Arn': 'arn:aws:servicediscovery:us-west-2:123456789012:service/srv-xxxxxxxxxxx', 'CreateDate': 1587081768.334, 'DnsConfig': { 'DnsRecords': [ { 'TTL': 60, 'Type': 'A', }, ], 'NamespaceId': 'ns-xxxxxxxxxxx', 'RoutingPolicy': 'MULTIVALUE', }, 'Id': 'srv-xxxxxxxxxxx', 'Name': 'service-name', 'NamespaceId': 'ns-xxxxxxxxxxx', }, 'ResponseMetadata': { '...': '...', }, }
注意

对于可通过 DNS 查询访问的服务,您不能创建多个名称仅靠大小写来区分的服务(例如 EXAMPLE 和 example)。否则,这些服务将具有相同的 DNS 名称。如果您使用只能通过 API 调用访问的命名空间,则可以创建名称仅靠大小写来区分的服务。

创建服务时指定的值

创建 Amazon Cloud Map 服务时,需要指定以下值。

注意

创建服务后,您只能更改其中的标签。

服务名称

输入一个描述您在使用此服务时注册的实例的名称。该值用于在 API 调用或 DNS 查询中发现 Amazon Cloud Map 服务实例。这取决于您在创建命名空间时选择的实例发现方法。您可以使用以下方法之一:

  • API 调用 — 当您的应用程序调用时 DiscoverInstances,API 调用包括命名空间和服务名称。

  • API calls and DNS queries in VPCs (VPC 中的 API 调用和 DNS 查询)API calls and public DNS queries (API 调用和公共 DNS 查询) – 当注册服务实例和创建命名空间时, Amazon Cloud Map 将创建 Amazon Route 53 私有或公有托管区。它还会在该托管区创建 DNS 记录。记录的名称采用以下格式:

    service-name.namespace-name

    在应用程序提交 DNS 查询以发现服务实例时,该查询针对的是将服务名称包含在记录名称中的记录。

注意

在支持 DNS 查询的命名空间中创建服务时,您可以选择仅通过调用 DiscoverInstancesAPI 操作而不是 DNS 查询来发现该服务的服务实例。请参阅 Service discovery configuration

如果您 Amazon Cloud Map 想在注册实例时创建 SRV 记录,并且您使用的系统需要特定 SRV 格式(例如 HAProxy),请为服务名称指定以下内容:

  • 名称以下划线 (_) 开头,例如 _exampleservice

  • 名称以 ._protocol 结尾,例如 ._tcp

注册实例时, Amazon Cloud Map 会创建 S RV 记录并通过连接服务名称和命名空间名称来分配名称,例如:

_exampleservice._tcp.example.com

注意

对于可通过 DNS 查询发现的服务,您不能创建多个名称仅靠大小写来区分的服务(例如 EXAMPLE 和 example)。否则,这些服务具有相同的 DNS 名称并且无法区分。

服务描述

输入服务的描述。您在此处输入的值将显示在 Services (服务) 页面以及每个服务的详细信息页面上。

服务发现配置

如果命名空间支持 DNS 查询,则 Amazon Cloud Map 支持以下服务发现选项:

API 和 DNS

Amazon Cloud Map 将在您为该服务注册实例时创建 SRV 记录。也可以使用 DiscoverInstancesAPI 操作发现服务实例。

仅 API

Amazon Cloud Map 例如,不会为服务创建 SRV 记录。只能使用 DiscoverInstancesAPI 操作发现服务实例。

路由策略(仅限公有和私有 DNS 命名空间)

如果您使用公有或私有 DNS 命名空间来创建服务,请选择 Amazon Cloud Map 在您注册实例时创建的 DNS 记录的 Amazon Route 53 路由策略。(公有 DNS 命名空间的值为 API calls and public DNS queries (API 调用和公共 DNS 查询),针对的是 Instance discovery (实例发现);私有 DNS 命名空间的值为 API calls and DNS queries in VPCs (VPC 中的 API 调用和 DNS 查询)。)

注意

注册实例时,您无法使用控制台进行配置 Amazon Cloud Map 以创建 Route 53 别名记录。如果您想在 Amazon Cloud Map 以编程方式注册实例时为 Elastic Load Balancing 负载均衡器创建别名记录,请为路由策略选择加权路由。

Amazon Cloud Map 支持以下 Route 53 路由策略:

加权路由

Route 53 从一个随机选择的实例(来自您使用同一服务注册的实例)返回适用的值。所有记录都具有相同的权重,因此,您无法将更多或更少的流量路由到任何实例。

例如,假设服务包含针对一条 A 记录和一个运行状况检查的配置,并且您使用服务注册 10 个实例。Route 53 使用来自运行正常的实例中的一个随机选定实例的 IP 地址来响应 DNS 查询。如果没有运行正常的实例,Route 53 会像所有实例都运行正常那样响应 DNS 查询。

如果您没有为服务定义运行状况检查,Route 53 会假定所有实例都运行正常,并为随机选择的一个实例返回适用的值。

有关更多信息,请参阅 Amazon Route 53 开发人员指南中的加权路由

多值应答路由

如果您为服务定义了运行状况检查,并且运行状况检查的结果为正常,则 Route 53 将为最多 8 个实例返回适用的值。

例如,假设服务包含针对一条 A 记录和一个运行状况检查的配置。您使用服务注册 10 个实例。Route 53 将使用最多 8 个正常运行的实例的 IP 地址来响应 DNS 查询。如果正常运行的实例少于 8 个,Route 53 将使用所有正常运行的实例的 IP 地址来响应每个 DNS 查询。

如果您没有为服务定义运行状况检查,Route 53 将假定所有实例都是正常运行的,并为最多 8 个实例返回值。

有关更多信息,请参阅 Amazon Route 53 开发人员指南中的多值应答路由

记录类型(仅限公有和私有 DNS 命名空间)

如果您使用公共或私有 DNS 命名空间来创建服务,请为注册实例时 Amazon Cloud Map 创建的记录选择 DNS 记录类型。Amazon Route 53 在对已注册实例的 DNS 查询的响应中返回适用的值。

支持以下记录类型:

A

注册实例时,以 IPv4 格式指定资源的 IP 地址(如 192.0.2.44)。

AAAA

注册实例时,以 IPv6 格式指定资源的 IP 地址(如 2001:0db8:85a3:0000:0000:abcd:0001:2345)。

别名记录

注册实例时,指定资源的域名(如 www.example.com)。请注意以下几点:

  • 如果要选择 CNAME,则必须为路由策略选择加权路由

  • 如果您选择 CNAME,则不能为健康检查选项选择 Route 53 运行状况检查

SRV

SRV 记录的值使用以下值:

priority weight port service-hostname

请记下有关这些值的以下内容:

  • priorityweight 的值都设置为 1,且无法更改。

  • 对于port, Amazon Cloud Map 使用您在注册实例时为 Port 指定的值。

  • service-hostname 的值可以是以下值的联接:

    • 您在注册实例时为 Service instance ID (服务实例 ID) 指定的值

    • 服务的名称

    • 命名空间的名称

    例如,假设您在注册一个实例时为服务实例 ID 指定了测试。服务的名称是 backend,命名空间的名称是 example.com。 Amazon Cloud Map 为 SRV 记录中的service-hostname属性分配以下值:

    test.backend.example.com

如果您为 SRV 记录指定设置,请注意以下事项:

  • 如果您为 IPv4 address (IPv4 地址) 和/或 IPv6 address (IPv6 地址) 指定了值, Amazon Cloud Map 将自动创建与 SRV 记录中的 service-hostname 的值同名的 A 和/或 AAAA 记录。

  • 如果您使用的系统需要特定的 SRV 格式(例如 HAProxy),请参阅服务名称,了解如何指定正确的名称格式。

您可按以下组合指定记录类型:

  • A

  • AAAA

  • AAAAA

  • 别名记录

  • SRV

如果您指定了 AAAAA 记录类型,则可以在注册实例时指定 IPv4 IP 地址和/或 IPv6 IP 地址。

TTL(仅限公有和私有 DNS 命名空间)

如果您使用公有或私有 DNS 命名空间创建服务,请为 TTL(即生存时间)输入值。TTL 的值决定了 DNS 解析程序在将其他 DNS 查询转发到 Amazon Route 53 以获取更新后的设置之前缓存此记录的信息的时长。

运行状况检查选项

没有运行状况检查

如果您未配置运行状况检查,无论服务实例的运行状况是否良好,流量都将路由到服务实例。

Route 53 运行状况检查(不受私有 DNS 命名空间)

如果您为 Amazon Route 53 运行状况检查指定了设置, Amazon Cloud Map 将在您注册实例时创建 Route 53 运行状况检查,并在您取消注册实例时删除运行状况检查。

对于公有 DNS 命名空间,请将运行状况检查与注册实例时 Amazon Cloud Map 创建的 Route 53 记录 Amazon Cloud Map 关联起来。

对于您使用 API 调用发现其实例的命名空间,请 Amazon Cloud Map 创建 Route 53 运行状况检查。但是,没有可与运行状况检查关联的 DNS 记录。 Amazon Cloud Map 要确定运行状况检查是否正常,您可以使用 Route 53 控制台或 Amazon 配置监控 CloudWatch。有关使用 Route 53 控制台的更多信息,请参阅 Amazon Route 53 开发者指南中的运行状况检查失败时获得通知。有关使用的更多信息 CloudWatch,请参阅 Amazon CloudWatch API 参考PutMetricAlarm中的。

有关 Route 53 运行状况检查的费用信息,请参阅 Route 53 定价

自定义运行状况检查

如果您在注册实例时配置 Amazon Cloud Map 为使用自定义运行状况检查,则必须使用第三方运行状况检查器来评估资源的运行状况。自定义运行状况检查在以下情况下很有用:

  • 您无法使用 Route 53 运行状况检查,因为无法通过 Internet 获得资源。例如,假设您有一个位于 Amazon VPC 中的实例。您可以为此实例使用自定义运行状况检查。但是,要使运行状况检查正常运行,运行状况检查程序也必须与您的实例在同一 VPC 中。

  • 您希望使用第三方运行状况检查程序,而不管您的资源位于何处。

故障阈值 (仅限 Route 53 运行状况检查)

为了让 Amazon Route 53 将资源的当前状态在运行正常和运行不正常之间切换,该资源必须通过或不通过的连续 Route 53 运行状况检查的数量。有关更多信息,请参阅 Amazon Route 53 开发人员指南中的 Amazon Route 53 如何确定端点是否运行正常

运行状况检查协议(仅限 Route 53 运行状况检查)

您希望 Amazon Route 53 用来检查资源的运行状况的方法:

HTTP

Route 53 尝试建立 TCP 连接。如果成功,Route 53 将提交 HTTP 请求并等待 2xx 或 3xx 格式的 HTTP 状态代码。

HTTPS

Route 53 尝试建立 TCP 连接。如果成功,Route 53 将提交 HTTPS 请求并等待 2xx 或 3xx 格式的 HTTP 状态代码。

重要

如果您选择 HTTPS,则资源必须支持 TLS v1.0 或更高版本。

如果您选择 HTTPS 作为 运行状况检查协议 的值,将产生额外费用。有关更多信息,请参阅 Route 53 定价

TCP

Route 53 尝试建立 TCP 连接。

有关更多信息,请参阅 Amazon Route 53 如何确定运行状况检查结果是否为正常

运行状况检查路径(仅限 Route 53 HTTP 和 HTTPS 运行状况检查)

您需要 Amazon Route 53 在执行运行状况检查时请求的路径。路径可以是任何值,例如文件 /docs/route53-health-check.html。当该资源运行状况正常时,返回的值是 2xx 或 3xx 格式的 HTTP 状态代码。您也可以包括查询字符串参数,例如,/welcome.html?language=jp&login=y。 Amazon Cloud Map 控制台将自动添加一个前导斜杠 (/) 字符。

标签

您可以指定一个或多个要添加到服务的标签。标签是您可以分配给 Amazon 资源的可选标签。每个标签均包含一个键和一个值。例如,您可以使用“键 = 环境”和“值 = 生产”来定义标签。使用标签对 Amazon 资源进行分类可以更轻松地管理这些资源。

创建标签后,您可以随时更新或删除命名空间上的标签。有关更多信息,请参阅 给您的 Amazon Cloud Map 资源加标签