

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

# 了解如何在 DNS 查询和 API 调用中使用 AWS Cloud Map 服务发现
<a name="tutorial-private-namespace"></a>

以下教程模拟了包含两个后端服务的微服务架构。使用 DNS 查询可以发现第一项服务。仅使用 AWS Cloud Map API 才能发现第二项服务。

**注意**  
资源详细信息（例如域名和 IP 地址）仅用于模拟目的。它们无法通过互联网解决。

有关本教程的 end-to-end AWS CLI 版本，请参阅[了解如何将 AWS Cloud Map 服务发现与 DNS 查询和 API 调用配合使用 AWS CLI](tutorial-private-namespace-cli.md)。

## 先决条件
<a name="getting-started-prerequisites"></a>

要成功完成本教程，必须满足以下先决条件。
+ 在开始之前，请完成 [设置为使用 AWS Cloud Map](setting-up-cloud-map.md) 中的步骤。
+ 如果您尚未安装 AWS Command Line Interface，请按照[安装或更新最新版本中的](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)步骤 AWS CLI进行安装。

  本教程需要命令行终端或 Shell 来运行命令。在 Linux 和 macOS 中，可使用您首选的 Shell 和程序包管理器。
**注意**  
在 Windows 中，操作系统的内置终端不支持您经常与 Lambda 一起使用的某些 Bash CLI 命令（例如 `zip`）。[安装 Windows Subsystem for Linux](https://learn.microsoft.com/en-us/windows/wsl/install)，获取 Ubuntu 和 Bash 与 Windows 集成的版本。
+ 本教程要求使用带有 `dig` DNS 查找实用程序命令的本地环境。

## 步骤 1：创建 AWS Cloud Map 命名空间
<a name="tutorial-microservices-step1"></a>

在此步骤中，您将创建一个公共 AWS Cloud Map 命名空间。 AWS Cloud Map 代表您创建同名的 Route 53 托管区域。这使您能够使用公有 DNS 记录或使用 AWS Cloud Map API 调用来发现在此命名空间中创建的服务实例。

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

1. 选择**创建命名空间**。

1. 在 “**命名空间名称**” 中，指定`cloudmap-tutorial.com`。
**注意**  
如果你打算在生产环境中使用它，你需要确保你指定了你拥有或有权访问的域的名称。但是就本教程而言，它不一定是正在使用的实际域。

1. （可选）在**命名空间描述**中，为你打算使用命名空间的内容指定描述。

1. 对于**实例发现**，请选择 **API 调用和公有 DNS 查询**。

1. 保留其余的默认值，然后选择**创建命名空间**。

## 步骤 2：创建 AWS Cloud Map 服务
<a name="tutorial-microservices-step2"></a>

在此步骤中，您将创建两个服务。使用公共 DNS 和 API 调用可以发现第一项服务。仅使用 API 调用才能发现第二项服务。

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

1. 在左侧导航窗格中，选择**命名空间**以列出您创建的命名空间。

1. 从命名空间列表中，选择`cloudmap-tutorial.com`命名空间并选择**查看**详细信息。

1. 在 “**服务**” 部分中，选择**创建服务**，然后执行以下操作来创建第一个服务。

   1. 对于**服务名称**，输入 `public-service`。服务名称将应用于 AWS Cloud Map 创建的 DNS 记录。使用的格式是`<service-name>.<namespace-name>`。

   1. 对于**服务发现配置**，请选择 **API 和 DNS**。

   1. 在 **DNS 配置**部分的**路由策略**中，选择**多值应答路由**。
**注意**  
选择后，控制台会将其转换为 “**多值**”。有关可用路由选项的更多信息，请参阅《R *oute 53 开发人员指南*[》中的选择路由策略](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy.html)。

   1. 保留其余的默认值，然后选择 C **reate servic** e，这将返回到命名空间详细信息页面。

1. 在 “**服务**” 部分中，选择**创建服务**，然后执行以下操作来创建第二个服务。

   1. 对于**服务名称**，输入 `backend-service`。

   1. 对于**服务发现配置**，请选择**仅限 API**。

   1. 保留其余的默认值，然后选择**创建服务**。

## 步骤 3：注册 AWS Cloud Map 服务实例
<a name="tutorial-microservices-step3"></a>

在此步骤中，您将创建两个服务实例，每个服务对应一个命名空间中的服务。

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

1. 从命名空间列表中，选择您在步骤 1 中创建的命名空间，然后选择**查看**详细信息。

1. 在命名空间详细信息页面上，从服务列表中选择`public-service`服务并选择**查看详细信息**。

1. 在**服务实例**部分，选择**注册服务实例**，然后执行以下操作来创建第一个服务实例。

   1. 对于**服务实例 ID**，请指定`first`。

   1. 对于**IPv4 地址**，请指定`192.168.2.1`。

   1. 保留其余的默认值，然后选择**注册服务实例**。

1. 使用页面顶部的痕迹，选择 **cloudmap-tutorial.com 以导航回命**名空间详细信息页面。

1. 在命名空间详细信息页面上，从服务列表中选择**后端服务**并选择**查看**详细信息。

1. 在**服务实例**部分，选择**注册服务实例**，然后执行以下操作来创建第二个服务实例。

   1. 在**服务实例 ID** 中，指定`second`以表示这是第二个服务实例。

   1. 在 “**实例类型**” 中，选择 “**其他资源的识别信息**”。

   1. 对于**自定义属性**，添加一个键值对，`service-name`作为键，`backend`作为值。

   1. 选择 **Register service instance (注册服务实例)**。

## 步骤 4：发现 AWS Cloud Map 服务实例
<a name="tutorial-microservices-step4"></a>

现在， AWS Cloud Map 命名空间、服务和服务实例已创建完毕，您可以通过发现实例来验证一切是否正常。使用`dig`命令验证公有 DNS 设置，使用 AWS Cloud Map API 验证后端服务。有关该`dig`命令的更多信息，请参阅 [dig-DNS 查找实用程序](https://downloads.isc.org/isc/bind9/cur/9.19/doc/arm/html/manpages.html#dig-dns-lookup-utility)。

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

1. 在左侧导航中，选择 **Hosted zones（托管区）**。

1. 选择 **cloudmap-tut** orial.com 托管区域。这将在单独的窗格中显示托管区域的详细信息。请记下与您的托管区域关联的**名称服务器**，因为我们将在下一步中使用这些服务器。

1. 使用 dig 命令和托管区域的 Route 53 域名服务器之一，查询您的服务实例的 DNS 记录。

   ```
   dig @hosted-zone-nameserver public-service.cloudmap-tutorial.com
   ```

   输出`ANSWER SECTION`中的应显示您与`public-service`服务关联 IPv4 的地址。

   ```
   ;; ANSWER SECTION:
   public-service.cloudmap-tutorial.com. 300 IN A	192.168.2.1
   ```

1. 使用查询第二个服务实例的属性。 AWS CLI

   ```
   aws servicediscovery discover-instances --namespace-name cloudmap-tutorial.com --service-name backend-service --region region
   ```

   输出以键值对的形式显示您与服务关联的属性。

   ```
   {
       "Instances": [
           {
               "InstanceId": "second",
               "NamespaceName": "cloudmap-tutorial.com",
               "ServiceName": "backend-service",
               "HealthStatus": "UNKNOWN",
               "Attributes": {
                   "service-name": "backend"
               }
           }
       ],
       "InstancesRevision": 71462688285136850
   }
   ```

## 步骤 5：清理资源
<a name="tutorial-microservices-step5"></a>

完成本教程后，您可以删除资源。 AWS Cloud Map 要求你按相反的顺序清理它们，首先是服务实例，然后是服务，最后是命名空间。 AWS Cloud Map 当你完成这些步骤时，将代表你清理 Route 53 资源。

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

1. 从命名空间列表中，选择`cloudmap-tutorial.com`命名空间并选择**查看**详细信息。

1. 在命名空间详细信息页面上，从服务列表中选择`public-service`服务并选择**查看详细信息**。

1. 在 “**服务实例**” 部分中，选择`first`实例并选择 “**取消注册**”。

1. 使用页面顶部的痕迹，选择 **cloudmap-tutorial.com 以导航回命**名空间详细信息页面。

1. 在命名空间详细信息页面上，从服务列表中选择**公共服务**并选择**删除**。

1. 对重复步骤 3-6。`backend-service`

1. 在左侧导航栏中，选择**命名空间**。

1. 选择`cloudmap-tutorial.com`命名空间并选择 “**删除”**。
**注意**  
尽管 AWS Cloud Map 会代表您清理 Route 53 资源，但您可以导航到 Route 53 控制台来验证`cloudmap-tutorial.com`托管区域是否已删除。