

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

# 创建 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_cn/cloud-map/latest/dg/creating-namespaces.html)  | 
| 私有 DNS | VPC 中的 API 调用和 DNS 查询 | 创建私有 DNS 命名空间时， AWS Cloud Map 会创建相应的 Amazon Route 53 私有托管区域。应用程序中的资源可以通过调用 `DiscoverInstances` API 和查询自动创建的私有 Route 53 托管区域中的域名服务器来发现其他资源。 AWS Cloud Map  由创建的托管区域 AWS Cloud Map 与命名空间同名，并且包含名称格式为 DNS 记录*service-name*。 *namespace-name*。  Route 53 解析程序将使用私有托管区域中的记录解析源自 VPC 的 DNS 查询。如果私有托管区域不包含与 DNS 查询中的域名匹配的记录，Route 53 将使用 `NXDOMAIN`（不存在的域）响应该查询。   |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloud-map/latest/dg/creating-namespaces.html)  | 
| 公有 DNS | API 调用和公共 DNS 查询 | 在创建公有 DNS 命名空间时， AWS Cloud Map 会创建一个相应的 Amazon Route 53 公有托管区域。应用程序中的资源可以通过调用 `DiscoverInstances` API 和查询自动创建的 Route 53 公共托管区域中的域名服务器来发现其他资源。 AWS Cloud Map  公共托管区域与命名空间同名，并且包含名称格式为 DNS 记录*service-name*。 *namespace-name*。  在这种情况下，命名空间名称必须是您注册的域名。   |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloud-map/latest/dg/creating-namespaces.html)  | 

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

您可以按照以下步骤使用适用于 Python 的 AWS CLI AWS 管理控制台、或 SDK 创建命名空间。

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

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

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

1. 在**命名空间名称**中，输入将用于发现实例的名称。
**注意**  
为公共 DNS 查询配置的命名空间必须以顶级域名结尾。例如 `.com`。
您可以指定一个国际化域名 (IDN)（如果您先将该名称转换为域名代码）。有关在线转换器的信息，请在 Internet 上搜索“域名代码转换器”。  
您还可以在以编程方式创建命名空间时将国际化域名转换为域名代码。例如，如果您使用 Java，则可使用 java.net.IDN 库的 `toASCII` 方法将 Unicode 值转换为域名代码。

1. （可选）在 “**命名空间描述**” 中，输入有关命名空间的信息，这些信息将显示在 “**命名空间**” 页面和 “**命名空间**信息” 下。您可以使用这些信息轻松识别命名空间。

1. 对于**实例发现**，您可以**在 VPCs API 调用、**API 调用**和 DNS 查询以及 API 调用****和公有 DNS 查询**之间进行选择，分别创建 HTTP、私有 DNS 或公有 DNS 命名空间。有关更多信息，请参阅 [实例发现选项](#working-with-namespaces-instance-discovery)。

   根据您的选择，请按照以下步骤操作。
   + 如果您**在中选择 API 调用和 DNS 查询 VPCs**，则对于 **VPC**，请选择要与命名空间关联的虚拟私有云 (VPC)。
   + 如果您**在中选择 API 调用和 DNS 查询**， VPCs或者选择 **API 调用和公共 DNS 查询**，则对于 **TTL**，请指定以秒为单位的数值。生存时间 (TTL) 值决定 DNS 解析器为使用您的命名空间创建的 Route 53 托管区域的授权起始授权 (SOA) DNS 记录缓存信息多长时间。有关 TTL 的更多信息，请参阅 A *mazon 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. 选择**创建命名空间**。您可以使用查看操作的状态[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 ]
+ 

  使用您想要的实例发现类型的命令创建命名空间（用您自己的*red*值替换这些值）。
  + 使用 `[create-http-namespace](https://docs.aws.amazon.com/cli/latest/reference/servicediscovery/create-http-namespace.html)` 创建 HTTP 命名空间。可以使用 `DiscoverInstances` 请求发现使用 HTTP 命名空间注册的服务实例，但无法使用 DNS 发现该服务实例。

    ```
    aws servicediscovery create-http-namespace --name name-of-namespace
    ```
  + 使用 `[create-private-dns-namespace](https://docs.aws.amazon.com/cli/latest/reference/servicediscovery/create-private-dns-namespace.html)` 根据 DNS 创建私有命名空间（仅在指定的 Amazon VPC 内才可见）。您可以使用 `DiscoverInstances` 请求或使用 DNS 发现通过私有 DNS 命名空间注册的实例。

    ```
    aws servicediscovery create-private-dns-namespace --name name-of-namespace --vpc vpc-xxxxxxxxx
    ```
  + 使用 `[create-public-dns-namespace](https://docs.aws.amazon.com/cli/latest/reference/servicediscovery/create-public-dns-namespace.html)` 根据 DNS 创建公有命名空间（在互联网上可见）。您可以使用 `DiscoverInstances` 请求或使用 DNS 发现通过公有 DNS 命名空间注册的实例。

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

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

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

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

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

1. 

   使用你想要的实例发现类型的命令创建一个命名空间（用你自己的*red*值替换这些值）：
   + 使用 `create_http_namespace()` 创建 HTTP 命名空间。可以使用 `discover_instances()` 发现使用 HTTP 命名空间注册的服务实例，但无法使用 DNS 发现该服务实例。

     ```
     response = client.create_http_namespace(
         Name='name-of-namespace',
     )
     # If you want to see the response
     print(response)
     ```
   + 使用 `create_private_dns_namespace()` 根据 DNS 创建私有命名空间（仅在指定的 Amazon VPC 内才可见）。您可以使用 `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)
     ```
   + 使用 `create_public_dns_namespace()` 根据 DNS 创建公有命名空间（在互联网上可见）。您可以使用 `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)。