

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 了解如何搭配 DNS 查詢和 API 呼叫使用 AWS Cloud Map 服務探索
<a name="tutorial-private-namespace"></a>

下列教學會模擬具有兩個後端服務的微服務架構。第一個服務將使用 DNS 查詢來探索。第二個服務只能使用 AWS Cloud Map API 來探索。

**注意**  
資源詳細資訊，例如網域名稱和 IP 地址，僅供模擬之用。它們無法透過網際網路解析。

如需本教學課程的end-to-end AWS CLI 版本，請參閱 [了解如何使用 搭配 DNS 查詢和 API 呼叫使用 AWS Cloud Map 服務探索 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，請依照[安裝或更新最新版本的 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)中的步驟進行安裝。

  本教學課程需使用命令列終端機或 Shell 來執行命令。在 Linux 和 macOS 中，使用您偏好的 Shell 和套件管理工具。
**注意**  
在 Windows 中，作業系統的內建終端不支援您常與 Lambda 搭配使用的某些 Bash CLI 命令 (例如 `zip`)。若要取得 Ubuntu 和 Bash 的 Windows 整合版本，請[安裝適用於 Linux 的 Windows 子系統](https://learn.microsoft.com/en-us/windows/wsl/install)。
+ 本教學課程需要具有 `dig` DNS 查詢公用程式命令的本機環境。

## 步驟 1：建立 AWS Cloud Map 命名空間
<a name="tutorial-microservices-step1"></a>

在此步驟中，您會建立公有 AWS Cloud Map namespace。 會使用相同的名稱代表您 AWS Cloud Map 建立 Route 53 託管區域。這可讓您探索在此命名空間中建立的服務執行個體，無論是使用公有 DNS 記錄或使用 AWS Cloud Map API 呼叫。

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/cloudmap/](https://console.aws.amazon.com/cloudmap/) 開啟 AWS Cloud Map 主控台。

1. 選擇 **Create namespace (建立命名空間)**。

1. 針對**命名空間名稱**，指定 `cloudmap-tutorial.com`。
**注意**  
如果您要在生產環境中使用此名稱，建議您確保已指定您擁有或可存取的網域名稱。但是，為了本教學課程的目的，它不需要是正在使用的實際網域。

1. （選用） 針對**命名空間描述**，指定您要使用命名空間的描述。

1. 針對**執行個體探索**，選取 **API 呼叫和公有 DNS 查詢**。

1. 保留其餘的預設值，然後選擇**建立命名空間**。

## 步驟 2：建立 AWS Cloud Map 服務
<a name="tutorial-microservices-step2"></a>

在此步驟中，您會建立兩個 服務。第一個服務將使用公有 DNS 和 API 呼叫來探索。第二個服務只能使用 API 呼叫來探索。

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/cloudmap/](https://console.aws.amazon.com/cloudmap/) 開啟 AWS Cloud Map 主控台。

1. 在左側導覽窗格中，選擇**命名空間**以列出您已建立的命名空間。

1. 從命名空間清單中，選取`cloudmap-tutorial.com`命名空間，然後選擇**檢視詳細資訊**。

1. 在**服務**區段中，選擇**建立服務**，然後執行下列動作來建立第一個服務。

   1. 對於**服務名稱**，輸入 `public-service`。服務名稱將套用至 AWS Cloud Map 建立的 DNS 記錄。使用的格式為 `<service-name>.<namespace-name>`。

   1. 針對**服務探索組態**，選取 **API 和 DNS**。

   1. 在 **DNS 組態**區段中，針對**路由政策**，選取**多值回答路由**。
**注意**  
選取後，主控台會將此內容翻譯為 **MULTIVALUE**。如需可用路由選項的詳細資訊，請參閱《*Route 53 開發人員指南*》中的[選擇路由政策](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy.html)。

   1. 保留其餘的預設值，然後選擇**建立服務**，這會讓您返回命名空間詳細資訊頁面。

1. 在**服務**區段中，選擇**建立服務**，然後執行下列動作來建立第二個服務。

   1. 對於**服務名稱**，輸入 `backend-service`。

   1. 針對**服務探索組態**，僅選取 **API**。

   1. 保留其餘的預設值，然後選擇**建立服務**。

## 步驟 3：註冊 AWS Cloud Map 服務執行個體
<a name="tutorial-microservices-step3"></a>

在此步驟中，您會建立兩個服務執行個體，一個用於我們命名空間中的每個服務。

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/cloudmap/](https://console.aws.amazon.com/cloudmap/) 開啟 AWS Cloud Map 主控台。

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 管理主控台 ，並在 https：//[https://console.aws.amazon.com/route53/](https://console.aws.amazon.com/route53/) 開啟 Route 53 主控台。

1. 在左側導覽窗格中，選擇 **Hosted zones** (託管區域)。

1. 選取 **cloudmap-tutorial.com** 託管區域。這會在單獨的窗格中顯示託管區域詳細資訊。請記下與您的託管區域相關聯的**名稱伺服器**，因為我們會在下一個步驟中使用這些伺服器。

1. 使用 dig 命令和託管區域的 Route 53 名稱伺服器之一，查詢服務執行個體的 DNS 記錄。

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

   輸出`ANSWER SECTION`中的 應該會顯示您與服務相關聯的 IPv4 地址`public-service`。

   ```
   ;; 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 管理主控台 ，並在 https：//[https://console.aws.amazon.com/cloudmap/](https://console.aws.amazon.com/cloudmap/) 開啟 AWS Cloud Map 主控台。

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`託管區域已刪除。