

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

# 使用亚马逊 OpenSearch 服务集群作为目标 Amazon Database Migration Service
<a name="CHAP_Target.Elasticsearch"></a>

您可以使用将数据迁移 Amazon DMS 到亚马逊 OpenSearch 服务（OpenSearch 服务）。 OpenSearch 服务是一种托管服务，可以轻松部署、操作和扩展 OpenSearch 服务集群。

在 S OpenSearch ervice 中，您可以使用索引和文档。*索引*是文档的集合，*文档*是包含标量值、数组和其他对象的 JSON 对象。 OpenSearch 提供了基于 JSON 的查询语言，因此您可以查询索引中的数据并检索相应的文档。

为 OpenSearch 服务的目标终端节点 Amazon DMS 创建索引时，它会从源端点为每个表创建一个索引。创建 OpenSearch 服务索引的成本取决于多个因素。这些是创建的索引数量、这些索引中的数据总量以及为每个文档 OpenSearch 存储的少量元数据。

为您的 OpenSearch 服务集群配置适合迁移范围的计算和存储资源。建议您根据要使用的复制任务考虑以下因素：
+ 对于完全数据加载，请考虑您要迁移的数据总量以及传输速度。
+ 要复制正在进行的更改，请考虑更新频率和 end-to-end延迟要求。

此外，在 OpenSearch 集群上配置索引设置，密切注意文档数量。

**多线程完全加载任务设置**

为了帮助提高传输速度， Amazon DMS 支持对 OpenSearch 服务目标集群进行多线程满载。 Amazon DMS 支持这种多线程，其任务设置包括以下内容：
+ `MaxFullLoadSubTasks` – 使用此选项指示要并行加载的表的最大数目。DMS 使用专用子任务将每个表加载到其相应的 OpenSearch 服务目标索引中。默认值为 8；最大值为 49。
+ `ParallelLoadThreads`— 使用此选项指定用于将每个表加载到其 OpenSearch 服务目标索引的线程数。 Amazon DMS OpenSearch 服务目标的最大值为 32。您可以请求提高此最大值限制。
**注意**  
如果您不更改 `ParallelLoadThreads` 的默认值 (0)， Amazon DMS 一次传输一个记录。这种方法会给您的 OpenSearch 服务集群带来不必要的负担。确保您将此选项设置为 1 或更高。
+ `ParallelLoadBufferSize`— 使用此选项指定要存储在缓冲区中的最大记录数，并行加载线程使用这些缓冲区将数据加载到 OpenSearch 服务目标。默认值是 50。最大值为 1000。将此设置与 `ParallelLoadThreads` 一起使用；仅在有多个线程时 `ParallelLoadBufferSize` 才有效。

有关 DMS 如何使用多线程加载 OpenSearch 服务集群的更多信息，请参阅 Amazon 博客文章 Scale [Amazon S OpenSearch er](https://www.amazonaws.cn/blogs/database/scale-amazon-elasticsearch-service-for-aws-database-migration-service-migrations/) vice 以进行迁移。 Amazon Database Migration Service 

**多线程 CDC 加载任务设置**

您可以使用任务设置来修改 `PutRecords` API 调用的行为，从而提高 OpenSearch 服务目标集群的更改数据捕获 (CDC) 性能。为此，您可以使用 `ParallelApply*` 任务设置来指定并发线程的数量、每个线程的队列数以及要存储在缓冲区中的记录数。例如，假设您要执行 CDC 加载并且要并行应用 32 个线程。您还希望对于每个线程访问 64 个队列，每个缓冲区存储 50 条记录。
**注意**  
3.4.0 及更高 Amazon DMS 版本支持在 CDC 期间使用`ParallelApply*`任务设置到亚马逊 OpenSearch 服务目标终端节点。

为了提高 CDC 性能， Amazon DMS 支持以下任务设置：
+ `ParallelApplyThreads`— 指定在 CDC 加载期间 Amazon DMS 用于将数据记录推送到 OpenSearch 服务目标端点的并发线程数。默认值为零（0），最大值为 32。
+ `ParallelApplyBufferSize`— 指定在每个缓冲队列中存储的最大记录数，以便并发线程在 CDC 加载期间推送到 OpenSearch 服务目标端点。默认值是 100，最大值是 1,000。当 `ParallelApplyThreads` 指定多个线程时，请使用此选项。
+ `ParallelApplyQueuesPerThread`— 指定每个线程访问的队列数，以便在 CDC 期间将数据记录从队列中提取数据记录并为 OpenSearch 服务端点生成批量加载。

使用 `ParallelApply*` 任务设置时，`partition-key-type` 默认值是表的 `primary-key`，而不是 `schema-name.table-name`。

## 从关系数据库表迁移到 OpenSearch 服务索引
<a name="CHAP_Target.Elasticsearch.RDBMS2Elasticsearch"></a>

Amazon DMS 支持将数据迁移到 OpenSearch 服务的标量数据类型。从 Oracle 或 MySQL 等关系数据库迁移到 OpenSearch 服务时，您可能需要调整存储这些数据的方式。

Amazon DMS 支持以下 OpenSearch 服务标量数据类型：
+ 布尔值 
+ 日期
+ 浮点型
+ Int
+ 字符串

Amazon DMS 将日期类型的数据转换为字符串类型。您可以指定自定义映射来解释这些日期。

Amazon DMS 不支持 LOB 数据类型的迁移。

## 使用亚马逊 OpenSearch 服务作为目标的先决条件 Amazon Database Migration Service
<a name="CHAP_Target.Elasticsearch.Prerequisites"></a>

在开始使用 OpenSearch 服务数据库作为目标之前 Amazon DMS，请务必创建一个 Amazon Identity and Access Management (IAM) 角色。此角色应允许 Amazon DMS 访问目标端点的 OpenSearch 服务索引。以下 IAM policy 中显示了所需的最小访问权限集合。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "1",
            "Effect": "Allow",
            "Principal": {
                "Service": "dms.amazonaws.com"
        },
        "Action": "sts:AssumeRole"
        }
    ]
}
```

------

您用于迁移到 S OpenSearch ervice 的角色必须具有以下权限。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "es:ESHttpDelete",
        "es:ESHttpGet",
        "es:ESHttpHead",
        "es:ESHttpPost",
        "es:ESHttpPut"
      ],
      "Resource": "*"
    }
  ]
}
```

------

在前面的示例中，`region`替换为 Amazon 地区标识、*`account-id`*您的 Amazon 账户 ID 和`domain-name`您的亚马逊 OpenSearch 服务域名。例如，`arn:aws:es:us-west-2:123456789012:domain/my-es-domain`

## 使用 OpenSearch 服务作为目标时的终端节点设置 Amazon DMS
<a name="CHAP_Target.Elasticsearch.Configuration"></a>

您可以使用端点设置来配置 OpenSearch 服务目标数据库，就像使用额外的连接属性一样。您可以在使用 Amazon DMS 控制台创建目标端点时指定设置，或者使用中的`create-endpoint`命令和 `--elasticsearch-settings '{"EndpointSetting": "value", ...}'` JSON 语法。[Amazon CLI](https://docs.amazonaws.cn/cli/latest/reference/dms/index.html)

下表显示了您可以将 OpenSearch 服务作为目标使用的终端节点设置。


| 属性名称 | 有效值 | 默认值和描述 | 
| --- | --- | --- | 
|  `FullLoadErrorPercentage`   |  一个大于 0 但不大于 100 的正整数。  |  10 – 对于完全加载任务，此属性确定任务失败之前允许的错误数阈值。例如，假设源终端节点有 1,500 行且此参数设置为 10。如果在写入目标端点时 Amazon DMS 遇到超过 150 个错误（占行数的 10%），则任务将失败。  | 
|   `ErrorRetryDuration`   |  大于 0 的正整数。  |  300-如果目标端点发生错误，则 Amazon DMS 重试此数秒。否则，任务将失败。  | 
|  `UseNewMappingType`  | true 或 false |  `false`，但是要使用 opensearch v2.x 工作，应将其设置为 `true`。  | 

## 使用亚马逊 OpenSearch 服务作为目标时的限制 Amazon Database Migration Service
<a name="CHAP_Target.Elasticsearch.Limitations"></a>

使用亚马逊 OpenSearch 服务作为目标时，存在以下限制：
+ OpenSearch 服务使用动态映射（auto guess）来确定用于迁移数据的数据类型。
+ OpenSearch 服务使用唯一的 ID 存储每个文档。以下是示例 ID。

  ```
  "_id": "D359F8B537F1888BC71FE20B3D79EAE6674BE7ACA9B645B0279C7015F6FF19FD"
  ```

  每个文档 ID 为 64 字节长，因此请将其视为一项存储要求。例如，如果您从 Amazon DMS 源迁移 100,000 行，则生成的 OpenSearch 服务索引需要额外存储 6,400,000 字节。
+ 使用 S OpenSearch ervice，您无法更新主键属性。在将持续复制与更改数据捕获（CDC）一起使用时，该限制是非常重要的，因为这可能会导致在目标中包含不需要的数据。在 CDC 模式下，主键映射到长度为 32 字节的 SHA256 值。它们被转换为人类可读的 64 字节字符串，并用作 OpenSearch 服务文档。 IDs
+ 如果 Amazon DMS 遇到任何无法迁移的项目，它会将错误消息写入 Amazon CloudWatch Logs。此行为不同于其他 Amazon DMS 目标端点的行为，后者将错误写入异常表。
+ Amazon DMS 不支持连接使用主用户和密码启用了精细访问控制的 Amazon ES 集群。
+ Amazon DMS 不支持无服务器 OpenSearch 服务。
+ OpenSearch 服务不支持将数据写入预先存在的索引。
+ 不支持将复制任务设置与 OpenSearch 目标终端节点一起使用。`TargetTablePrepMode:TRUNCATE_BEFORE_LOAD`
+ 使用将数据迁移到 Amazon Elasticsearch 时 Amazon DMS，源数据必须具有主键或唯一标识符列。如果源数据没有主键或唯一标识符，则需要使用 define-primary-key转换规则进行定义。

## 亚马逊 OpenSearch 服务的目标数据类型
<a name="CHAP_Target.Elasticsearch.DataTypes"></a>

 Amazon DMS 迁移来自异构数据库的数据时，该服务会将源数据库中的数据类型映射到称为 Amazon DMS 数据类型的中间数据类型。然后，此服务将中间数据类型映射到目标数据类型。下表显示了每种 Amazon DMS 数据类型及其在 S OpenSearch ervice 中映射到的数据类型。


| Amazon DMS 数据类型 | OpenSearch 服务数据类型 | 
| --- | --- | 
|  布尔值  |  布尔值  | 
|  日期  |  字符串  | 
|  时间  |  date  | 
|  时间戳  |  date  | 
|  INT4  |  整数  | 
|  Real4  |  浮点数  | 
|  UINT4  |  整数  | 

有关 Amazon DMS 数据类型的更多信息，请参见[Amazon Database Migration Service 的数据类型](CHAP_Reference.DataTypes.md)。