

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

# 建立 AWS Cloud Map 命名空間以將應用程式服務分組
<a name="creating-namespaces"></a>

您可以建立命名空間，以易記的名稱將應用程式的服務分組，允許透過 API 呼叫或 DNS 查詢探索應用程式資源。

## 執行個體探索選項
<a name="working-with-namespaces-instance-discovery"></a>

下表摘要說明 中的不同執行個體探索選項， AWS Cloud Map 以及您可以建立的對應命名空間類型，視您應用程式的服務和設定而定。


| 命名空間類型 | 執行個體探索方法 | 運作方式 | 其他資訊 | 
| --- | --- | --- | --- | 
| HTTP  | API 呼叫  | 您應用程式中的資源只能呼叫 DiscoverInstances API 來探索其他資源。 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/cloud-map/latest/dg/creating-namespaces.html)  | 
| 私有 DNS | VPC 中的 API 呼叫和 DNS 查詢 | 當您建立私有 DNS 命名空間時， 會 AWS Cloud Map 建立對應的 Amazon Route 53 私有託管區域。您應用程式中的資源可以透過呼叫 `DiscoverInstances` API，以及在 AWS Cloud Map 自動建立的私有 Route 53 託管區域中查詢名稱伺服器來探索其他資源。 建立的託管區域 AWS Cloud Map 與命名空間的名稱相同，並包含名稱格式為 *service-name*.*namespace-name* 的 DNS 記錄。  Route 53 Resolver 會使用私有託管區域中的記錄來解析源自 VPC 的 DNS 查詢。如果私有託管區域不包含符合 DNS 查詢中網域名稱的記錄，Route 53 會使用 `NXDOMAIN`（不存在的網域） 回應查詢。   |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/cloud-map/latest/dg/creating-namespaces.html)  | 
| 公有 DNS | API 呼叫和公有 DNS 查詢 | 當您建立公有 DNS 命名空間時， 會 AWS Cloud Map 建立對應的 Amazon Route 53 公有託管區域。您應用程式中的資源可以透過呼叫 `DiscoverInstances` API 和查詢 AWS Cloud Map 自動建立的公有 Route 53 託管區域中的命名伺服器來探索其他資源。 公有託管區域與命名空間的名稱相同，且包含名稱格式為 *service-name*.*namespace-name* 的 DNS 記錄。  在這種情況下，命名空間名稱必須是您已註冊的網域名稱。   |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/cloud-map/latest/dg/creating-namespaces.html)  | 

## 程序
<a name="create-namespace-steps"></a>

您可以依照下列步驟，使用 AWS CLI AWS 管理主控台或適用於 Python 的 SDK 建立命名空間。

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

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

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

1. 針對**命名空間名稱**，輸入將用於探索執行個體的名稱。
**注意**  
針對公有 DNS 查詢設定的命名空間必須以頂層網域結尾。例如 `.com`。
您可以先將國際化網域名稱 (IDN) 轉換為 Punycode，來指定其名稱。如需線上轉換器的詳細資訊，請在網際網路上搜尋「punycode 轉換器」。  
您也可以在以程式設計的方式建立命名空間時，將國際化網域名稱轉換為 Punycode。例如，如果您使用 Java，可以透過使用 java.net.IDN 程式庫的 `toASCII` 方法，將 Unicode 值轉換為 Punycode。

1. （選用） 對於**命名空間描述**，輸入將在**命名空間**頁面和命名空間資訊下顯示**之命名空間的相關資訊**。您可以使用此資訊輕鬆識別命名空間。

1. 對於**執行個體探索**，您可以選擇 VPC 中的 **API 呼叫**、API 呼叫和 DNS 查詢，以及 **API 呼叫和公有 DNS 查詢**，分別建立 HTTP、私有 DNS 或公有 DNS 命名空間。 ** VPCs** 如需詳細資訊，請參閱[執行個體探索選項](#working-with-namespaces-instance-discovery)。

   根據您的選擇，遵循下列步驟。
   + 如果您在 ** VPCs 中選擇 API 呼叫和 DNS 查詢**，請在 **VPC** 中選擇您要與命名空間建立關聯的虛擬私有雲端 (VPC)。
   + 如果您在 ** VPCs或 API 呼叫和公有 DNS 查詢中選擇** **API 呼叫和 DNS 查詢**，請在 **TTL** 中指定以秒為單位的數值。存留時間 (TTL) 值決定 DNS 解析程式針對使用命名空間建立之 Route 53 託管區域的起始授權 (SOA) DNS 記錄快取資訊的時間長度。如需 TTL 的詳細資訊，請參閱《*Amazon Route 53 開發人員指南*》中的 [TTL （秒）](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-values-shared.html#rrsets-values-common-ttl)。

1. （選用） 在**標籤**下，選擇**新增標籤**，然後指定索引鍵和值來標記命名空間。您可以指定一或多個標籤，以新增至您的命名空間。標籤可讓您將 AWS 資源分類，以便更輕鬆地管理資源。如需詳細資訊，請參閱[標記您的 AWS Cloud Map 資源](using-tags.md)。

1. 選擇 **Create namespace (建立命名空間)**。您可以使用 [ListOperations](https://docs.aws.amazon.com/cloud-map/latest/api/API_ListOperations.html) 檢視操作的狀態。如需詳細資訊，請參閱 *AWS Cloud Map API 參考*中的 [ListOperations](https://docs.aws.amazon.com/cloud-map/latest/api/API_ListOperations.html) 

------
#### [ AWS CLI ]
+ 

  使用您偏好的執行個體探索類型的 命令來建立命名空間 （使用您自己的值取代*紅色*值）。
  + 使用 建立 HTTP 命名空間`[create-http-namespace](https://docs.aws.amazon.com/cli/latest/reference/servicediscovery/create-http-namespace.html)`。使用 HTTP 命名空間註冊的服務執行個體可以使用`DiscoverInstances`請求來探索，但無法使用 DNS 來探索。

    ```
    aws servicediscovery create-http-namespace --name name-of-namespace
    ```
  + 根據 DNS 建立私有命名空間，並且只能使用 在指定的 Amazon VPC 內看見`[create-private-dns-namespace](https://docs.aws.amazon.com/cli/latest/reference/servicediscovery/create-private-dns-namespace.html)`。您可以使用 `DiscoverInstances`請求或使用 DNS 探索已向私有 DNS 命名空間註冊的執行個體

    ```
    aws servicediscovery create-private-dns-namespace --name name-of-namespace --vpc vpc-xxxxxxxxx
    ```
  + 使用 根據在網際網路上可見的 DNS 建立公有命名空間`[create-public-dns-namespace](https://docs.aws.amazon.com/cli/latest/reference/servicediscovery/create-public-dns-namespace.html)`。您可以使用 `DiscoverInstances` 請求或 DNS，探索已向公有 DNS 命名空間註冊的執行個體。

    ```
    aws servicediscovery create-public-dns-namespace --name name-of-namespace
    ```

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

1. 如果您尚未`Boto3`安裝 ，您可以`Boto3`[在這裡](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html#installation)找到安裝、設定和使用 的指示。

1. 匯入`Boto3`並使用 `servicediscovery`做為您的服務。

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

1. 

   使用您偏好的執行個體探索類型的 命令來建立命名空間 （使用您自己的值取代*紅色*值）：
   + 使用 建立 HTTP 命名空間`create_http_namespace()`。使用 HTTP 命名空間註冊的服務執行個體可以使用 進行探索`discover_instances()`，但無法使用 DNS 進行探索。

     ```
     response = client.create_http_namespace(
         Name='name-of-namespace',
     )
     # If you want to see the response
     print(response)
     ```
   + 建立以 DNS 為基礎的私有命名空間，且只能使用 在指定的 Amazon VPC 內看見`create_private_dns_namespace()`。您可以使用 `discover_instances()`或使用 DNS 探索已向私有 DNS 命名空間註冊的執行個體

     ```
     response = client.create_private_dns_namespace(
         Name='name-of-namespace',
         Vpc='vpc-1c56417b',
     )
     # If you want to see the response
     print(response)
     ```
   + 使用 根據網際網路上可見的 DNS 建立公有命名空間`create_public_dns_namespace()`。您可以使用 `discover_instances()`或使用 DNS，探索已向公有 DNS 命名空間註冊的執行個體。

     ```
     response = client.create_public_dns_namespace(
         Name='name-of-namespace',
     )
     # If you want to see the response
     print(response)
     ```
   + 回應輸出範例

     ```
     {
         'OperationId': 'gv4g5meo7ndmeh4fqskygvk23d2fijwa-k9302yzd',
         'ResponseMetadata': {
             '...': '...',
         },
     }
     ```

------

## 後續步驟
<a name="create-namespace-next-steps"></a>

建立命名空間後，您可以在命名空間中建立 服務，將集合的應用程式資源分組，這些資源共同用於應用程式中的特定用途。服務可做為將應用程式資源註冊為執行個體的範本。如需建立 AWS Cloud Map 服務的詳細資訊，請參閱 [為應用程式元件建立 AWS Cloud Map 服務](creating-services.md)。