

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

# 为应用程序组件创建 AWS Cloud Map 服务
<a name="creating-services"></a>

创建命名空间后，您可以创建服务来表示应用程序中用于特定目的的不同组件。例如，您可以为应用程序中处理付款的资源创建服务。

**注意**  
您不能创建多个可通过 DNS 查询访问的服务，其名称仅因大小写而异（例如示例和示例）。尝试这样做会导致这些服务具有相同的 DNS 名称。如果您使用只能通过 API 调用访问的命名空间，则可以创建名称仅靠大小写来区分的服务。

按照以下步骤使用适用于 Python 的 AWS 管理控制台 AWS CLI、和 SDK 创建服务。

------
#### [ AWS 管理控制台 ]

1. 登录 AWS 管理控制台 并打开 AWS Cloud Map 控制台，网址为[https://console.aws.amazon.com/cloudmap/](https://console.aws.amazon.com/cloudmap/)。

1. 在导航窗格中，选择**命名空间**。

1. 在 **Namespaces (命名空间)** 页面上，选择要将服务添加的命名空间。

1. 在**命名空间：*namespace-name***页面上，选择**创建服务**。

1. 在**服务名称**中，输入一个描述您在使用此服务时注册的实例的名称。该值用于在 API 调用或 DNS 查询中发现 AWS Cloud Map 服务实例。
**注意**  
如果您 AWS Cloud Map 想在注册实例时创建 **SRV** 记录，并且您使用的系统需要特定 **SRV** 格式（例如 [HAProxy](http://www.haproxy.org/)），请为**服务**名称指定以下内容：  
名称以下划线 (\$1) 开头，例如 **\$1exampleservice**。
例如，名称的*.\$1protocol*结尾为**。 \$1tcp**。
注册实例时， AWS Cloud Map 会创建 S **RV** 记录并通过连接服务名称和命名空间名称来分配名称，例如：  
**\$1exampleservice.\$1tcp.example.com**

1. （可选）在**服务描述**中，输入服务的描述。您在此处输入的描述将显示在**服务**页面和每项服务的详情页面上。

1. 如果命名空间支持 DNS 查询，则可以在**服务发现配置**下，在服务级别配置可发现性。您可以选择允许 API 调用和 DNS 查询，或者仅允许 API 调用以发现此服务中的实例。
**注意**  
如果您选择 **API 调用**，则在注册实例时 AWS Cloud Map 不会创建 SRV 记录。

   如果您选择 **API 和 DNS**，请按照以下步骤配置 DNS 记录。您可以添加或删除 DNS 记录。

   1. 对于**路由策略**，请为注册实例时 AWS Cloud Map 创建的 DNS 记录选择 Amazon Route 53 路由策略。您可以在 “**加权路由**” 和 “**多值答案” 路由**之间进行选择。有关更多信息，请参阅 [路由策略](services-route53.md#services-dns-routing-policy)。
**注意**  
注册实例时，您无法使用控制台进行配置 AWS Cloud Map 以创建 Route 53 别名记录。如果您想在 AWS Cloud Map 以编程方式注册实例时为 Elastic Load Balancing 负载均衡器创建别名记录，请为****路由策略**选择加权**路由。

   1. 对于 “**记录类型**”，选择 DNS 记录类型，该类型决定了 Route 53 在响应 DNS 查询时返回的内容 AWS Cloud Map。有关更多信息，请参阅 [记录类型](services-route53.md#services-dns-record-type)。

   1. 对于 **TTL**，请指定一个数值来定义服务级别的生存时间 (TTL) 值（以秒为单位）。TTL 的值决定了 DNS 解析程序在将其他 DNS 查询转发到 Amazon Route 53 以获取更新后的设置之前缓存此记录的信息的时长。

1. 在 “**运行状况检查配置**” 下，在 “**健康检查选项**” 中，选择适用于服务实例的运行状况检查类型。您可以选择不配置任何运行状况检查，也可以在实例的 Route 53 运行状况检查或外部运行状况检查之间进行选择。有关更多信息，请参阅 [AWS Cloud Map 服务运行状况检查配置](services-health-checks.md)。
**注意**  
Route 53 运行状况检查只能针对公有 DNS 命名空间中的服务进行配置。

   如果您选择 **Route 53 运行状况检查**，请提供以下信息。

   1. 对于**失败阈值**，请提供一个介于 1 到 10 之间的数字，该数字定义服务实例必须通过或失败才能更改其运行状况的连续次数 Route 53 运行状况检查。

   1. 对于**运行状况检查协议**，选择 Route 53 将用于检查服务实例运行状况的方法。

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

   有关 Route 53 运行状况检查的更多信息，请参阅 [Amazon Route 53 *开发者指南中的亚马逊 Route 53* 如何确定运行状况检查是否正常](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover-determining-health-of-endpoints.html)。

1. （可选）在 “**标签**” 下，选择 “**添加标签**”，然后指定用于标记命名空间的键和值。您可以指定一个或多个要添加到 命名空间的标签。标签允许您对 AWS 资源进行分类，以便更轻松地对其进行管理。有关更多信息，请参阅 [标记您的资源 AWS Cloud Map](using-tags.md)。

1. 选择 **Create service**。

------
#### [ AWS CLI ]
+ 使用`[create-service](https://docs.aws.amazon.com/cli/latest/reference/servicediscovery/create-service.html)`命令创建服务。用您自己的*red*值替换这些值。

  ```
  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"
      }
  }
  ```

------
#### [ AWS SDK for Python (Boto3) ]

如果您尚未安装 `Boto3`，则可以在[此处](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html#installation)找到安装、配置和使用`Boto3`的说明。

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

   ```
   import boto3
   client = boto3.client('servicediscovery')
   ```

1. 使用创建服务`create_service()`。用您自己的*red*值替换这些值。有关更多信息，请参阅 [create\$1s](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/servicediscovery/client/create_service.html) ervice。

   ```
   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': {
           '...': '...',
       },
   }
   ```

------

## 后续步骤
<a name="create-services-next-steps"></a>

创建服务后，您可以将应用程序资源注册为服务实例，其中包含有关您的应用程序如何找到资源的信息。有关注册 AWS Cloud Map 服务实例的更多信息，请参阅[将资源注册为 AWS Cloud Map 服务实例](registering-instances.md)。

您还可以在创建服务后将端点权重、API 超时和重试策略等自定义元数据指定为服务属性。有关更多信息，请参阅《*AWS Cloud Map API 参考*》中的[ServiceAttributes](https://docs.aws.amazon.com/cloud-map/latest/api/API_ServiceAttributes.html)和[https://docs.aws.amazon.com/cloud-map/latest/api/API_UpdateServiceAttributes.html](https://docs.aws.amazon.com/cloud-map/latest/api/API_UpdateServiceAttributes.html)。