

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

# 使用 Amazon OpenSearch Ingestion 在域名和集合之间迁移数据
<a name="creating-opensearch-service-pipeline"></a>

您可以使用 OpenSearch 摄取管道在亚马逊 OpenSearch 服务域或 OpenSearch 无服务器 VPC 集合之间迁移数据。为此，您需要设置一个管道，将一个域或集合配置为源，将另一个域或集合配置为接收器。这可以有效地将数据从一个域或集合迁移到另一个域或集合。

要迁移数据，您必须拥有以下资源：
+ 源 OpenSearch 服务域或 OpenSearch 无服务器 VPC 集合。此域或集合包含要迁移的数据。如果您使用的是域名，则该域名必须运行 OpenSearch 版本 1.0 或更高版本，或者运行 Elasticsearch 版本 7.4 或更高版本。该域还必须具有向您的管道角色授予相应权限的访问策略。
+ 您要向其迁移数据的单独域或 VPC 集合。该域或集合将充当管道*接收器*。
+ 一个管道角色， OpenSearch Ingestion 将使用它来读取和写入你的收藏或域名。请将此角色的 Amazon 资源名称（ARN）包含在管道配置中。有关更多信息，请参阅以下资源：
  + [向 Amazon OpenSearch Ingestion 管道授予对域名的访问权限](pipeline-domain-access.md)
  + [授予 Amazon OpenSearch Ingestion 管道访问集合的权限](pipeline-collection-access.md)

**Topics**
+ [限制](#Limitations-domain-collection)
+ [OpenSearch 服务即来源](#opensearch-source)
+ [指定多个 OpenSearch 服务域接收器](#multiple-domains)
+ [将数据迁移到 OpenSearch 无服务器 VPC 集合](#pipeline-collection)

## 限制
<a name="Limitations-domain-collection"></a>

将 OpenSearch 服务域或 OpenSearch 无服务器集合指定为接收器时，以下限制适用：
+ 一个管道不能写入多个 VPC 域。
+ 您只能将数据迁移到使用 VPC 访问权限的 OpenSearch 无服务器集合或从中迁移数据。不支持公有集合。
+ 您不能在单个管道配置中指定 VPC 和公有域的组合。
+ 在单个管道配置中，您最多可以指定 20 个非管道接收器。
+ 在单个管道配置 AWS 区域 中，最多可以指定三个不同的接收器。
+ 如果任何接收器的停机时间过长或未预置足够的容量来接收传入的数据，则具有多个接收器的管道的处理速度可能会逐渐下降。

## OpenSearch 服务即来源
<a name="opensearch-source"></a>

您指定为源的域或集合是要迁移的数据的*来源*。

### 在 IAM 中创建管道角色
<a name="source-IAM"></a>

要创建 In OpenSearch gestion 管道，必须先创建一个管道角色来授予域名或集合之间的读写权限。为此，请执行以下步骤：

1. 在 IAM 中创建一个新权限策略以附加到该管道角色。确保允许从源读取数据并将数据写入接收器的权限。有关为 OpenSearch 服务域设置 IAM 管道权限的更多信息，请参阅[向 Amazon OpenSearch Ingestion 管道授予对域名的访问权限](pipeline-domain-access.md)和[授予 Amazon OpenSearch Ingestion 管道访问集合的权限](pipeline-collection-access.md)。

1. 在管道角色中指定以下权限，以从源中读取：

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

****  

   ```
   {
      "Version":"2012-10-17",		 	 	 
      "Statement":[
         {
            "Effect":"Allow",
            "Action":"es:ESHttpGet",
            "Resource":[
               "arn:aws:es:us-east-1:111122223333:domain/domain-name/",
               "arn:aws:es:us-east-1:111122223333:domain/domain-name/_cat/indices",
               "arn:aws:es:us-east-1:111122223333:domain/domain-name/_search",
               "arn:aws:es:us-east-1:111122223333:domain/domain-name/_search/scroll",
               "arn:aws:es:us-east-1:111122223333:domain/domain-name/*/_search"
            ]
         },
         {
            "Effect":"Allow",
            "Action":"es:ESHttpPost",
            "Resource":[
               "arn:aws:es:us-east-1:111122223333:domain/domain-name/*/_search/point_in_time",
               "arn:aws:es:us-east-1:111122223333:domain/domain-name/*/_search/scroll"
            ]
         },
         {
            "Effect":"Allow",
            "Action":"es:ESHttpDelete",
            "Resource":[
               "arn:aws:es:us-east-1:111122223333:domain/domain-name/_search/point_in_time",
               "arn:aws:es:us-east-1:111122223333:domain/domain-name/_search/scroll"
            ]
         }
      ]
   }
   ```

------

### 创建管道
<a name="create"></a>

将策略附加到管道角色后，使用**AWSOpenSearchDataMigrationPipeline**迁移蓝图创建管道。该蓝图包括用于在 OpenSearch 服务域或集合之间迁移数据的默认配置。有关更多信息，请参阅 [使用蓝图](pipeline-blueprint.md)。

**注意**  
OpenSearch Ingestion 使用您的源域版本和发行版来确定使用哪种机制进行迁移。某些版本支持该`point_in_time`选项。 OpenSearch Serverless 之所以使用该`search_after`选项，是因为它不支持`point_in_time`或`scroll`。

迁移过程中可能正在创建新索引，也可能在迁移过程中更新文档。因此，您可能需要对域索引数据执行一次或多次扫描，以获取新的或更新的数据。

通过在管道配置中配置 `index_read_count` 和 `interval`，指定要运行的扫描次数。以下示例说明如何执行多次扫描：

```
scheduling:
    interval: "PT2H"
    index_read_count: 3
    start_time: "2023-06-02T22:01:30.00Z"
```

OpenSearch Ingestion 使用以下配置来确保您的数据写入同一个索引并保持相同的文档 ID：

```
index: "${getMetadata(\"opensearch-index\")}"
document_id: "${getMetadata(\"opensearch-document_id\")}"
```

## 指定多个 OpenSearch 服务域接收器
<a name="multiple-domains"></a>

您可以指定多个公共 OpenSearch 服务域作为数据的目的地。您可以使用此功能执行条件路由或将传入的数据复制到多个 OpenSearch 服务域。您最多可以指定 10 个不同的公共 OpenSearch 服务域作为接收器。

在以下示例中，传入的数据有条件地路由到不同的 OpenSearch 服务域：

```
...
  route:
    - 2xx_status: "/response >= 200 and /response < 300"
    - 5xx_status: "/response >= 500 and /response < 600"
  sink:
    - opensearch:
        hosts: [ "https://search-response-2xx.region.es.amazonaws.com" ]
        aws:
          region: "us-east-1"
        index: "response-2xx"
        routes:
          - 2xx_status
    - opensearch:
        hosts: [ "https://search-response-5xx.region.es.amazonaws.com" ]
        aws:
          region: "us-east-1"
        index: "response-5xx"
        routes:
          - 5xx_status
```

## 将数据迁移到 OpenSearch 无服务器 VPC 集合
<a name="pipeline-collection"></a>

您可以使用 OpenSearch Ingestion 将数据从源 OpenSearch 服务域或 OpenSearch 无服务器集合迁移到 VPC 集合接收器。必须在管道配置中提供网络访问策略。有关将数据提取到 OpenSearch 无服务器 VPC 集合的更多信息，请参阅。[教程：使用 Amazon Ingestion 将数据提取到集合中 OpenSearch](osis-serverless-get-started.md)

**将数据迁移到 VPC 集合**

1. 创建 OpenSearch 无服务器集合。有关说明，请参阅[教程：使用 Amazon Ingestion 将数据提取到集合中 OpenSearch](osis-serverless-get-started.md)。

1. 为集合创建网络策略，指定对集合端点和控制面板端点的 VPC 访问权限。有关说明，请参阅[Amazon OpenSearch Serverless 的网络访问](serverless-network.md)。

1. 如果您还没有管道角色，请创建一个。有关说明，请参阅[管道角色](pipeline-security-overview.md#pipeline-security-sink)。

1. 创建管道。有关说明，请参阅[使用蓝图](pipeline-blueprint.md)。