

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

# 教程：迁移到亚马逊 OpenSearch 服务
<a name="migration"></a>

索引快照是从自行管理 OpenSearch 或旧版 Elasticsearch 集群迁移到亚马逊服务的常用方式。 OpenSearch 总体而言，此过程包括以下步骤：

1. 拍摄现有集群的快照，然后将快照上载到 Amazon S3 存储桶。

1. 创建 OpenSearch 服务域。

1. 向 S OpenSearch ervice 授予访问存储桶的权限，并确保您有权使用快照。

1. 在 OpenSearch 服务域上恢复快照。

此演练提供更详细的步骤和替代选项（如果适用）。

## 拍摄并上载快照
<a name="migration-take-snapshot"></a>

尽管您可以使用 rep [ository-s3](https://docs.opensearch.org/latest/opensearch/snapshot-restore/#amazon-s3) 插件将快照直接拍摄到 S3，但您必须在每个节点上安装该插件，进行调整`opensearch.yml`（或者`elasticsearch.yml`如果使用 Elasticsearch 集群），重启每个节点，添加您的 AWS 凭据，最后拍摄快照。此插件是持续使用或迁移大型集群的绝佳选择。

对于较小的集群，一次性方法是拍摄[共享文件系统快照](https://docs.opensearch.org/latest/opensearch/snapshot-restore/#shared-file-system)，然后使用将其上传 AWS CLI 到 S3。如果您已有快照，请跳至步骤 4。

****拍摄快照并将其上载到 Amazon S3****

1. 将 `path.repo` 设置添加到所有节点上的 `opensearch.yml`（或 `Elasticsearch.yml`），然后重新启动每个节点。

   ```
   path.repo: ["/my/shared/directory/snapshots"]
   ```

1. 注册[快照存储库](https://opensearch.org/docs/latest/opensearch/snapshot-restore/#register-repository)，这是您拍摄快照之前所必需的。存储库只是一个存储位置：共享文件系统、Amazon S3、Hadoop Distributed File System (HDFS) 等。在这种情况下，我们将使用共享文件系统（“fs”）：

   ```
   PUT _snapshot/my-snapshot-repo-name
   {
     "type": "fs",
     "settings": {
       "location": "/my/shared/directory/snapshots"
     }
   }
   ```

1. 拍摄快照：

   ```
   PUT _snapshot/my-snapshot-repo-name/my-snapshot-name
   {
     "indices": "migration-index1,migration-index2,other-indices-*",
     "include_global_state": false
   }
   ```

1. 安装 [AWS CLI](https://aws.amazon.com/cli/)，然后运行 `aws configure` 以添加凭证。

1. 导航到快照目录。然后运行以下命令以创建新的 S3 存储桶，并将快照目录的内容上传到该存储桶：

   ```
   aws s3 mb s3://amzn-s3-demo-bucket --region us-west-2
   aws s3 sync . s3://amzn-s3-demo-bucket --sse AES256
   ```

   此操作可能需要一些时间，具体取决于快照大小和互联网连接速度。

## 创建域
<a name="migration-create-domain"></a>

尽管控制台是创建域的最简单方法，但在这种情况下，您已经打开并 AWS CLI 安装了终端。修改以下命令以创建符合您需要的域：

```
aws opensearch create-domain \
  --domain-name migration-domain \
  --engine-version OpenSearch_1.0 \
  --cluster-config InstanceType=c5.large.search,InstanceCount=2 \
  --ebs-options EBSEnabled=true,VolumeType=gp2,VolumeSize=100 \
  --node-to-node-encryption-options Enabled=true \
  --encryption-at-rest-options Enabled=true \
  --domain-endpoint-options EnforceHTTPS=true,TLSSecurityPolicy=Policy-Min-TLS-1-2-2019-07 \
  --advanced-security-options Enabled=true,InternalUserDatabaseEnabled=true,MasterUserOptions='{MasterUserName=master-user,MasterUserPassword=master-user-password}' \
  --access-policies '{"Version": "2012-10-17",		 	 	 "Statement":[{"Effect":"Allow","Principal": {"AWS": "arn:aws:iam::aws-region:user/UserName"},"Action":["es:ESHttp*"],"Resource":"arn:aws:es:aws-region:111122223333:domain/migration-domain/*"}]}' \
  --region aws-region
```

如果不修改，此命令会创建一个具有两个数据节点的可访问互联网的域，每个节点都有 100 GiB 的存储。它还可以通过 HTTP 基本身份验证和所有加密设置实现[精细访问控制](fgac.md)。如果您需要更高级的安全配置（例如 VPC），请使用 OpenSearch 服务控制台。

在发布命令之前，请更改域名、主用户凭证和账号。指定与 S3 存储桶相同的 AWS 区域 OpenSearch/Elasticsearch 版本以及与您的快照兼容的版本。

**重要**  
快照只能向前兼容，并且只能与一个主要版本兼容。例如，您无法从 OpenSearch 1 恢复快照。 Elasticsearch 上的 *x* 集群 7. *x 个*集群，只有一个 OpenSearch 1。 *x* 或 2。 *x* 集群。次要版本也很重要。您无法从 5.3.2 OpenSearch 服务域上自行管理的 5.3.3 集群恢复快照。我们建议选择您的快照支持的最新版本 OpenSearch 或 Elasticsearch。有关兼容版本的表格，请参阅[使用快照迁移数据](snapshot-based-migration.md)。

## 提供权限以访问 S3 存储桶。
<a name="migration-permissions"></a>

在 AWS Identity and Access Management (IAM) 控制台中，[创建具有以下权限和[信任关系](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-console.html#roles-managingrole_edit-trust-policy)的角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)。创建角色时，选择 **S3**作为 **AWS 服务**。将该角色命名为 `OpenSearchSnapshotRole`，以便于查找。

**权限**

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [{
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket"
      ]
    },
    {
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:DeleteObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket/*"
      ]
    }
  ]
}
```

------

**信任关系**

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

****  

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

------

然后向您的个人 IAM 角色授予权限以代入 `OpenSearchSnapshotRole`。创建以下策略并[将其附加到](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)您的身份。

**权限**

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [{
      "Effect": "Allow",
      "Action": "iam:PassRole",
      "Resource": "arn:aws:iam::123456789012:role/OpenSearchSnapshotRole"
    }
  ]
}
```

------

### 在 OpenSearch 仪表板中映射快照角色（如果使用精细的访问控制）
<a name="migration-snapshot-role"></a>

如果启用了[细粒度访问权限](fgac.md#fgac-mapping)，即使您将 HTTP 基本身份验证用于所有其他目的，也需要将 `manage_snapshots` 角色映射到您的 IAM 角色，以便使用快照。

**授予您的身份使用快照的权限**

1. 使用您在创建 OpenSearch 服务域时指定的主用户凭据登录控制面板。您可以在 OpenSearch 服务控制台中找到控制面板 URL。其格式为 `https://domain-endpoint/_dashboards/`。

1. 从主菜单中选择**安全**、**角色**，然后选择 **manage\$1snapshots** 角色。

1. 选择**映射的用户**、**管理映射**。

1. 在相应字段中添加个人 IAM 角色的域 ARN。ARN 必须采用以下格式之一：

   ```
   arn:aws:iam::123456789123:user/user-name
   ```

   ```
   arn:aws:iam::123456789123:role/role-name
   ```

1. 选择 **Map**（映射）并确认在 **Mapped users**（映射的用户）下显示的角色。

## 还原快照。
<a name="migration-restore"></a>

此时，您可以通过两种方式访问您的 OpenSearch 服务域：使用主用户证书进行 HTTP 基本身份验证或使用 IAM 凭证进行 AWS 身份验证。由于快照使用没有主用户概念的 Amazon S3，因此您必须使用您的 IAM 证书在 OpenSearch 服务域中注册快照存储库。

大多数编程语言都有库来协助对请求进行签名，但更简单的方法是使用像 [Postman](https://www.postman.com/downloads/) 这样的工具，并将您的 IAM 凭证放入**授权**部分中。

![\[Postman interface showing Authorization settings for AWS API request with Signature type.\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/images/migration2.png)


**还原快照。**

1. 无论您选择如何对请求进行签名，第一步都是注册存储库：

   ```
   PUT _snapshot/my-snapshot-repo-name
   {
     "type": "s3",
     "settings": {
       "bucket": "amzn-s3-demo-bucket",
       "region": "us-west-2",
       "role_arn": "arn:aws:iam::123456789012:role/OpenSearchSnapshotRole"
     }
   }
   ```

1. 然后在存储库中列出快照，并找到要还原的快照。此时，您可以继续使用 Postman，也可以切换到像 [curl](https://curl.haxx.se/) 这样的工具。

   **速记**

   ```
   GET _snapshot/my-snapshot-repo-name/_all
   ```

   **curl**

   ```
   curl -XGET -u 'master-user:master-user-password' https://domain-endpoint/_snapshot/my-snapshot-repo-name/_all
   ```

1. 还原快照。

   **速记**

   ```
   POST _snapshot/my-snapshot-repo-name/my-snapshot-name/_restore
   {
     "indices": "migration-index1,migration-index2,other-indices-*",
     "include_global_state": false
   }
   ```

   **curl**

   ```
   curl -XPOST -u 'master-user:master-user-password' https://domain-endpoint/_snapshot/my-snapshot-repo-name/my-snapshot-name/_restore \
     -H 'Content-Type: application/json' \
     -d '{"indices":"migration-index1,migration-index2,other-indices-*","include_global_state":false}'
   ```

1. 最后，验证索引是否已按预期还原：

   **速记**

   ```
   GET _cat/indices?v
   ```

   **curl**

   ```
   curl -XGET -u 'master-user:master-user-password' https://domain-endpoint/_cat/indices?v
   ```

此时，迁移已完成。您可以将客户端配置为使用新的 OpenSearch 服务终端节点，[调整域](sizing-domains.md)大小以适应您的工作负载，检查索引的分片数，切换到 [IAM 主用户](fgac.md#fgac-concepts)，或者开始在控制面板中 OpenSearch 构建可视化效果。