

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

# AWS Cloud Map 服务实例
<a name="working-with-instances"></a>

服务实例包含有关如何为应用程序查找资源（如 Web 服务器）的信息。注册实例后，您可以使用 DNS 查询或 AWS Cloud Map [DiscoverInstances](https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html)API 操作来找到它们。您可以注册的资源包括但不限于以下内容：
+ Amazon EC2 实例
+ Amazon DynamoDB 表
+ Amazon S3 存储桶
+ Amazon Simple Queue Service（Amazon SQS）队列
+ APIs 部署在 Amazon API Gateway 之上

您可以为服务实例指定属性值，客户端可以使用这些属性来筛选 AWS Cloud Map 返回的资源。例如，应用程序可以请求特定部署阶段中的资源，如 BETA 或 PROD。您也可以使用属性进行版本控制。

以下过程介绍如何将应用程序中的资源注册为服务实例、查看服务中已注册实例的列表、编辑某些实例参数以及取消注册实例。

**Topics**
+ [将资源注册为 AWS Cloud Map 服务实例](registering-instances.md)
+ [列出 AWS Cloud Map 服务实例](listing-instances.md)
+ [更新 AWS Cloud Map 服务实例](updating-instances.md)
+ [注销 AWS Cloud Map 服务实例](deregistering-instances.md)

# 将资源注册为 AWS Cloud Map 服务实例
<a name="registering-instances"></a>

您可以将应用程序的资源注册为 AWS Cloud Map 服务中的实例。例如，假设您已`users`为管理用户数据的所有应用程序资源创建了一个名为的服务。然后，您可以将用于存储用户数据的 DynamoDB 表注册为该服务的实例。

**注意**  
 AWS Cloud Map 控制台上不提供以下功能：  
在使用控制台注册服务实例时，您无法创建将流量路由到弹性负载均衡（ELB）负载均衡器的别名记录。在注册实例时，您必须包含 `AWS_ALIAS_DNS_NAME` 属性。有关更多信息，请参阅《AWS Cloud Map API Reference》**中的 [RegisterInstance](https://docs.aws.amazon.com/cloud-map/latest/api/API_RegisterInstance.html)。
如果您使用包含自定义运行状况检查的服务注册实例，则无法为自定义运行状况检查指定初始状态。默认情况下，自定义运行状况检查的初始状态为 **Healthy (正常)**。如果您希望初始运行状况为 **Unhealthy (不正常)**，请以编程方式注册实例并包含 `AWS_INIT_HEALTH_STATUS` 属性。有关更多信息，请参阅《AWS Cloud Map API Reference》**中的 [RegisterInstance](https://docs.aws.amazon.com/cloud-map/latest/api/API_RegisterInstance.html)。

要在服务中注册实例，请按照以下步骤操作。

------
#### [ 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. 在**服务：*service-name***页面上，选择**注册服务实例**。

1. 在**注册服务实例**页面上，选择**实例类型**。根据命名空间实例发现配置，您可以选择为没有 IP 地址的资源指定 IP 地址、Amazon EC2 实例 ID 或其他识别信息。
**注意**  
您只能在 HTTP 命名空间中选择 **EC2 实例**。

1. 对于**服务实例 ID**，请提供与服务实例关联的标识符。
**注意**  
如果您想更新现有实例，请提供与您要更新的实例关联的标识符。然后，按照后续步骤更新值并重新注册实例。

1. 根据您选择的**实例类型**，执行以下步骤。
**重要**  
指定自定义属性时，不能在密钥中使用`AWS_`前缀（不区分大小写）。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloud-map/latest/dg/registering-instances.html)

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

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

  当您提交 `RegisterInstance` 请求时：
  + 对于您在 `ServiceId` 指定的服务中定义的每个 DNS 记录，都会在与相应命名空间关联的托管区中创建或更新一条记录。
  + 如果服务包括 `HealthCheckConfig`，则根据运行状况检查配置中的设置创建运行状况检查。
  + 任何运行状况检查都与每条新的或更新的记录相关联。

  使用`[register-instance](https://docs.aws.amazon.com/cli/latest/reference/servicediscovery/register-instance.html)`命令注册服务实例（将*red*值替换为自己的值）。

  ```
  aws servicediscovery register-instance \
      --service-id srv-xxxxxxxxx \
      --instance-id myservice-xx \
      --attributes=AWS_INSTANCE_IPV4=172.2.1.3,AWS_INSTANCE_PORT=808
  ```

------
#### [ 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. 

   当您提交 `RegisterInstance` 请求时：
   + 对于您在 `ServiceId` 指定的服务中定义的每个 DNS 记录，都会在与相应命名空间关联的托管区中创建或更新一条记录。
   + 如果服务包括 `HealthCheckConfig`，则根据运行状况检查配置中的设置创建运行状况检查。
   + 任何运行状况检查都与每条新的或更新的记录相关联。

   向注册服务实例`register_instance()`（将*red*值替换为您自己的值）。

   ```
   response = client.register_instance(
       Attributes={
           'AWS_INSTANCE_IPV4': '172.2.1.3',
           'AWS_INSTANCE_PORT': '808',
       },
       InstanceId='myservice-xx',
       ServiceId='srv-xxxxxxxxx',
   )
   # If you want to see the response
   print(response)
   ```

   示例响应输出

   ```
   {
       'OperationId': '4yejorelbukcjzpnr6tlmrghsjwpngf4-k95yg2u7',
       'ResponseMetadata': {
           '...': '...',
       },
   }
   ```

------

# 列出 AWS Cloud Map 服务实例
<a name="listing-instances"></a>

要查看已使用服务注册的服务实例的列表，请执行以下过程。

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

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

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

1. 选择包含要为其列出服务实例的服务的命名空间的名称。

1. 选择用于创建服务实例的服务的名称。您将在 “**服务实例” 下看到实例**列表。您可以在搜索字段中输入实例 ID 以列出特定实例。**创建者**字段显示注册 AWS 账户 该实例的 ID。
**注意**  
如果注册实例的命名空间是共享命名空间，则**创建者下的 AWS 账户 ** ID 可能与您的账户 ID 不同。有关共享命名空间的更多信息，请参阅。[共享 AWS Cloud Map 命名空间](sharing-namespaces.md)

------
#### [ AWS CLI ]
+ 使用`[list-instances](https://docs.aws.amazon.com/cli/latest/reference/servicediscovery/list-instances.html)`命令列出服务实例（用您自己的*red*值替换该值）。

  ```
  aws servicediscovery list-instances --service-id srv-xxxxxxxxx
  ```

------
#### [ 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. 使用列出服务实例`list_instances()`（用您自己的*red*值替换该值）。

   ```
   response = client.list_instances(
       ServiceId='srv-xxxxxxxxx',
   )
   # If you want to see the response
   print(response)
   ```

   示例响应输出

   ```
   {
       'Instances': [
           {
               'Attributes': {
                   'AWS_INSTANCE_IPV4': '172.2.1.3',
                   'AWS_INSTANCE_PORT': '808',
               },
               'Id': 'i-xxxxxxxxxxxxxxxxx',
           },
       ],
       'ResponseMetadata': {
           '...': '...',
       },
   }
   ```

------

# 更新 AWS Cloud Map 服务实例
<a name="updating-instances"></a>

您可以根据要更新的值，通过两种方式更新服务实例：
+ **更新任何值**：如果要更新注册服务实例时为其指定的任何值（包括自定义属性），则需要重新注册服务实例并重新指定所有值。按照中的步骤操作[将资源注册为 AWS Cloud Map 服务实例](registering-instances.md)，为服务实例 ID 指定现有服务实例的**实例 ID**。

  或者，您可以使用 [https://docs.aws.amazon.com/cloud-map/latest/api/API_RegisterInstance.html](https://docs.aws.amazon.com/cloud-map/latest/api/API_RegisterInstance.html)API。您可以使用和`ServiceId`参数指定现有实例和服务的 ID，`InstanceId`并重新指定其他值。
+ **仅更新自定义属性**：如果您只希望更新服务实例的自定义属性，则无需重新注册该实例。您只能更新这些值。请参阅[更新服务实例的自定义属性](#updating-instance-attributes-procedure)。

## 更新服务实例的自定义属性
<a name="updating-instance-attributes-procedure"></a>

**仅更新服务实例的自定义属性**

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

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

1. 在 **Namespaces (命名空间)** 页面上，选择包含最初用于注册服务实例的服务的命名空间。

1. 在**命名空间：*namespace-name***页面上，选择用于注册服务实例的服务。

1. 在 S **ervic *service-name* e:** 页面上，选择要更新的服务实例的名称。

1. 在 **Custom attributes (自定义属性)** 部分中，选择 **Edit (编辑)**。

1. 在 **“编辑服务实例：*instance-name***” 页面上，添加、移除或更新自定义属性。您可以更新现有属性的键和值。

1. 选择 **Update service instance (更新服务实例)**。

# 注销 AWS Cloud Map 服务实例
<a name="deregistering-instances"></a>

必须先取消注册已使用服务注册的所有服务实例，然后才能删除服务。

要取消注册服务实例，请执行以下过程。

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

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

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

1. 选择包含要取消注册的服务实例的命名空间的选项。

1. 在**命名空间：*namespace-name***页面上，选择用于注册服务实例的服务。

1. 在**服务：*service-name***页面上，选择要取消注册的服务实例。

1. 选择**注销**。

1. 确认您要取消注册服务实例。

------
#### [ AWS CLI ]
+ 使用`[deregister-instance](https://docs.aws.amazon.com/cli/latest/reference/servicediscovery/deregister-instance.html)`命令注销服务实例（将值替换为自己的*red*值）。此命令删除 Amazon Route 53 的 DNS 记录以及为指定实例 AWS Cloud Map 创建的所有运行状况检查。

  ```
  aws servicediscovery deregister-instance \
      --service-id srv-xxxxxxxxx \
      --instance-id myservice-53
  ```

------
#### [ 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. 使用取消注册服务实例`deregister-instance()`（将值替换为您自己的*red*值）。此命令删除 Amazon Route 53 的 DNS 记录以及为指定实例 AWS Cloud Map 创建的所有运行状况检查。

   ```
   response = client.deregister_instance(
       InstanceId='myservice-53',
       ServiceId='srv-xxxxxxxxx',
   )
   # If you want to see the response
   print(response)
   ```

   示例响应输出

   ```
   {
       'OperationId': '4yejorelbukcjzpnr6tlmrghsjwpngf4-k98rnaiq',
       'ResponseMetadata': {
           '...': '...',
       },
   }
   ```

------