

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

# 创建和管理亚马逊 OpenSearch 服务域名
<a name="createupdatedomains"></a>

本章介绍如何创建和管理 Amazon OpenSearch 服务域。域等同 AWS于开源 OpenSearch 集群。在创建域时，您需要指定其设置、实例类型、实例数量以及存储分配。有关开源集群的更多信息，请参阅 OpenSearch 文档中的[创建集群](https://opensearch.org/docs/latest/tuning-your-cluster/)。

与[入门教程](gsg.md)中的简短说明不同，本章描述了所有选项，并提供了相关的参考信息。您可以按照 OpenSearch 服务控制台、() 或 AWS Command Line Interface (AWS CLI) 的说明完成每个过程 AWS SDKs。

## 创建 OpenSearch 服务域
<a name="createdomains"></a>

本节介绍如何使用 OpenSearch 服务控制台或使用 AWS CLI 带`create-domain`命令的 OpenSearch 服务域来创建服务域。

### 创建 OpenSearch 服务域（控制台）
<a name="createdomains-console"></a>

使用以下过程通过控制台创建 OpenSearch 服务域。

**创建 OpenSearch 服务域（控制台）**

1. 前往[https://aws.amazon.com](https://aws.amazon.com/)并选择 “**登录到控制台”**。

1. 在 “**分析**” 下，选择 “**亚马逊 OpenSearch 服务**”。

1. 选择 **Create domain（创建域）**。

1. 对于**域名**，输入一个域名。名称必须符合以下标准：
   + 您的账户独一无二且 AWS 区域
   + 以小写字母开头
   + 包含 3 到 28 个字符
   + 只包含小写字母 a-z、数字 0-9 和连字符 (-)

1. 对于域创建方法，选择**标准创建**。

1. 对于**模板**，选择与您的域的目的最匹配的选项：
   + 用于需要高可用性和高性能的工作负载的**生产**域。这些域使用多可用区（带或不带待机功能）和专用主节点提高可用性。
   + 用于开发或测试的**开发/测试**域。开发/测试域可以使用多可用区（带或不带待机功能）或单个可用区。
**重要**  
不同部署类型在后续页面上显示不同的选项。这些步骤包括所有选项。

1. 对于**部署选项**，选择**带备用域的域**配置三可用区域，其中一个可用区中的节点作为备用域。此选项强制执行大量最佳实践，例如指定数据节点计数、主节点计数、实例类型、副本计数和软件更新设置。

1. 对于**版本**，请选择要使用的版本 OpenSearch 或旧版 Elasticsearch OSS。我们建议您选择最新版本的 OpenSearch。有关更多信息，请参阅 [支持的 Elasticsearch 版本和 OpenSearch](what-is.md#choosing-version)。

   （可选）如果您为域选择了 OpenSearch 版本，请选择**启用兼容模式**以将其版本 OpenSearch报告为 7.10，这允许某些在连接之前检查版本的 Elasticsearch OSS 客户端和插件继续使用该服务。

1. 对于**实例类型**，为数据节点选择实例类型。有关更多信息，请参阅 [Amazon OpenSearch 服务中支持的实例类型](supported-instance-types.md)。
**注意**  
并非所有可用区都支持所有实例类型。如果您选择带或不带待机功能的多可用区，我们建议您选择最新一代实例类型，如 R5 或 I3。

1. 对于**节点数**，选择数据节点数。

   有关最大值，请参阅[OpenSearch 服务域和实例配额](https://docs.aws.amazon.com/general/latest/gr/opensearch-service.html#opensearch-limits-domain)。单节点集群适合开发和测试，但不应用于生产工作负载。有关更多指导，请参阅[调整亚马逊 OpenSearch 服务域名的大小](sizing-domains.md)和[在 Ama OpenSearch zon 服务中配置多可用区域](managedomains-multiaz.md)。
**注意**  
（可选）专用协调器节点支持所有 OpenSearch 版本和 ElasticSearch 版本 6.8 到 7.10。专用协调器节点可用于启用了专用集群管理器的域。要启用专用协调器节点，您需要选择实例类型和数量。根据最佳实践，专用协调器节点的实例系列应与数据节点相同（基于 Intel 处理器的实例或基于 Graviton 处理器的实例）。

1. 对于**存储类型**，选择 Amazon EBS。列表中可用的卷类型取决于您选择的实例类型。有关创建超大型域的指南，请参阅 [Amazon 服务中的 PB 级规模 OpenSearch](petabyte-scale.md)。

1. 对于 **EBS** 存储，配置以下附加设置。根据您选择的卷类型，某些设置可能不会显示。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/createupdatedomains.html)

1. （可选）如果您选择了`gp3`卷类型，请展开**高级设置**并指定超出存储价格所含范围的其他 IOPS（每个数据节点每预配置 3 TiB 卷大小最多可获得 16,000 个）和吞吐量（ MiB/s 每个数据节点每预配置 3 TiB 卷大小最多可达 1,000 个），但需支付额外费用。有关更多信息，请参阅 [Amazon OpenSearch 服务定价](https://aws.amazon.com/opensearch-service/pricing/)。

1. （可选）要启用[UltraWarm 存储](ultrawarm.md)，请选择**启用 UltraWarm 数据节点**。每种实例类型都有其可处理的[最大存储量](limits.md#limits-ultrawarm)。将该数量乘以总可寻址温存储的温数据节点数。

1. （可选）要启用[冷存储](cold-storage.md)，选择**启用冷存储**。必须启用 UltraWarm 才能启用冷存储。

1. 如果使用带待机功能的多可用区，则已启用三个[专用主节点](managedomains-dedicatedmasternodes.md)。选择所需的主节点类型。如果选择不带待机功能的多可用区的域，请选择**启用专用主节点**，然后选择所需的主节点类型和数量。专用主节点可增强集群稳定性，对于包含 10 个以上实例的域而言是必需的。对于生产域，我们建议使用 3 个专用主节点。
**注意**  
对于专用主节点和数据节点，可以选择不同的实例类型。例如，您可以为数据节点选择通用或存储优化实例，但为专用主节点选择计算优化实例。

1. （可选）对于运行 OpenSearch 或 Elasticsearch 5.3 及更高版本的域名，**快照配置**无关紧要。有关自动制作快照的更多信息，请参阅[在 Amazon OpenSearch 服务中创建索引快照](managedomains-snapshots.md)。

1. 如果您想使用自定义端点，而不是标准的 `https://search-mydomain-1a2a3a4a5a6a7a8a9a0a9a8a7a.us-east-1.es.amazonaws.com` 之一，选择**启用定制终端节点**并提供名称和证书。有关更多信息，请参阅 [为亚马逊 OpenSearch 服务创建自定义终端节点](customendpoint.md)。

1. 在**网络**下，选择 **VPC 访问权限**或**公有访问权限**。如果您选择**公有访问权限**，请跳至下一步。如果选择 **VPC 访问权限**，请确保您满足[先决条件](vpc.md#prerequisites-vpc-endpoints)，然后配置以下设置：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/createupdatedomains.html)

1. 启用或禁用精细访问控制：
   + 如果要使用 IAM 进行用户管理，请选择 **Set IAM ARN as master user (将 IAM ARN 设置为主用户)**，然后为 IAM 角色指定 ARN。
   + 如果要使用内部用户数据库，请选择**创建主用户**，并指定用户名和密码。

   无论您选择哪个选项，主用户都可以访问集群中的所有索引和所有 OpenSearch APIs索引。有关选择哪个选项的指南，请参阅 [重要概念](fgac.md#fgac-concepts)。

   如果您禁用精细访问控制，则仍可以通过将域放置在 VPC 中并/或应用限制性访问策略来控制对域的访问。您必须启用 node-to-node加密和静态加密才能使用精细的访问控制。
**注意**  
我们*强烈*建议您启用精细访问控制以保护域中的数据。精细访问控制提供群集、索引、文档和字段级别的安全性。

1. （可选）如果要对 OpenSearch 仪表板使用 SAML 身份验证，请选择**启用 SAML 身份验证**并为该域配置 SAML 选项。有关说明，请参阅[仪表板的 SAML 身份验证 OpenSearch](saml.md)。

1. （可选）如果您想对 OpenSearch 控制面板使用 Amazon Cognito 身份验证，请选择**启用 Amazon Cognito** 身份验证。然后选择要用于 OpenSearch 控制面板身份验证的 Amazon Cognito 用户池和身份池。有关创建这些资源的指南，请参阅[为控制面板配置 Amazon Cognito 身份验证 OpenSearch](cognito-auth.md)。

1. （可选）如果您想使用 IAM Identity Center (IDC) 身份验证来连接现有身份源并为您的 AWS 应用程序提供用户通用视图，请选择**启用通过 IAM Identity Center 进行身份验证的 API 访问权限**。有关更多信息，请参阅《IAM Identity Center 用户指南》**中的[可信身份传播概述](https://docs.aws.amazon.com/singlesignon/latest/userguide/trustedidentitypropagation-overview.html?icmpid=docs_console_unmapped)。

1. （可选）如果您想使用这些功能，请在**高级功能**部分，选择**启用自然语言查询生成 和 Amazon Q 开发者版功能**。

   1. 选择**启用 S3 Vectors 作为引擎选项**，以获取增强的向量搜索选项。有关更多信息，请参阅 [使用 Amazon S3 矢量引擎实现高级搜索功能](s3-vector-opensearch-integration-engine.md)。

   1. 选择 “**启用 GPU 加速” 以获得增强的矢量搜索选项。有关更多信息，请参阅[用于向量索引的 GPU 加速](gpu-acceleration-vector-index.md)。**

1. 对于**访问策略**，选择访问策略或配置您自己的访问策略。如果选择创建自定义策略，则可以自行配置或从另一个域导入策略。有关更多信息，请参阅 [亚马逊 OpenSearch 服务中的身份和访问管理](ac.md)。
**注意**  
如果您启用了 VPC 访问，则无法使用基于 IP 的策略。但您可以使用[安全组](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)来控制哪些 IP 地址可以访问该域。有关更多信息，请参阅 [关于 VPC 域的访问策略](vpc.md#vpc-security)。

1. （可选）如果要求对域的所有请求都通过 HTTPS 到达，请选中 **Require HTTPS for all traffic to the domain (要求到域的所有流量都使用 HTTPS)**。要启用 node-to-node加密，请选择 **N ode-to-node 加密**。有关更多信息，请参阅 [Node-to-node Amazon OpenSearch 服务加密](ntn.md)。要启用静态数据加密，请选中**启用静态数据的加密**复选框。如果选择带待机功能的多可用区部署选项，则预先选择这些选项。

1. （可选）选择 “**使用 AWS 自有密钥**”，让 S OpenSearch ervice 代表您创建 AWS KMS 加密密钥（或使用已创建的密钥）。否则，请选择您自己的 KMS 密钥。有关更多信息，请参阅 [为 Amazon OpenSearch 服务加密静态数据](encryption-at-rest.md)。

1. 对于**非高峰时段**，选择开始时间以安排需要部署的服务软件更新和自动调整优化。 blue/green 非高峰时段更新有助于最大限度地减少高流量时段对集群专用主节点造成的压力。

1. 对于 **Auto-Tune**，请选择是否允许 S OpenSearch ervice 建议对您的域进行与内存相关的配置更改，以提高速度和稳定性。有关更多信息，请参阅 [Amazon OpenSearch 服务自动调整](auto-tune.md)。

   （可选）选择**非高峰时段**以安排一个循环时段，自动调整将在此时段内更新域。

1. （可选）选择**自动软件更新**以启用自动软件更新。

1. （可选）添加标签来描述您的域，以便您可以对该信息进行分类和筛选。有关更多信息，请参阅 [为 Amazon OpenSearch 服务域名添加标签](managedomains-awsresourcetagging.md)。

1. （可选）展开和配置 **Advanced cluster settings**（高级集群设置）。有关这些选项的摘要，请参阅[高级集群设置](#createdomain-configure-advanced-options)。

1. 选择**创建**。

### 创建 OpenSearch 服务域 (AWS CLI)
<a name="createdomains-cli"></a>

您可以使用，而不是使用控制台创建 OpenSearch 服务域 AWS CLI。有关语法，请参阅 [AWS CLI 命令参考](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/opensearch/index.html) a 中的 Amazon OpenSearch 服务。

#### 示例命令
<a name="createdomains-cli-examples"></a>

第一个示例演示了以下 OpenSearch 服务域配置：
+ 使用 OpenSearch 版本 1.2 创建名为 *mylogs* 的 OpenSearch 服务域
+ 用 `r6g.large.search` 实例类型的两个实例填充该域
+ 使用 100GiB 通用型（SSD）`gp3` EBS 卷作为每个数据节点的存储
+ 允许匿名访问，但只能从单个 IP 地址访问：192.0.2.0/32

```
aws opensearch create-domain \
    --domain-name mylogs \
    --engine-version OpenSearch_1.2 \
    --cluster-config  InstanceType=r6g.large.search,InstanceCount=2 \
    --ebs-options EBSEnabled=true,VolumeType=gp3,VolumeSize=100,Iops=3500,Throughput=125 \
    --access-policies '{"Version": "2012-10-17",		 	 	  "Statement": [{"Action": "es:*", "Principal":"*","Effect": "Allow", "Condition": {"IpAddress":{"aws:SourceIp":["192.0.2.0/32"]}}}]}'
```

下一个示例演示了以下 OpenSearch 服务域配置：
+ 使用 Elasticsearch 版本 7.10 创建名为 *my* logs 的 OpenSearch 服务域
+ 用 `r6g.large.search` 实例类型的六个实例填充该域
+ 使用 100GiB 通用型（SSD）`gp2` EBS 卷作为每个数据节点的存储
+ 仅限单个用户访问该服务，该用户由用户的 AWS 账户 ID 识别：555555555555 
+ 跨三个可用区分配实例

```
aws opensearch create-domain \
    --domain-name mylogs \
    --engine-version Elasticsearch_7.10 \
    --cluster-config  InstanceType=r6g.large.search,InstanceCount=6,ZoneAwarenessEnabled=true,ZoneAwarenessConfig={AvailabilityZoneCount=3} \
    --ebs-options EBSEnabled=true,VolumeType=gp2,VolumeSize=100 \
    --access-policies '{"Version": "2012-10-17",		 	 	  "Statement": [ { "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::555555555555:root" }, "Action":"es:*", "Resource": "arn:aws:es:us-east-1:555555555555:domain/mylogs/*" } ] }'
```

下一个示例演示了以下 OpenSearch 服务域配置：
+ 使用 OpenSearch 版本 1.0 创建名为 *mylogs* 的 OpenSearch 服务域
+ 用 `r6g.xlarge.search` 实例类型的十个实例填充该域
+ 用 `r6g.large.search` 实例类型的三个实例作为专用主节点填充该域
+ 使用 100GiB 预配置 IOPS EBS 卷作为存储，用每个数据节点 1000 IOPS 的基准性能进行配置
+ 限制对单个用户和单个子资源的访问，`_search` API

```
aws opensearch create-domain \
    --domain-name mylogs \
    --engine-version OpenSearch_1.0 \
    --cluster-config  InstanceType=r6g.xlarge.search,InstanceCount=10,DedicatedMasterEnabled=true,DedicatedMasterType=r6g.large.search,DedicatedMasterCount=3 \
    --ebs-options EBSEnabled=true,VolumeType=io1,VolumeSize=100,Iops=1000 \
    --access-policies '{"Version": "2012-10-17",		 	 	  "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::555555555555:root" }, "Action": "es:*", "Resource": "arn:aws:es:us-east-1:555555555555:domain/mylogs/_search" } ] }'
```

**注意**  
如果您尝试创建 OpenSearch 服务域，但同名的域已存在，则 CLI 不会报告错误。相反，它会返回现有域的详细信息。

### 创建 OpenSearch 服务域 (AWS SDKs)
<a name="createdomains-sdk"></a>

 AWS SDKs （安卓和 iOS 除外 SDKs）支持《[亚马逊 OpenSearch 服务 API 参考](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/Welcome.html)》中定义的所有操作，包括`CreateDomain`。有关代码示例，请参阅 [使用 AWS SDKs 与亚马逊 OpenSearch 服务互动](configuration-samples.md)。有关安装和使用的更多信息 AWS SDKs，请参阅[AWS 软件开发套件](https://aws.amazon.com/code)。

### 创建 OpenSearch 服务域 (AWS CloudFormation)
<a name="createdomains-cfn"></a>

OpenSearch 服务与一项服务集成 AWS CloudFormation，该服务可帮助您对 AWS 资源进行建模和设置，从而减少创建和管理资源和基础架构所花费的时间。您可以创建一个描述要创建的 OpenSearch 域的模板，并为您 CloudFormation 置备和配置该域。有关更多信息，包括 OpenSearch 域名的 JSON 和 YAML 模板示例，请参阅*AWS CloudFormation 用户指南*中的[亚马逊 OpenSearch 服务资源类型参考](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html)。

## 配置访问策略
<a name="createdomain-configure-access-policies"></a>

Amazon OpenSearch 服务提供了多种配置 OpenSearch 服务域访问权限的方法。有关更多信息，请参阅[亚马逊 OpenSearch 服务中的身份和访问管理](ac.md)和[Amazon 服务中的精细访问控制 OpenSearch](fgac.md)。

控制台提供了预配置的访问策略，您可以针对自己域的特定需求自定义这些策略。您也可以从其他 OpenSearch 服务域导入访问策略。有关这些访问策略如何与 VPC 访问交互的信息，请参阅[关于 VPC 域的访问策略](vpc.md#vpc-security)。

**配置访问策略（控制台）**

1. 转到 [https://aws.amazon.com](https://aws.amazon.com/)，然后选择 **Sign In to the Console (登录控制台)**。

1. 在 “**分析**” 下，选择 “**亚马逊 OpenSearch 服务**”。

1. 在导航窗格中的**域**下，选择要更新的域。

1. 选择**操作**和**编辑安全配置**。

1. 编辑访问策略 JSON，或导入预配置的选项。

1. 选择**保存更改**。

## 使用迁移助手迁移到 OpenSearch 服务
<a name="migration-assistant"></a>

Amazon S OpenSearch ervice 迁移助手是一款全面的解决方案，可简化从自行管理的 Elasticsearch 或 OpenSearch 集群迁移到服务的过程。 OpenSearch 本工具包旨在解决迁移过程中的操作复杂性，同时确保数据完整性，并在迁移后验证性能表现。

### 概述
<a name="migration-assistant-overview"></a>

无论您是要设置输入 AWS、过渡生产工作负载，还是升级到最新 OpenSearch 版本，Migration Assistant 都能提供 step-by-step指导、最佳实践和工具，以充分利用 OpenSearch 迁移的潜力。 proof-of-concept

迁移助手提供以下主要优势：
+ **元数据迁移**：迁移集群元数据，包括索引设置、类型映射、索引模板和别名
+ **数据迁移**-将现有数据从旧版集群迁移到 OpenSearch 服务域
+ **实时流量处理**-以最小的延迟拦截实时流量并将其重定向到 OpenSearch 服务域
+ **流量复制**：在目标集群上复制生产流量，以验证准确性和性能
+ **性能测试**：通过捕获和重播请求模式模拟真实世界流量，以微调系统性能
+ **全球可用性**-部署在最常见的 AWS 区域，以实现全球覆盖和可扩展性

迁移助手支持从 Elasticsearch 版本 6.x 和 7.x 以及 1.x 和 2.x 迁移。 OpenSearch 有关更多信息，请参阅[支持的迁移途径](https://docs.opensearch.org/latest/migration-assistant/is-migration-assistant-right-for-you/#supported-migration-paths)。

**注意**  
请注意以下关于迁移助手的其他信息。  
该工具支持多跳迁移（例如，一次性从 Elasticsearch 5.x 迁移到 OpenSearch 服务 3.x）。
您可以回滚迁移操作。
对于某些使用案例，该工具几乎不需要或完全不需要停机时间。
该工具提供高性能的回填功能，且不会影响源集群。

### 迁移场景
<a name="migration-assistant-scenarios"></a>

迁移助手旨在处理以下迁移场景：

**元数据迁移**  
将集群元数据（例如索引设置、别名和模板）从源集群迁移到目标 OpenSearch 服务域。

**回填迁移**  
将现有或历史数据从源集群迁移到目标 OpenSearch 服务域，确保在过渡期间保留所有重要数据。

**实时流量迁移**  
将源集群的持续实时流量复制到目标 OpenSearch 服务域，从而使您能够在迁移期间保持服务可用性。

**重要**  
迁移策略并非普遍适用。迁移助手基于工程最佳实践提供指导，但在迁移生产工作负载之前，您应评估自身具体需求并进行全面测试。

### 开始使用迁移助手
<a name="migration-assistant-getting-started"></a>

Amazon S OpenSearch ervice 迁移助手作为 AWS 解决方案提供，其中包含全面的文档、部署模板和源代码。要开始使用迁移助手：

**访问迁移助手资源**

1. 在 [Amazon S OpenSearch ervice 迁移助手解决方案概述中查看完整的解决方案](https://docs.aws.amazon.com/solutions/latest/migration-assistant-for-amazon-opensearch-service/solution-overview.html)文档。

1. 阅读[部署规划指南](https://docs.aws.amazon.com/solutions/latest/migration-assistant-for-amazon-opensearch-service/plan-your-deployment.html)，了解相关成本和要求。

1. 使用[部署说明](https://docs.opensearch.org/latest/migration-assistant/migration-phases/)部署解决方案，并按照[使用指南](https://docs.aws.amazon.com/solutions/latest/migration-assistant-for-amazon-opensearch-service/use-the-solution.html)执行迁移。

对于开发人员和高级用户，迁移助手的源代码和其他文档可在[OpenSearch迁移 GitHub 存储库](https://github.com/opensearch-project/opensearch-migrations)中找到。

### 解决方案架构
<a name="migration-assistant-architecture"></a>

部署到中后 AWS，迁移助手使用多种 AWS 服务来提供全面的迁移解决方案：
+ **AWS CloudFormation**：提供基础设施即代码（IaC）模板以部署和配置迁移助手
+ **OpenSearch 服务**-迁移后的搜索和分析工作负载的目标服务
+ **Amazon Managed Streaming for Apache Kafka**：提供流处理功能，实现 HTTP 流量的持久性存储和重复使用
+ **Amazon Elastic Container Service**：在安全、可扩展的容器中运行迁移管理控制台和流量回放器
+ **Amazon Elastic File System**：为源集群和目标集群的请求与响应数据提供可扩展的持久性存储
+ **Amazon Simple Storage Service**：存储快照以用于历史回填任务和基础设施即代码内容

有关详细的架构信息，请参阅[迁移助手架构详细信息](https://docs.opensearch.org/latest/migration-assistant/architecture/)。

## 高级集群设置
<a name="createdomain-configure-advanced-options"></a>

使用高级选项来配置以下内容：

**请求体中的索引**  
指定是否允许在 HTTP 请求正文中显式引用索引。将此属性设置为 `false` 可防止用户绕过子资源的访问控制。默认情况下，该值为 `true`。有关更多信息，请参阅 [高级选项和 API 注意事项](ac.md#ac-advanced)。

**字段数据缓存分配**  
指定分配到字段数据的 Java 堆空间的百分比。默认情况下，此设置为 JVM 堆的 20%。  
许多客户查询轮换每日索引。我们建议您在大多数用例中将 `indices.fielddata.cache.size` 配置为 JVM 堆的 40% 来开始基准测试。但是，如果您有非常大的索引，您可能需要大型字段数据缓存。

**最大子句数**  
指定 Lucene 布尔查询中允许的子句的最大数量。默认值为 1024。如果查询具有的子句数超过了允许的子句数，则会导致 `TooManyClauses` 错误。有关更多信息，请参阅 [Lucene 文档](https://lucene.apache.org/core/6_6_0/core/org/apache/lucene/search/BooleanQuery.html)。

# Amazon OpenSearch 服务的自动语义丰富
<a name="opensearch-semantic-enrichment"></a>

## 简介
<a name="semantic-enrichment-intro"></a>

与其他传统搜索引擎类似，Amazon S OpenSearch ervice 使用 word-to-word匹配（词法搜索）来查找结果。这种方法适用于产品代码或型号等特定查询，但在抽象搜索中很难理解用户意图。例如，当您搜索 “沙滩鞋” 时，词汇搜索会匹配目录商品中的单个单词 “鞋子”、“沙滩”、“for” 和 “the”，这可能会缺少不包含确切搜索词的相关商品，例如 “防水凉鞋” 或 “冲浪鞋”。

自动语义扩充通过考虑关键字匹配和搜索背后的上下文含义来解决这一限制。此功能可理解搜索意图，并将搜索相关性提高多达 20%。为索引中的文本字段启用此功能可增强搜索结果。

**注意**  
运行版本 2.19 或更高版本的 OpenSearch 服务域可以使用自动语义扩充。此外， OpenSearch 版本为 2.19 的域名还需要使用最新的服务软件版本更新。目前，该功能适用于公共域，不支持 VPC 域。

## 型号详情和性能基准
<a name="semantic-enrichment-model-detail"></a>

 虽然此功能可以在不公开底层模型的情况下处理幕后的技术复杂性，但我们通过简短的模型描述和基准测试结果提供透明度，以帮助您就关键工作负载中的功能采用做出明智的决定。

 自动语义丰富使用服务托管、预训练的稀疏模型，无需自定义微调即可有效运行。该模型分析您指定的字段，根据从各种训练数据中学到的关联将它们扩展为稀疏向量。扩展后的术语及其显著性权重以原生 Lucene 索引格式存储，便于高效检索。我们已经使用[仅限文档模式优化了此过程，在这种模式下，](https://docs.opensearch.org/docs/latest/vector-search/ai-search/neural-sparse-with-pipelines/#step-1a-choose-the-search-mode)编码仅在数据摄取期间进行。搜索查询只是标记化，而不是通过稀疏模型进行处理，这使得该解决方案既具有成本效益又高性能。

 我们在功能开发期间的性能验证使用了 [MS MARCO](https://huggingface.co/datasets/BeIR/msmarco) 段落检索数据集，其中的段落平均为 334 个字符。在相关性评分方面，我们在英语内容的 [BEIR基准测试中测量了前 10 个搜索结果（ndcg @10）的平均标准化折扣累积收益 (NDCG)，在多语言内容的 MIR](https://github.com/beir-cellar/beir) ACL 上测量了平均ndcg @10。[我们通过客户端、第 90 个百分位 (p90) 测量值和搜索响应 p90 取值来评估延迟。](https://github.com/beir-cellar/beir)这些基准提供了搜索相关性和响应时间的基准绩效指标。以下是关键的基准数字- 
+ 英语-与词汇搜索相比，相关性提高了20％。与词法搜索相比，它还将P90的搜索延迟降低了7.7％（BM25 为26毫秒，自动语义丰富为24毫秒）。
+ 多语言-与词法搜索相比，相关性提高了105％，而P90的搜索延迟比词汇搜索增加了38.4％（为26毫秒，自动语BM25 义丰富为36毫秒）。

鉴于每种工作负载的独特性，我们鼓励您在做出实施决策之前，使用自己的基准测试标准在开发环境中评估此功能。

## 支持的语言
<a name="semantic-enrichment-languages"></a>

该功能支持英语。此外，该模型还支持阿拉伯语、孟加拉语、中文、芬兰语、法语、印地语、印度尼西亚语、日语、韩语、波斯语、俄语、西班牙语、斯瓦希里语和泰卢固语。

## 为域名设置自动语义丰富索引
<a name="semantic-enrichment-index-setup"></a>

为文本字段设置启用自动语义扩充功能的索引非常简单，而且在创建新索引期间 APIs，您可以通过控制台和 CloudFormation 模板对其进行管理。要为现有索引启用该功能，您需要在为文本字段启用自动语义丰富功能的情况下重新创建索引。

控制台体验- AWS 控制台允许您轻松创建带有自动语义丰富字段的索引。选择域名后，您将在控制台顶部找到 “创建索引” 按钮。单击 “创建索引” 按钮后，您将找到用于定义自动语义丰富字段的选项。在一个索引中，您可以组合英语和多语言的自动语义扩充以及词汇字段。

![\[alt text not found\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/images/ase-console-exp.png)


API 体验-要使用 AWS 命令行界面 (AWS CLI) 创建自动语义丰富索引，请使用 create-index 命令：

```
aws opensearch create-index \
--domain-name [domain_name] \
--index-name [index_name] \
--index-schema [index_body] \
```

 *在以下示例索引架构中，t *itle\$1semantic 字段的字段类型设置为*文本*，并将参数 semantic\$1* enrichmentic\$1enrichmentic 设置为 “已启用” *状态*。**设置 s *emantic\$1enrichmentic\$1* entrich 参数可以自动扩充标题\$1语义字段。**您可以使用 l *anguage\$1options 字段来指定*英语*或多语言*。*

```
    aws opensearch create-index \
    --id XXXXXXXXX \
    --index-name 'product-catalog' \
    --index-schema '{
    "mappings": {
        "properties": {
            "product_id": {
                "type": "keyword"
            },
            "title_semantic": {
                "type": "text",
                "semantic_enrichment": {
                    "status": "ENABLED",
                    "language_options": "english"
                }
            },
            "title_non_semantic": {
                "type": "text"
            }
        }
    }
}'
```

要描述创建的索引，请使用以下命令：

```
aws opensearch get-index \
--domain-name [domain_name] \
--index-name [index_name] \
```

## 数据摄取和搜索
<a name="semantic-enrichment-data-ingest"></a>

创建启用了自动语义扩充功能的索引后，该功能将在数据摄取过程中自动运行，无需进行其他配置。

数据摄取：当您将文档添加到索引中时，系统会自动：
+ 分析您为丰富语义而指定的文本字段
+ 使用 OpenSearch 服务托管稀疏模型生成语义编码
+ 将这些丰富的表示法与您的原始数据一起存储

此过程使用内置 OpenSearch的 ML 连接器和采集管道，这些管道是在后台自动创建和管理的。

搜索：语义丰富数据已编制索引，因此查询无需再次调用 ML 模型即可高效运行。这意味着您可以提高搜索相关性，而不会产生额外的搜索延迟开销。

## 为自动语义增强配置权限
<a name="opensearch-semantic-enrichment-permissions"></a>

在创建具有自动语义丰富功能的索引之前，您需要配置所需的权限。本节介绍不同索引操作所需的权限，以及如何为 AWS Identity and Access Management (IAM) 和精细访问控制场景设置这些权限。

### IAM 权限
<a name="opensearch-semantic-enrichment-iam-permissions"></a>

自动语义丰富操作需要以下 IAM 权限。这些权限因您要执行的特定索引操作而异。

#### CreateIndex API 权限
<a name="opensearch-semantic-enrichment-create-index-permissions"></a>

要创建具有自动语义丰富功能的索引，您需要以下 IAM 权限：
+ `es:CreateIndex`— 创建具有语义丰富功能的索引。
+ `es:ESHttpHead`— 执行 HEAD 请求以检查索引是否存在。
+ `es:ESHttpPut`— 执行 PUT 请求以创建索引。
+ `es:ESHttpPost`— 执行索引操作的 POST 请求。

#### UpdateIndex API 权限
<a name="opensearch-semantic-enrichment-update-index-permissions"></a>

要使用自动语义丰富功能更新现有索引，您需要以下 IAM 权限：
+ `es:UpdateIndex`— 更新索引设置和映射。
+ `es:ESHttpPut`— 执行索引更新的 PUT 请求。
+ `es:ESHttpGet`— 执行 GET 请求以检索索引信息。
+ `es:ESHttpPost`— 执行索引操作的 POST 请求。

#### GetIndex API 权限
<a name="opensearch-semantic-enrichment-get-index-permissions"></a>

要通过自动语义丰富功能检索有关索引的信息，您需要以下 IAM 权限：
+ `es:GetIndex`— 检索索引信息和设置。
+ `es:ESHttpGet`— 执行 GET 请求以检索索引数据。

#### DeleteIndex API 权限
<a name="opensearch-semantic-enrichment-delete-index-permissions"></a>

要使用自动语义丰富功能删除索引，您需要以下 IAM 权限：
+ `es:DeleteIndex`— 删除索引及其语义丰富组件。
+ `es:ESHttpDelete`— 执行删除索引的删除请求。

### IAM 策略示例
<a name="opensearch-semantic-enrichment-sample-policy"></a>

以下基于身份的访问策略示例通过自动语义丰富为用户提供了管理索引所需的权限：

```
{
    "Version": "2012-10-17", 		 	 	 
    "Statement": [
        {
            "Sid": "AllowSemanticEnrichmentIndexOperations",
            "Effect": "Allow",
            "Action": [
                "es:CreateIndex",
                "es:UpdateIndex",
                "es:GetIndex",
                "es:DeleteIndex",
                "es:ESHttpHead",
                "es:ESHttpGet",
                "es:ESHttpPut",
                "es:ESHttpPost",
                "es:ESHttpDelete"
            ],
            "Resource": "arn:aws:es:aws-region:111122223333:domain/domain-name"
        }
    ]
}
```

用您的特定值替换*aws-region**111122223333*、和*domain-name*。您可以通过在资源 ARN 中指定特定的索引模式来进一步限制访问权限。

### 细粒度访问控制权限
<a name="opensearch-semantic-enrichment-fgac-permissions"></a>

如果您的 Amazon S OpenSearch ervice 域启用了精细访问控制，则除了 IAM 权限之外，您还需要其他权限。每个索引操作都需要以下权限。

#### CreateIndex API 权限
<a name="opensearch-semantic-enrichment-fgac-create-permissions"></a>

启用精细访问控制后，需要以下额外权限才能创建具有自动语义丰富功能的索引：
+ `indices:admin/create`— 创建索引操作。
+ `indices:admin/mapping/put`— 创建和更新索引映射。
+ `cluster:admin/opensearch/ml/create_connector`— 创建用于语义处理的机器学习连接器。
+ `cluster:admin/opensearch/ml/register_model`— 注册机器学习模型以丰富语义。
+ `cluster:admin/ingest/pipeline/put`— 创建用于数据处理的采集管道。
+ `cluster:admin/search/pipeline/put`— 创建用于查询处理的搜索管道。

#### UpdateIndex API 权限
<a name="opensearch-semantic-enrichment-fgac-update-permissions"></a>

启用精细访问控制后，需要以下额外权限才能使用自动语义丰富功能更新索引：
+ `indices:admin/get`— 检索索引信息。
+ `indices:admin/settings/update`— 更新索引设置。
+ `indices:admin/mapping/put`— 更新索引映射。
+ `cluster:admin/opensearch/ml/create_connector`— 创建机器学习连接器。
+ `cluster:admin/opensearch/ml/register_model`— 注册机器学习模型。
+ `cluster:admin/ingest/pipeline/put`— 创建采集管道。
+ `cluster:admin/search/pipeline/put`— 创建搜索管道。
+ `cluster:admin/ingest/pipeline/get`— 检索采集管道信息。
+ `cluster:admin/search/pipeline/get`— 检索搜索管道信息。

#### GetIndex API 权限
<a name="opensearch-semantic-enrichment-fgac-get-permissions"></a>

启用细粒度访问控制后，需要以下额外权限才能通过自动语义丰富功能检索索索索索引的信息：
+ `indices:admin/get`— 检索索引信息。
+ `cluster:admin/ingest/pipeline/get`— 检索采集管道信息。
+ `cluster:admin/search/pipeline/get`— 检索搜索管道信息。

#### DeleteIndex API 权限
<a name="opensearch-semantic-enrichment-fgac-delete-permissions"></a>

启用精细访问控制后，需要以下额外权限才能删除具有自动语义丰富功能的索引：
+ `indices:admin/delete`— 删除索引操作。

## 查询重写
<a name="query-rewrite"></a>

自动语义丰富功能无需修改查询即可自动将现有的 “匹配” 查询转换为语义搜索查询。如果匹配查询是复合查询的一部分，则系统会遍历您的查询结构，找到匹配查询，然后将其替换为神经稀疏查询。目前，该功能仅支持替换 “匹配” 查询，无论是独立查询还是复合查询的一部分。 不支持 “多重匹配”。此外，该功能还支持所有复合查询来替换其嵌套的匹配查询。复合查询包括：bool、boosting、constant\$1score、dis\$1max、function\$1score 和混合。

## 自动语义扩充的局限性
<a name="ase-limitation"></a>

当应用于包含自然语言内容 small-to-medium的大小字段（例如电影标题、产品描述、评论和摘要）时，自动语义搜索最为有效。尽管语义搜索增强了大多数用例的相关性，但它可能不是某些场景的最佳选择。在决定是否针对您的特定用例实现自动语义丰富时，请考虑以下限制。
+ 很长的文档 — 当前的稀疏模型仅处理每个文档的前 8,192 个英文标记。对于多语言文档，它是 512 个代币。对于篇幅较长的文章，可以考虑实施文档分块，以确保完整的内容处理。
+ 日志分析工作负载 — 语义丰富会显著增加索引大小，这对于通常需要精确匹配的日志分析来说可能是不必要的。额外的语义上下文很少能提高日志搜索的有效性，足以证明存储需求的增加是合理的。
+ 自动语义丰富与 “派生来源” 功能不兼容。
+ 限制 — 服务域的索引推理请求目前上限为 200 TPS。 OpenSearch 这是一个软限制；如需更高的限额，请联系 Su AWS pport。

## 定价
<a name="ase-pricing"></a>

 Amazon S OpenSearch ervic OpenSearch e 根据索引时生成稀疏向量时消耗的计算单位 (OCUs) 自动计费语义扩充费用。您只需为编制索引期间的实际使用量付费。您可以使用 Amazon CloudWatch 指标 SemanticSearch OCU 监控此消耗量。有关模型代币限制、每个 OCU 的吞吐量以及示例计算示例的具体详细信息，请访问[ OpenSearch 服务定价](https://aws.amazon.com/opensearch-service/pricing/)。

# 在 Amazon OpenSearch 服务中进行配置更改
<a name="managedomains-configuration-changes"></a>

更新域名时，Amazon S OpenSearch ervice 使用*蓝/绿*部署流程。 blue/green 部署为域更新创建了一个空闲环境，该环境会复制生产环境，并在更新完成后将用户路由到新环境。在 blue/green 部署中，蓝色环境是当前的生产环境。绿色环境是闲置环境。

将数据从蓝色环境迁移至绿色环境。新环境准备就绪后，S OpenSearch ervice 会切换环境，将绿色环境提升为新的生产环境。切换时不会丢失数据。此实践可在部署到新环境未成功的情况下最大程度地减少停机时间并维护原始环境。

**Topics**
+ [通常会导致 blue/green 部署的更改](#bg)
+ [通常不会导致 blue/green 部署的更改](#nobg)
+ [蓝/绿部署选项](#bg-deployment-options)
+ [确定更改是否会导致部 blue/green 署](#dryrun)
+ [跟踪配置更改](#initiating-tracking-configuration-changes)
+ [配置更改的阶段](#managedomains-config-stages)
+ [blue/green 部署对性能的影响](#performance-impact-bluegreen)
+ [配置更改的费用](#managedomains-config-charges)
+ [对验证错误进行故障排除](#validation)

## 通常会导致 blue/green 部署的更改
<a name="bg"></a>

以下操作会导致 blue/green 部署：
+ 更改实例类型
+ 启用精细访问控制
+ 执行服务软件更新
+ 启用或禁用专用主节点
+ 启用或禁用不带待机功能的多可用区
+ 更改存储类型、卷类型或卷大小
+ 选择不同的 VPC 子网
+ 添加或删除 VPC 安全组
+ 添加或删除专用协调器节点
+ 为控制面板启用或禁用 Amazon Cognito 身份验证 OpenSearch 
+ 选择不同的 Amazon Cognito 用户池或身份池
+ 修改高级设置
+ 升级到新 OpenSearch 版本（在部分或全部升级过程中，OpenSearch 仪表板可能不可用）
+ 启用静态数据加密或 node-to-node加密
+ 启用或禁用 UltraWarm 或冷存储
+ 禁用自动调整和回滚其更改
+ 关联和取消关联可选插件与域
+ 增加具有两个专用主节点的多可用区域的专用主节点数量
+ 减少 EBS 卷大小
+ 更改 EBS 卷大小、IOPS 或吞吐量（前提是您上次进行的更改正在执行或距离上次更改的时间不到 6 小时）
+ 允许向发布审核日志 CloudWatch。

对于带待机功能的多可用区的域，一次只能提出一个更改请求。如果已有更改正在执行，则会拒绝新请求。您可以使用 `DescribeDomainChangeProgress` API 查看当前更改状态。

## 通常不会导致 blue/green 部署的更改
<a name="nobg"></a>

在*大多数*情况下，以下操作不会导致 blue/green 部署：
+ 修改访问策略
+ 修改自定义端点
+ 更改传输层安全性协议 (TLS) 策略
+ 更改自动快照时间
+ 启用或禁用 **Require HTTPS (要求 HTTPS)**
+ 在不回滚其更改的情况下启用自动调整或禁用它
+ 如果您的域有专用的主节点，请更改数据节点或 UltraWarm 节点数量 
+ 如果域具有专用主节点，则更改专用主实例类型或节点数量（具有两个专用主节点的多可用区域除外）
+ 启用或禁用向发布错误日志或慢速日志 CloudWatch
+ 禁止向发布审核日志 CloudWatch
+ 增加 gp3 EBS 类型的卷大小、IOPS 或吞吐量。
**注意**  
在 2026 年 3 月 10 日之前，仅对 gp3 不超过 3 TiB 的卷支持就地增加音量。2026 年 3 月 10 日，该限制被取消，允许就地音量增加到 3 TiB 以上。但是，如果在取消此限制之前，您的集群的卷大小超过 3 TiB，则首次增加容量需要进行部署。blue/green deployment. All subsequent volume increases for that cluster will be performed as in-place updates and will not require a blue/green
+ 添加或删除标签

**注意**  
存在一些异常情况，具体取决于您的服务软件版本。如果您想确保更改不会导致 blue/green 部署，[请在更新域名之前进行试运行](#dryrun)（如果此选项可用）。某些更改不提供试运行选项。一般而言，我们建议您在流量高峰时段之外对集群进行更改。

## 蓝/绿部署选项
<a name="bg-deployment-options"></a>

选择部署策略以控制在更新时没有足够容量可用时群集如何处理部署。

1. **Full Swap 蓝/绿**-默认部署行为。需要预先提供全部实例容量，从而确保在有容量可用时以最快的速度进行部署。如果无法分配足够的容量，则部署将无法进行。

1. **容量优化**-建议用于拥有 30 个以上数据节点的集群。先尝试完全 blue/green 交换，如果容量不足，则继续分批部署。确保即使容量有限也能完成部署。由于部署将分批完成，因此完成时间可能会增加。

------
#### [ Console ]

**对于编辑域流程：**

1. 打开亚马逊 OpenSearch 服务控制台，网址为[https://console.aws.amazon.com/aos/home](https://console.aws.amazon.com/aos/home)。

1. 在导航窗格的 “**域**” 下，选择要打开集群配置的域名。

1. 单击 “**集群配置**” 选项卡右侧的 “**编辑**” 按钮。

1. 从**部署策略**选项中选择域更新所需的配置：

   1. **Full Swap 蓝/绿**-默认部署行为。需要预先提供全部实例容量，从而确保在有容量可用时以最快的速度进行部署。如果无法分配足够的容量，则部署将无法进行。

   1. **容量优化**-建议用于拥有 30 个以上数据节点的集群。先尝试完全 blue/green 交换，如果容量不足，则继续分批部署。确保即使容量有限也能完成部署。由于部署将分批完成，因此完成时间可能会增加。

1. 选择**保存更改**。

**对于创建域流程：**

1. 打开亚马逊 OpenSearch 服务控制台，网址为[https://console.aws.amazon.com/aos/home](https://console.aws.amazon.com/aos/home)。

1. 在左侧导航窗格中，选择 **域**。

1. 点击**创建域名**按钮。

1. 为域选择所有必需的配置。

1. 从**部署策略**选项中选择域更新所需的配置：

   1. **Full Swap 蓝/绿**-默认部署行为。需要预先提供全部实例容量，从而确保在有容量可用时以最快的速度进行部署。如果无法分配足够的容量，则部署将无法进行。

   1. **容量优化**-建议用于拥有 30 个以上数据节点的集群。先尝试完全 blue/green 交换，如果容量不足，则继续分批部署。确保即使容量有限也能完成部署。由于部署将分批完成，因此完成时间可能会增加。

1. 点击右侧**域摘要**面板上的 “**创建**” 按钮。

------
#### [ API ]

您可以使用 [UpdateDomainConfig](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/API_UpdateDomainConfig.html)API 配置部署策略。

**容量优化选项**

```
POST https://es.us-east-1.amazonaws.com/2021-01-01/opensearch/domain/my-domain/config
{
   "DeploymentStrategyOptions": {
    "DeploymentStrategy": "CapacityOptimized"
   }
}
```

**默认选项**

```
POST https://es.us-east-1.amazonaws.com/2021-01-01/opensearch/domain/my-domain/config
{
   "DeploymentStrategyOptions": {
    "DeploymentStrategy": "Default"
   }
}
```

------

## 确定更改是否会导致部 blue/green 署
<a name="dryrun"></a>

您可以测试某些类型的计划配置更改，以确定它们是否会导致 blue/green 部署，而不必承诺这些更改。发起配置更改之前，请使用控制台或 API 运行验证检查，以确保域符合更新条件。

------
#### [ Console ]

**验证配置更改**

1. 导航到亚马逊 OpenSearch 服务控制台，网址为[https://console.aws.amazon.com/aos/](https://console.aws.amazon.com/aos/)。

1. 在左侧导航窗格中，选择 **Domains**（域）。

1. 选择要进行配置更改的域。随即打开域详细信息页面。选择 **Actions**（操作）下拉菜单，然后选择 **Edit cluster configuration**（编辑集群配置）。

1. 对域进行更改，例如更改实例类型或节点数量。

1. 在**试运行分析**下，选择**运行**。试运行会验证您的配置更改是否存在错误，并确定是否需要 blue/green 部署。

1. 试运行完成后，结果将显示在页面底部，同时显示试运行 ID。分析表明配置更改是否需要 blue/green 部署。

   每次试运行都会覆盖之前的运行结果。要保留每次运行的详细信息，请保存其试运行 ID。试运行的有效期为 90 天，或者直到您进行配置更新。

1. 要继续更新配置，请选择**保存更改**。否则，选择**取消**。任一选项都会带您返回到**集群配置**选项卡。在此选项卡上，您可以选择**试运行详细信息**以查看最新试运行的详细信息。本页还包括试运行前的配置和试运行配置之间的 side-by-side比较。

------
#### [ API ]

您可以通过配置 API 来执行试运行验证。要使用 API 测试更改，请将 `DryRun` 设置为 `true`，将 `DryRunMode` 设置为 `Verbose`。除了确定更改是否会启动蓝绿部署外，Verbose 模式还会运行验证检查。例如，此[UpdateDomainConfig](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/API_UpdateDomainConfig.html)请求测试启用后生成的部署类型 UltraWarm：

```
POST https://es.us-east-1.amazonaws.com/2021-01-01/opensearch/domain/my-domain/config
{
   "ClusterConfig": {
    "WarmCount": 3,
    "WarmEnabled": true,
    "WarmType": "ultrawarm1.large.search"
   },
   "DryRun": true,
   "DryRunMode": "Verbose"
}
```

该请求将运行验证检查并返回更改将会导发的部署类型，但实际上不会执行更新：

```
{
   "ClusterConfig": {
     ...
    },
   "DryRunResults": {
      "DeploymentType": "Blue/Green",
      "Message": "This change will require a blue/green deployment."
    }
}
```

可能的部署类型如下：
+ `Blue/Green`：此更改将会导致蓝绿部署。
+ `DynamicUpdate`：此更改不会导致蓝绿部署。
+ `Undetermined`：域仍处于正在处理状态，因此无法确定部署类型。
+ `None`：未发生配置更改。

如果验证失败，将返回[验证失败](#validation)列表。

```
{
   "ClusterConfig":{
      "..."
   },
   "DryRunProgressStatus":{
      "CreationDate":"2023-01-12T01:14:33.847Z",
      "DryRunId":"db00ca39-48b2-4774-bbd3-252cf094d205",
      "DryRunStatus":"failed",
      "UpdateDate":"2023-01-12T01:14:33.847Z",
      "ValidationFailures":[
         {
            "Code":"Cluster.Index.WriteBlock",
            "Message":"Cluster has index write blocks."
         }
      ]
   }
}
```

如果状态仍为`pending`，则可以在后续[DescribeDryRunProgress](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/API_DescribeDryRunProgress.html)调用的 UpdateDomainConfig 响应中使用试运行 ID 来检查验证状态。

```
GET https://es.us-east-1.amazonaws.com/2021-01-01/opensearch/domain/my-domain/dryRun?dryRunId=my-dry-run-id
{
    "DryRunConfig": null,
    "DryRunProgressStatus": {
        "CreationDate": "2023-01-12T01:14:42.998Z",
        "DryRunId": "db00ca39-48b2-4774-bbd3-252cf094d205",
        "DryRunStatus": "succeeded",
        "UpdateDate": "2023-01-12T01:14:49.334Z",
        "ValidationFailures": null
    },
    "DryRunResults": {
        "DeploymentType": "Blue/Green",
        "Message": "This change will require a blue/green deployment."
    }
}
```

要在不进行验证检查的情况下运行试运行分析，请在使用配置 API 时将 `DryRunMode` 设置为 `Basic`。

------
#### [ Python ]

以下 Python 代码使用 [UpdateDomainConfig](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/API_UpdateDomainConfig.html)API 执行试运行验证检查，如果检查成功，则在不进行试运行的情况下调用相同的 API 来开始更新。如果检查失败，脚本将输出错误并停止。

```
import time
import boto3

client = boto3.client('opensearch')

response = client.UpdateDomainConfig(
    ClusterConfig={
        'WarmCount': 3,
        'WarmEnabled': True,
        'WarmCount': 123,
    },
    DomainName='test-domain',
    DryRun=True,
    DryRunMode='Verbose'
)

dry_run_id = response.DryRunProgressStatus.DryRunId

retry_count = 0

while True:

    if retry_count == 5:
        print('An error occured')
        break

    dry_run_progress_response = client.DescribeDryRunProgress('test-domain', dry_run_id)
    dry_run_status = dry_run_progress_response.DryRunProgressStatus.DryRunStatus

    if dry_run_status == 'succeeded':
        client.UpdateDomainConfig(
            ClusterConfig={
            'WarmCount': 3,
            'WarmEnabled': True,
            'WarmCount': 123,
        })
        break

    elif dry_run_status == 'failed':
        validation_failures_list = dry_run_progress_response.DryRunProgressStatus.ValidationFailures
        for item in validation_failures_list:
            print(f"Code: {item['Code']}, Message: {item['Message']}")
        break

    retry_count += 1
    time.sleep(30)
```

------

## 跟踪配置更改
<a name="initiating-tracking-configuration-changes"></a>

您可以每次请求一项配置更改，或将多个更改分入单个请求中。使用控制台中的**域处理状态**和**配置更改状态**字段，以跟踪配置更改。等待域状态变为 `Active` 后再请求其他更改。

域可能处于以下**处理状态**：
+ `Active`：未执行任何配置更改。您可以提交新的配置更改请求。
+ `Creating`：正在创建域。
+ `Modifying`：正在执行配置更改，例如添加新的数据节点、EBS、gp3、IOPS 预置或设置 KMS 密钥等。
+ `Upgrading engine version`：正在执行引擎版本升级。
+ `Updating service software`：正在执行软件更新。
+ `Deleting`：正在删除域。
+ `Isolated`：域已暂停。

域可能处于以下**配置更改状态**：
+ `Pending`：配置更改请求已提交。
+ `Initializing`：服务正在启动配置更改。
+ `Validating`：服务正在验证请求的更改和所需资源。
+ `Awaiting user inputs`：服务预期配置更改继续进行，例如实例类型更改。您可以编辑配置更改。
+ `Applying changes`：服务正在应用请求的配置更改。
+ `Cancelled`：配置更改已取消。选择**取消**以回滚所有更改。
+ `Completed`：请求的配置更改已成功完成。
+ `Validation failed`：请求的配置更改未能完成。未应用任何配置更改。
**注意**  
验证失败可能是因域中存在红色索引、所选实例类型不可用或磁盘空间不足所导致。有关验证错误的列表，请参阅[对验证错误进行故障排除](#validation)。出现验证失败事件时，您可以取消、重试或编辑配置更改。

配置更改完成后，域状态将变回 `Active`。

您可以查看集群运行状况和 Amazon CloudWatch 指标，发现域更新发生时，集群中的节点数量会暂时增加（通常是翻一番）。在下图中，您可以看到配置更改期间的节点从 11 个翻倍至 22 个，然后在更新完成后返回至 11 个。

![\[节点数在域配置更改期间从 11 翻倍至 22。\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/images/NodesDoubled.png)


这种临时的增加可能会对集群的[专用主节点](managedomains-dedicatedmasternodes.md)造成压力，其要管理的节点数可能突然增加。当 S OpenSearch ervice 将数据从旧集群复制到新集群时，它还可以增加搜索和索引延迟。在集群上保持足够的容量以处理与这些 blue/green 部署相关的开销非常重要。

**重要**  
在配置更改和服务维护期间，您*不会* 产生任何额外费用。您只需要为您的集群请求的节点数量付费。有关具体信息，请参阅[配置更改的费用](#managedomains-config-charges)。

为防止专用主节点过载，您可以使用 [Amazon CloudWatch 指标监控使用情况](managedomains-cloudwatchmetrics.md)。有关推荐的最大值，请参阅[Amazon OpenSearch 服务的推荐 CloudWatch 警报](cloudwatch-alarms.md)。

## 配置更改的阶段
<a name="managedomains-config-stages"></a>

在您启动配置更改后，S OpenSearch ervice 会通过一系列步骤来更新您的域名。您可以在控制台中的**配置更改状态**下查看配置更改的进度。更新经过的确切步骤取决于您正在进行的更改的类型。此外，您还可以使用 [DescribeDomainChangeProgress](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/API_DescribeDomainChangeProgress.html) API 操作监控配置更改。

以下是在配置更改期间更新可能经历的阶段：


| 阶段名称 | 说明 | 
| --- | --- | 
|  验证  |  验证域是否符合更新条件，如有必要，显示[验证问题](#validation)。  | 
|  创建新环境  |  完成必要的先决条件并创建开始 blue/green 部署所需的资源。  | 
|  预置新节点  |  在新环境中创建新的实例组。  | 
|  新节点上的流量路由  |  将流量重定向到新创建的数据节点。  | 
|  旧节点上的流量路由  | 禁用旧数据节点上的流量。 | 
|  准备要删除的节点  |  准备移除节点。此步骤仅在您将域缩小（例如，从 8 个节点缩小到 6 个节点）时才会发生。  | 
|  将分片复制到新节点  |  将分片从旧节点移动到新节点。  | 
|  终止节点  | 删除分片后，终止并删除旧节点。 | 
|  删除较旧资源  |  删除与旧环境关联的资源（例如负载均衡器）。  | 
|  动态更新  |  当更新不需要 blue/green 部署并且可以动态应用时显示。  | 
|  应用与专用主节点相关的更改  |  当专用主实例类型或计数更改时显示。  | 
|  应用与卷相关的更改  |  卷大小、类型、IOPS 和吞吐量发生变化时显示。  | 

## blue/green 部署对性能的影响
<a name="performance-impact-bluegreen"></a>

在 blue/green 部署期间，您的 Amazon S OpenSearch ervice 集群可用于传入的搜索和索引请求。但是，您可能会遇到以下性能问题：
+ 由于集群需要管理更多的节点，领导节点的使用量暂时增加。
+ 由于 OpenSearch 服务将数据从旧节点复制到新节点，因此增加了搜索和索引延迟。
+ 随着 blue/green 部署期间集群负载的增加，对传入请求的拒绝率增加。
+ 为避免延迟问题和请求被拒绝，您应该在集群运行良好且网络流量较低时运行 blue/green 部署。

## 配置更改的费用
<a name="managedomains-config-charges"></a>

如果您更改域的配置，S OpenSearch ervice 会按中所述创建一个新集群[在 Amazon OpenSearch 服务中进行配置更改](#managedomains-configuration-changes)。在从旧群集迁移到新群集时，会产生以下费用：
+ 如果您更改实例类型，第一个小时两个集群都会收费。第一个小时后，您只需为新群集付费。EBS 卷不会收取两次费用，因为它们是您的集群的一部分，因此它们的计费遵循实例计费。

  **示例：**您将配置从三个 `m3.xlarge` 实例更改为四个 `m4.large` 实例。在第一个小时中，两个集群都需要收费 (3 个 `m3.xlarge` \$1 4 个 `m4.large`)。第一个小时后，您只需为新集群付费 (4 个 `m4.large`)。
+ 如果您未更改实例类型，第一个小时您只需要为最大的集群付费。第一个小时后，您只需为新集群付费。

  **示例：** 您将配置从六个 `m3.xlarge` 实例更改为三个 `m3.xlarge` 实例。在第一个小时，您只需要为最大的集群付费 (6 个 `m3.xlarge`)。第一个小时后，您只需为新集群付费 (3 个 `m3.xlarge`)。

## 对验证错误进行故障排除
<a name="validation"></a>

当您启动配置更改或执行 OpenSearch 或 Elasticsearch 版本升级时， OpenSearch 服务会首先执行一系列验证检查，以确保您的域符合更新条件。如果其中任何一项检查失败，您将在控制台中收到通知，其中包含在更新域之前必须修复的特定问题。

OpenSearch 如果您的域名处于不可用状态超过 60 天，服务会将其隔离。我们会向您发送通知提醒以解决这些问题。如果您未在这段时间内解决问题，S OpenSearch ervice 会删除您的域名及其数据。

下表列出了 OpenSearch 服务可能出现的域名问题以及解决这些问题的步骤。


| 问题 | 错误代码 | 故障排除步骤 | 
| --- | --- | --- | 
| 未找到安全组 | SecurityGroupNotFound |  与您的 OpenSearch 服务域关联的安全组不存在。要解决此问题，请使用指定的名称[创建安全组](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#creating-security-groups)。  | 
| 未找到子网 | SubnetNotFound |  与您的 OpenSearch 服务域关联的子网不存在。要解决此问题，请在您的 VPC 中[创建子网](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-subnets.html#create-subnets)。  | 
| 未配置服务相关角色 | SLRNotConfigured | 未配置[服务的 OpenSearch 服务相关角色](slr.md)。服务相关角色由 S OpenSearch ervice 预定义，包括服务代表您调用其他 AWS 服务所需的所有权限。如果该角色不存在，您可能需要[手动创建角色](slr-aos.md#create-slr)。 | 
| 没有足够的 IP 地址 | InsufficientFreeIPsForSubnets |  您的一个或多个 VPC 子网没有足够的 IP 地址，因此无法更新您的域。要计算您需要的 IP 地址数量，请参阅[在 VPC 子网中预留 IP 地址](vpc.md#reserving-ip-vpc-endpoints)。  | 
| Cognito 用户群体不存在 | CognitoUserPoolNotFound |  OpenSearch 服务找不到 Amazon Cognito 用户池。确认您已创建一个用户池并具有正确的 ID。要查找该 ID，您可以使用 Amazon Cognito 控制台或以下 AWS CLI 命令： <pre>aws cognito-idp list-user-pools --max-results 60 --region us-east-1</pre>  | 
| Cognito 身份群体不存在 | CognitoIdentityPoolNotFound |  OpenSearch 服务找不到 Cognito 身份池。确认您已创建一个用户池并具有正确的 ID。要查找该 ID，您可以使用 Amazon Cognito 控制台或以下 AWS CLI 命令： <pre>aws cognito-identity list-identity-pools --max-results 60 --region us-east-1</pre>  | 
| 找不到用户群体的 Cognito 域 | CognitoDomainNotFound |  用户池没有域名。您可以使用 Amazon Cognito 控制台或以下 AWS CLI 命令进行配置： <pre>aws cognito-idp create-user-pool-domain --domain my-domain --user-pool-id id</pre>  | 
| 未配置 Cognito 角色 | CognitoRoleNotConfigured |  未配置向 OpenSearch 服务授予配置 Amazon Cognito 用户和身份池以及使用它们进行身份验证的权限的 IAM 角色。使用适当的权限集和信任关系配置角色。您可以使用控制台为您创建默认[CognitoAccessForAmazonOpenSearch](cognito-auth.md#cognito-auth-role)角色，也可以使用或 AWS SDK 手动配置角色。 AWS CLI   | 
| 无法描述用户群体 | UserPoolNotDescribable | 指定的 Amazon Cognito 角色无权描述与您的域关联的用户群体。确保角色权限策略允许 cognito-identity:DescribeUserPool 操作。请参阅 [关于这个 CognitoAccessForAmazonOpenSearch 角色](cognito-auth.md#cognito-auth-role)获取完全权限策略。 | 
| 无法描述身份群体 | IdentityPoolNotDescribable | 指定的 Amazon Cognito 角色无权描述与您的域关联的身份群体。确保角色权限策略允许 cognito-identity:DescribeIdentityPool 操作。请参阅 [关于这个 CognitoAccessForAmazonOpenSearch 角色](cognito-auth.md#cognito-auth-role)获取完全权限策略。 | 
| 无法描述用户群体和身份群体 | CognitoPoolsNotDescribable | 指定的 Amazon Cognito 角色无权描述与您的域关联的用户群体和身份群体。确保角色权限策略允许 cognito-identity:DescribeIdentityPool 和 cognito-identity:DescribeUserPool 操作。请参阅 [关于这个 CognitoAccessForAmazonOpenSearch 角色](cognito-auth.md#cognito-auth-role)获取完全权限策略。 | 
| KMS 密钥未启用。 | KMSKeyNotEnabled |  用于加密您的域名的 AWS Key Management Service (AWS KMS) 密钥已禁用。立即[重新启用密钥](https://docs.aws.amazon.com/kms/latest/developerguide/enabling-keys)。  | 
| 自定义证书未处于 ISSUED（已签发）状态 | InvalidCertificate |  如果您的域使用自定义终端节点，则可以通过在 AWS Certificate Manager (ACM) 中生成 SSL 证书或导入自己的证书来保护该终端节点。证书状态必须为 **Issued**（已签发）。如果您收到此错误，请在 ACM 控制台中[检查证书状态](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-describe.html)。如果状态为“Expired（已过期）”、“Failed（失败）”、“Inactive（非活动）”或“Pending validation（待验证）”，请参阅 ACM [故障排除文档](https://docs.aws.amazon.com/acm/latest/userguide/troubleshooting.html)解决问题。  | 
| 容量不足，无法启动所选实例类型 | InsufficientInstanceCapacity |  请求的实例类型容量不可用。例如，您可能请求了五个`i3.16xlarge.search`节点，但是 S OpenSearch ervice 没有足够`i3.16xlarge.search`的主机可用，因此无法完成请求。在 S OpenSearch ervice 中查看[支持的实例类型](supported-instance-types.md)，然后选择其他实例类型。  | 
| 集群中的红色索引 | RedCluster |  集群中一个或多个索引的状态为红色，导致集群的整体状态为红色。要对此问题进行故障排除和修复，请参阅[红色集群状态](handling-errors.md#handling-errors-red-cluster-status)。  | 
| 内存断路器，请求过多 | TooManyRequests |  您的域名有太多的搜索和写入请求，因此 S OpenSearch ervice 无法更新其配置。您可以减少请求数量，将实例的 RAM 纵向扩展至高达 64 GiB，或者通过添加实例横向扩展。  | 
| 新配置无法保存数据（磁盘空间不足） | InsufficientStorageCapacity |  配置的存储大小无法保存域中的所有数据。要解决此问题，请[选择更大的卷](limits.md#ebsresource)，[删除未使用的索引](https://opensearch.org/docs/latest/opensearch/rest-api/index-apis/delete-index/)，或者增加集群中的节点数量以立即释放磁盘空间。  | 
| 固定到特定节点的分片 | ShardMovementBlocked |  您的域中的一个或多个索引已附加到特定节点，并且无法重新分配。发生这种情况的最可能原因是您配置了分片分配筛选，其使您能够指定允许哪些节点托管特定索引的分片。 要解决此问题，请从所有受影响的索引中删除分片分配筛选条件： <pre>PUT my-index/_settings<br />{  <br />  "settings": {    <br />    "index.routing.allocation.require._name": null  <br />  }<br />}</pre>  | 
| 新配置无法保存所有分片（分片数） | TooManyShards | 您的域上的分片数过高，这会阻止 S OpenSearch ervice 将其移至新配置。要解决此问题，请通过添加与当前集群节点具有相同配置类型的节点来横向扩展域。请注意，[最大 EBS 卷大小](limits.md#ebsresource)取决于节点的实例类型。要防止将来出现此问题，请参阅 [选择分片数量](bp-sharding.md)并定义适合您的使用案例的分片策略。 | 
|  与您的域关联的子网不支持 IPv4 地址  |  `ResultCodeIPv4BlockNotExists`  |  要解决此问题，请根据配置的域 IP 地址类型在 VPC 中[创建子网或更新现有子网](https://docs.aws.amazon.com//vpc/latest/userguide/configure-subnets.html#subnet-IP-address-range)。如果您的域**IPv4仅**使用地址类型，请使用 IPv4仅限子网。如果您的域使用**双堆栈模式**，请使用双堆栈子网。  | 
|  与您的域关联的子网不支持 IPv6 地址  |  `ResultCodeIPv6BlockNotExists`  |  要解决此问题，请根据配置的域 IP 地址类型在 VPC 中[创建子网或更新现有子网](https://docs.aws.amazon.com//vpc/latest/userguide/configure-subnets.html#subnet-IP-address-range)。如果您的域**IPv4仅**使用地址类型，请使用 IPv4仅限子网。如果您的域使用**双堆栈模式**，请使用双堆栈子网。  | 

# Amazon OpenSearch Service 中的服务软件更新
<a name="service-software"></a>

**注意**  
有关每个*主要*（非补丁）服务软件更新中所做的更改和新增功能说明，请参阅[发布说明](release-notes.md)。

Amazon S OpenSearch ervice 会定期发布服务软件更新，以增加功能或以其他方式改进您的域名。控制台中的 **Notifications**（通知）面板是查看是否有可用的更新或检查更新状态的最简单方法。每个通知都包含有关服务软件更新的详细信息。所有服务软件更新均使用蓝绿部署，以尽可能减少停机时间。

服务软件更新不同于 OpenSearch 服务*版本*升级。有关升级到更高版本的 Serv OpenSearch ice 的信息，请参阅[升级 Amazon OpenSearch Service 域](version-migration.md)。

 OpenSearch 服务要求您在所需的服务软件更新可用后 30 天内应用这些更新。这些更新对于维护安全合规性至关重要。

 如果您未在 30 天内应用所需的更新，您将每 15 天收到一次提醒通知，持续 30 天。在这段时间不合规之后，您的域名将被隔离，并产生以下影响：
+ 您的域名的所有网络访问权限均已删除
+ 域状态更改为已**隔离**
+ 在您应用所需的更新之前，该域将无法使用

 隔离期间，您将在 60 天内继续每 15 天收到一次提醒通知。如果您未在此期限内应用所需的更新，则您的 OpenSearch 服务域和所有关联数据将被永久删除。有关更多信息，请参阅[验证错误疑难解答](managedomains-configuration-changes.md#validation)。

## 可选更新与必需更新
<a name="service-software-optional-required"></a>

OpenSearch 服务有两大类服务软件更新：

### 可选更新
<a name="service-software-optional"></a>

可选服务软件更新通常包括增强功能以及新特性或新功能支持。域不会强制执行可选更新，可选更新安装不存在硬性截止日期要求。通过电子邮件和控制台通知传达更新发布日期。您可以选择立即应用更新，也可以将其重新安排到更合适的日期和时间。您也可以在域的[非高峰时段](off-peak.md)安排更新。绝大多数软件更新为可选更新。

无论您是否计划更新，如果您对域进行更改以导致[蓝/绿部署](managedomains-configuration-changes.md)，S OpenSearch ervice 都会自动为您更新服务软件。

您可以配置域，在[非高峰时段](off-peak.md)自动应用可选更新。开启此选项后， OpenSearch 服务将在可选更新可用后至少等待 13 天，然后计划在 7 天后进行更新。计划更新时，将收到控制台通知，您可以选择重新安排在未来的某个日期执行更新。

要启用自动软件更新，请在创建或更新域时选择**启用自动软件更新**。要使用配置相同的设置 AWS CLI，请在创建或更新域名`true`时设置为`--software-update-options`。

### 必需更新：
<a name="service-software-required"></a>

必需服务软件更新通常包括重要安全修复或其他强制更新，以确保域的持续完整性和功能性。所需更新的示例包括 Log4j 常见漏洞和暴露 (CVEs) 和实例元数据服务版本 2 的强制执行 ()。IMDSv2一年的强制更新次数通常少于三次。

OpenSearch Service 会自动安排这些更新，并在预定更新前七天通过电子邮件和控制台通知通知您。您可以选择立即应用更新，也可以将其重新安排到更合适的日期和时间以及*允许时间范围内*的某个时间。您也可以在域的下一[非高峰时段](off-peak.md)安排更新。如果您未对必需的更新采取任何操作，也没有进行任何导致 blue/green 部署的域更改，则 OpenSearch 服务可以在域的非高峰期限内，在指定的截止日期（通常为上线后 14 天）之后的任何时间启动更新。

无论何时安排更新，如果您对域名进行更改以导致[蓝/绿部署](managedomains-configuration-changes.md)，S OpenSearch ervice 都会自动为您更新您的域。

## 补丁更新
<a name="service-software-patches"></a>

以 “-P” 结尾的服务软件版本（例如 R20211203-*P4*）是补丁版本。补丁可能包括性能改进、次要错误修复以及安全修复或状态改进。补丁发行版不包含新功能或重大更改，并且通常不会对用户产生直接或明显的影响。服务软件通知将说明补丁版本是可选补丁还是必需补丁。

## 注意事项
<a name="service-software-considerations"></a>

决定是否更新域时，请考虑以下事项：
+ 通过手动更新域，您可以更快地利用新功能。当您选择 “**更新**” 时， OpenSearch 服务会将请求置于队列中，并在有时间时开始更新。
+ 当您启动服务软件更新时， OpenSearch 服务会在更新开始和完成更新时发送通知。
+ 软件更新使用 blue/green 部署来最大限度地减少停机时间。更新可能会临时使集群的专用主节点紧张，因此请确保保持足够的容量来处理相关开销。
+ 通常在几分钟内完成更新，但如果您的系统负载过重，也可能需要几个小时甚至几天。考虑在配置的[非高峰时段](off-peak.md)更新您的域，以避免长时间更新。

## 启动服务软件更新
<a name="service-software-requesting"></a>

您可以通过服务控制台 AWS CLI、或其中一个来请求 OpenSearch 服务软件更新 SDKs。

### 控制台
<a name="service-software-request-console"></a>

**请求服务软件更新**

1. 在[https://console.aws.amazon.com/aos/家](https://console.aws.amazon.com/aos/home)中打开亚马逊 OpenSearch 服务控制台。

1. 选择域名以打开其配置。

1. 选择**操作**、**更新**，然后选择以下选项之一：
   + **立即应用更新** - *如果有可用容量*，则立即安排在当前小时执行更新。如果容量不足，我们会提供其他可用时段供您选择。
   + **计划在非高峰时段执行更新** - 仅当为域启用非高峰时段时段时可用。计划在域配置的非高峰时段执行更新。无法保证下一个时段执行更新。视容量而定，可能会在接下来的几天内更新。有关更多信息，请参阅 [计划在非高峰时段执行软件更新](#service-software-offpeak)。
   + **计划特定日期和时间更新** - 计划在特定日期和时间执行更新。如果出于容量原因指定的时间不可用，则可以选择其他时段。

   如果计划在未来的某个日期（域的非高峰期之内或之外）执行更新，则可以随时重新安排更新。有关说明，请参阅[重新计划操作](off-peak.md#off-peak-reschedule)。

1. 选择**确认**。

### AWS CLI
<a name="service-software-request-cli"></a>

发送启动服务软件更新的[start-service-software-update](https://docs.aws.amazon.com/cli/latest/reference/opensearch/start-service-software-update.html) AWS CLI 请求。此示例将更新立即添加到队列中：

```
aws opensearch start-service-software-update \
  --domain-name my-domain \
  --schedule-at "NOW"
```

**响应：**

```
{
    "ServiceSoftwareOptions": {
        "CurrentVersion": "R20220928-P1",
        "NewVersion": "R20220928-P2",
        "UpdateAvailable": true,
        "Cancellable": true,
        "UpdateStatus": "PENDING_UPDATE",
        "Description": "",
        "AutomatedUpdateDate": "1969-12-31T16:00:00-08:00",
        "OptionalDeployment": true
    }
}
```

**提示**  
在请求更新之后，您可以在很小的时间范围内将其取消。这种`PENDING_UPDATE`状态的持续时间可能会有很大差异，这取决于您 AWS 区域 和 OpenSearch 服务正在执行的并发更新的数量。要取消更新，请使用控制台或`cancel-service-software-update` AWS CLI 命令。

如果请求失败并出现 `BaseException`，则表示出于容量原因指定的时间不可用，您必须指定其他时间。 OpenSearch 服务会在响应中提供其他可用时段建议。

### AWS SDKs
<a name="service-software-request-sdk"></a>

此示例 Python 脚本使用中的 d [escribe\$1domain](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/opensearch.html#OpenSearchService.Client.describe_domain) 和 [start\$1service\$1software\$1update 方法 适用于 Python (Boto3) 的 AWS SDK 来检查域是否有资格进行服务软件更新](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/opensearch.html#OpenSearchService.Client.start_service_software_update)，如果符合更新条件，则开始更新。您必须为 `domain_name` 提供一个值。

```
import boto3
from botocore.config import Config
import time

# Build the client using the default credential configuration.
# You can use the CLI and run 'aws configure' to set access key, secret
# key, and default region.

my_config = Config(
    # Optionally lets you specify a Region other than your default.
    region_name='us-east-1'
)

domain_name = ''  # The name of the domain to check and update

client = boto3.client('opensearch', config=my_config)


def getUpdateStatus(client):
    """Determines whether the domain is eligible for an update"""
    response = client.describe_domain(
        DomainName=domain_name
    )
    sso = response['DomainStatus']['ServiceSoftwareOptions']
    if sso['UpdateStatus'] == 'ELIGIBLE':
        print('Domain [' + domain_name + '] is eligible for a service software update from version ' +
              sso['CurrentVersion'] + ' to version ' + sso['NewVersion'])
        updateDomain(client)
    else:
        print('Domain is not eligible for an update at this time.')


def updateDomain(client):
    """Starts a service software update for the eligible domain"""
    response = client.start_service_software_update(
        DomainName=domain_name
    )
    print('Updating domain [' + domain_name + '] to version ' +
          response['ServiceSoftwareOptions']['NewVersion'] + '...')
    waitForUpdate(client)


def waitForUpdate(client):
    """Waits for the domain to finish updating"""
    response = client.describe_domain(
        DomainName=domain_name
    )
    status = response['DomainStatus']['ServiceSoftwareOptions']['UpdateStatus']
    if status == 'PENDING_UPDATE' or status == 'IN_PROGRESS':
        time.sleep(30)
        waitForUpdate(client)
    elif status == 'COMPLETED':
        print('Domain [' + domain_name +
              '] successfully updated to the latest software version')
    else:
        print('Domain is not currently being updated.')

def main():
    getUpdateStatus(client)
```

## 计划在非高峰时段执行软件更新
<a name="service-software-offpeak"></a>

2023 年 2 月 16 日之后创建的每个 OpenSearch 服务域在当地时间晚上 10:00 至上午 8:00 之间每天有 10 小时的时段，我们将其视为[非](off-peak.md)高峰时段。 OpenSearch 服务使用此窗口来安排域的服务软件更新。非高峰期更新有助于最大限度地减少在流量较高时段对集群专用主节点的压力。 OpenSearch 未经您的同意，服务无法在 10 小时之外启动更新。
+ 对于*可选*更新，S OpenSearch ervice 会通知您更新的可用性，并提示您在即将到来的非高峰时段安排更新。
+ 对于*所需的*更新，S OpenSearch ervice 会在即将到来的非高峰时段自动安排更新，并提前三天通知您。您可以重新安排更新（在非高峰时段之内或之外执行），但只能在要求的时间范围内完成更新。

对于每个域，您可以选择使用自定义时间覆盖默认开始时间晚上 10:00。有关说明，请参阅[配置自定义非高峰窗口](off-peak.md#off-peak-custom)。

### 控制台
<a name="service-software-offpeak-console"></a>

**计划在即将到来的非高峰时段执行更新**

1. 在[https://console.aws.amazon.com/aos/家](https://console.aws.amazon.com/aos/home )中打开亚马逊 OpenSearch 服务控制台。

1. 选择域名以打开其配置。

1. 选择**操作**、**更新**。

1. 选择**计划在非高峰时段执行更新**。

1. 选择**确认**。

您可以在**非高峰时段**选项卡上查看计划操作并随时重新安排时间。请参阅[查看计划的操作](off-peak.md#off-peak-view)。

### CLI
<a name="service-software-offpeak-cli"></a>

要使用在即将到来的非高峰时段安排更新 AWS CLI，请发送[StartServiceSoftwareUpdate](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/API_StartServiceSoftwareUpdate.html)请求并指定`OFF_PEAK_WINDOW``--schedule-at`参数：

```
aws opensearch start-service-software-update \
  --domain-name my-domain \
  --schedule-at "OFF_PEAK_WINDOW"
```

## 监控服务软件更新
<a name="service-software-monitor"></a>

OpenSearch 当服务软件更新可用、需要更新、已启动、已完成或失败时，服务会发送[通知](managedomains-notifications.md)。您可以在 OpenSearch 服务控制台的**通知**面板上查看这些通知。如果更新是可选的，通知严重性为 `Informational`，如果需要，严重性为 `High`。

OpenSearch 服务还会向 Amazon 发送服务软件事件 EventBridge。您可以使用配置规则， EventBridge 以便在收到事件时发送电子邮件或执行特定操作。有关演练示例，请参阅[教程：发送有关可用软件更新的 Amazon SNS 警报](sns-events.md)。

要查看发送给 Amazon 的每个服务软件事件的格式 EventBridge，请参阅[服务软件更新事件](monitoring-events.md#monitoring-events-sso)。

## 当域不符合更新资格时
<a name="service-software-ineligible"></a>

如果您的域处于下表中所示的任何状态，则可能没有资格进行服务软件更新。


| 州 | 说明 | 
| --- | --- | 
| 域正在处理中 |  域正在接受配置更改。在操作完成后检查更新资格。  | 
| 红色集群状态 |  集群中的一个或多个索引为红色。有关问题排查步骤，请参阅[红色集群状态](handling-errors.md#handling-errors-red-cluster-status)。  | 
| 高错误率 |   OpenSearch 集群在尝试处理请求时返回了大量 5 *xx* 错误。此问题通常是因为同时读取或写入了过多的请求。请考虑减少流向集群的流量或扩展您的域。  | 
| 裂脑 |  *Split brain* 意味着你的 OpenSearch 集群有多个主节点，并且已经分成两个集群，这些集群永远不会自行重新加入。您可以通过使用推荐数量的[专用主节点](managedomains-dedicatedmasternodes.md)避免裂脑。为了帮助您从裂脑恢复，请联系 [支持](https://console.aws.amazon.com/support/home)。  | 
| Amazon Cognito 集成问题 |  您的域名[对 OpenSearch 控制面板使用身份验证](cognito-auth.md)， OpenSearch 服务找不到一个或多个 Amazon Cognito 资源。如果缺少 Amazon Cognito 用户池，则通常会出现此问题。要更正此问题，请重新创建缺失的资源并配置 OpenSearch 服务域以使用该资源。  | 
| 其他 服务问题 |   OpenSearch 服务本身的问题可能会导致您的域名显示为不符合更新条件。如果上述情况都不适用于您的域且该问题持续超过一天，请联系 [支持](https://console.aws.amazon.com/support/home)。  | 

# 为 Amazon OpenSearch 服务定义非高峰时段
<a name="off-peak"></a>

创建 Amazon S OpenSearch ervice 域时，您可以定义每天 10 小时的时段，该窗口被视为*非高峰*时段。 OpenSearch 只要有可能，服务就会使用此窗口来安排服务软件更新和自动调整优化，这些更新和自动调整需要在相对较低的流量时间内[部署蓝/绿](managedomains-configuration-changes.md)。 Blue/green 是指为域更新创建新环境并在更新完成后将用户路由到新环境的过程。

尽管 blue/green 部署不会造成中断，但为了最大限度地减少 blue/green 部署资源消耗时[对性能的任何潜在影响](managedomains-configuration-changes.md#initiating-tracking-configuration-changes)，我们建议您在域配置的非高峰时段安排这些部署。不在非高峰窗口进行诸如节点替换之类的更新或者需要立即部署到域中的更新。

您可以修改非高峰窗口的开始时间，但不能修改窗口时长。

**注意**  
非高峰窗口于 2023 年 2 月 16 日推出。默认情况下，在此日期之前创建的所有域都禁用非高峰窗口。您必须手动启用和配置这些域的非高峰窗口。默认情况下，在此日期*之后*创建的所有域都启用非高峰窗口。启用域的非高峰窗口后，您将无法再将其禁用。

## 非高峰窗口服务软件更新
<a name="off-peak-sso"></a>

OpenSearch 服务有两大类服务软件更新：*可选*的和*必需*的。这两种类型都需要 blue/green 部署。不会对您的域强制执行可选更新，但如果您在指定的截止日期（通常是更新可用两周）之前不采取任何操作，则会自动安装必需更新。有关更多信息，请参阅 [可选更新与必需更新](service-software.md#service-software-optional-required)。

启动*可选*更新后，您可以选择立即应用更新，计划在随后的非高峰窗口进行，或者指定自定义的日期和时间来应用更新。

![\[Software update dialog with options to apply now, schedule off-peak, or set specific time.\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/images/off-peak-sso.png)


对于*所需的*更新，S OpenSearch ervice 会自动安排在非高峰时段执行更新的日期和时间。您会在计划更新前的三天收到通知，而且您也可以在必需的部署期限内将其重新安排到稍后的日期和时间。有关说明，请参阅[重新计划操作](#off-peak-reschedule)。

## 非高峰期自动调整优化
<a name="off-peak-autotune"></a>

以前，Auto-Tune 使用[维护窗口](auto-tune-schedule.md)来安排需要 blue/green 部署的更改。在引入非高峰窗口之前已经启用自动调整和维护窗口的域将继续使用维护窗口进行这些更新，除非您将其迁移到使用非高峰窗口。

建议您将域迁移到使用非高峰窗口，因为该窗口用于计划域上诸如服务软件更新之类的其他活动。有关说明，请参阅[从自动调整维护窗口迁移](#off-peak-migrate)。将域迁移到非高峰窗口后，您将无法恢复到使用维护窗口。

2023 年 2 月 16 日之后创建的所有域名都将使用非高峰时段（而不是传统的维护时段）来安排 blue/green 部署。您无法禁用域的非高峰窗口。有关需要蓝绿部署的自动调整优化的列表，请参阅 [更改类型](auto-tune.md#auto-tune-types)。

## 启用非高峰窗口
<a name="off-peak-enable"></a>

默认情况下，在 2023 年 2 月 16 日（引入非高峰窗口）之前创建的所有域都禁用该功能。您必须手动为这些域启用该功能。启用非高峰窗口后，您将无法再将其禁用。

### 控制台
<a name="off-peak-enable-console"></a>

**要启用域的非高峰窗口**

1. 在[https://console.aws.amazon.com/aos/家](https://console.aws.amazon.com/aos/home )中打开亚马逊 OpenSearch 服务控制台。

1. 选择域的名称以打开其配置。

1. 导航至**非高峰窗口**选项卡，然后选择**编辑**。

1. 您可以使用协调世界时 (UTC) 格式自定义开始时间。例如，要配置美国西部（俄勒冈州）区域的开始时间为晚上 11:30，请指定 **07:30**。

1. 选择**保存更改**。

### CLI
<a name="off-peak-enable-cli"></a>

要使用修改非高峰时段 AWS CLI，[UpdateDomainConfig](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/API_UpdateDomainConfig.html)请发送请求：

```
aws opensearch update-domain-config \
  --domain-name my-domain \
  --off-peak-window-options 'Enabled=true, OffPeakWindow={WindowStartTime={Hours=02,Minutes=00}}'
```

如果您未指定自定义窗口的开始时间，则默认为世界标准时间 00:00。

## 配置自定义非高峰窗口
<a name="off-peak-custom"></a>

您可以采用协调世界时 (UTC) 指定域的自定义非高峰窗口。例如，如果您要为域配置美国东部（弗吉尼亚州北部）区域的非高峰窗口开始时间为晚上 11:00，请指定 04:00 UTC。

### 控制台
<a name="off-peak-custom-console"></a>

**要修改域的非高峰窗口**

1. 在[https://console.aws.amazon.com/aos/家](https://console.aws.amazon.com/aos/home )中打开亚马逊 OpenSearch 服务控制台。

1. 选择域的名称以打开其配置。

1. 导航至**非高峰窗口**选项卡。您可以查看已配置的非高峰窗口以及即将为域执行的计划操作列表。

1. 选择**编辑**，然后采用 UTC 指定新的开始时间。例如，要配置美国东部（弗吉尼亚州北部）区域的开始时间晚上 9:00，请指定 **02:00 UCT**。

1. 选择**保存更改**。

### CLI
<a name="off-peak-custom-cli"></a>

要使用配置自定义非高峰时段 AWS CLI，[UpdateDomainConfig](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/API_UpdateDomainConfig.html)请发送请求并以 24 小时时间格式指定小时和分钟。

例如，以下请求将窗口开始时间更改为 UTC 凌晨 2:00：

```
aws opensearch update-domain-config \
  --domain-name my-domain \
  --off-peak-window-options 'OffPeakWindow={WindowStartTime={Hours=02,Minutes=00}}'
```

如果您未指定窗口开始时间，则创建域的 AWS 区域 默认时间为当地时间晚上 10:00。

## 查看计划的操作
<a name="off-peak-view"></a>

您可以查看每个域的当前计划、正在进行或待处理的所有操作。操作的严重程度可分为`HIGH`、`MEDIUM` 和`LOW`。

操作具有以下状态：
+ `Pending update`— 操作正在待处理的队列中。
+ `In progress`— 操作当前正在进行中。
+ `Failed`— 操作未能完成。
+ `Completed`— 操作已成功完成。
+ `Not eligible`— 仅适用于服务软件更新。更新无法继续，因为集群运行状况不佳。
+ `Eligible`— 仅适用于服务软件更新。该域符合更新条件。

### 控制台
<a name="off-peak-view-console"></a>

 OpenSearch 服务控制台显示域配置中的所有计划操作，以及每个操作的严重性和当前状态。

**要查看域的计划操作**

1. 在[https://console.aws.amazon.com/aos/家](https://console.aws.amazon.com/aos/home )中打开亚马逊 OpenSearch 服务控制台。

1. 选择域的名称以打开其配置。

1. 导航至**非高峰窗口**选项卡。

1. 在**计划操作**下，查看域的当前计划、正在进行或待处理的所有操作。

### CLI
<a name="off-peak-view-cli"></a>

要使用查看计划操作 AWS CLI，[ListScheduledActions](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/API_ListScheduledActions.html)请发送请求：

```
aws opensearch list-scheduled-actions \
  --domain-name my-domain
```

**响应：**

```
{
    "ScheduledActions": [
        {
            "Cancellable": true,
            "Description": "The Deployment type is : BLUE_GREEN.",
            "ID": "R20220721-P13",
            "Mandatory": false,
            "Severity": "HIGH",
            "ScheduledBy": "CUSTOMER",
            "ScheduledTime": 1.673871601E9,
            "Status": "PENDING_UPDATE",
            "Type": "SERVICE_SOFTWARE_UPDATE",
        },
        {
            "Cancellable": true,
            "Description": "Amazon Opensearch will adjust the young generation JVM arguments on your domain to improve performance",
            "ID": "Auto-Tune",
            "Mandatory": true,
            "Severity": "MEDIUM",
            "ScheduledBy": "SYSTEM",
            "ScheduledTime": 1.673871601E9,
            "Status": "PENDING_UPDATE",
            "Type": "JVM_HEAP_SIZE_TUNING",
        }
    ]
}
```

## 重新计划操作
<a name="off-peak-reschedule"></a>

OpenSearch 服务会通知您定期服务软件更新和自动调整优化。您可以选择立即应用更新，也可以将其重新安排到稍后的日期和时间。

**注意**  
OpenSearch 服务可以在您选择的时间后一小时内安排操作。例如，如果您选择在下午 5 点应用更新，则更新会在下午 5 点到 6 点之间进行。

### 控制台
<a name="off-peak-reschedule-console"></a>

**要重新安排操作**

1. 在[https://console.aws.amazon.com/aos/家](https://console.aws.amazon.com/aos/home )中打开亚马逊 OpenSearch 服务控制台。

1. 选择域的名称以打开其配置。

1. 导航至**非高峰窗口**选项卡。

1. 在**计划操作**下，依次选择操作和**重新安排**。

1. 请选择以下选项之一：
   + **立即应用更新** - *如果有可用容量*，则立即安排在当前小时执行更新。如果容量不足，我们会提供其他可用时段供您选择。
   + **将其安排在非高峰窗口** - 标记要在即将到来的非高峰窗口中进行操作。无法保证在下一个窗口会执行更改。视容量而定，可能会在接下来的几天内更新。
   + **重新安排此更新** - 允许您指定应用更改的自定义日期和时间。如果出于容量原因指定的时间不可用，则可以选择其他时段。
   + **取消计划更新** - 取消更新。此选项只适用于可选服务软件更新。它不适用于自动调整操作或必需的软件更新。

1. 选择**保存更改**。

### CLI
<a name="off-peak-reschedule-cli"></a>

要使用重新安排操作 AWS CLI，请发送请求。[UpdateScheduledAction](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/API_UpdateScheduledAction.html)要检索操作 ID，请发送 `ListScheduledActions` 请求。

以下请求将服务软件更新重新安排在某个具体的日期和时间：

```
aws opensearch update-scheduled-action \
  --domain-name my-domain \
  --action-id R20220721-P13 \
  --action-type "SERVICE_SOFTWARE_UPDATE" \
  --desired-start-time 1677348395000 \
  --schedule-at TIMESTAMP
```

**响应：**

```
{
   "ScheduledAction": { 
      "Cancellable": true,
      "Description": "Cluster status is updated.",
      "Id": "R20220721-P13",
      "Mandatory": false,
      "ScheduledBy": "CUSTOMER",
      "ScheduledTime": 1677348395000,
      "Severity": "HIGH",
      "Status": "PENDING_UPDATE",
      "Type": "SERVICE_SOFTWARE_UPDATE"
   }
}
```

如果请求失败`SlotNotAvailableException`，则表示由于容量原因，您指定的时间不可用，您必须指定其他时间。 OpenSearch 服务会在响应中提供其他可用时段建议。

## 从自动调整维护窗口迁移
<a name="off-peak-migrate"></a>

如果域名是在 2023 年 2 月 16 日之前创建的，则它可以使用[维护窗口](auto-tune-schedule.md)来安排需要部署的 Auto-Tune 优化。 blue/green 您可以迁移现有的自动调整域，以改为使用非高峰窗口。

**注意**  
将域迁移到使用非高峰窗口后，您将无法恢复到使用维护窗口。

### 控制台
<a name="off-peak-migrate-console"></a>

**要将域迁移到使用非高峰窗口**

1. 在 Amazon S OpenSearch ervice 控制台中，选择域名以打开其配置。

1. 转到**自动调整**选项卡，选择**编辑**。

1. 选择**迁移到非高峰窗口**。

1. 对于**开始时间 (UTC)**，采用协调世界时间 (UTC) 为非高峰窗口的每日开始时间。

1. 选择 **Save changes**（保存更改）。

### CLI
<a name="off-peak-migrate-cli"></a>

要使用从 Auto-Tune 维护窗口迁移到非高峰时段 AWS CLI，请发送[UpdateDomainConfig](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/API_UpdateDomainConfig.html)请求：

```
aws opensearch update-domain-config \
  --domain-name my-domain \
  --auto-tune-options DesiredState=ENABLED,UseOffPeakWindow=true,MaintenanceSchedules=[]
```

要将域从自动调整维护窗口迁移到非高峰窗口，必须打开非高峰窗口。您可以在单独的请求中或在同一个请求中启用非高峰窗口。有关说明，请参阅[启用非高峰窗口](#off-peak-enable)。

# 亚马逊 OpenSearch 服务中的通知
<a name="managedomains-notifications"></a>

Amazon S OpenSearch ervice 中的通知包含有关您的域名的性能和运行状况的重要信息。 OpenSearch 服务会通知您有关服务软件更新、Auto-Tune 增强功能、集群运行状况事件和域错误的信息。通知适用于所有版本的 Elasticsearch OSS。 OpenSearch 

您可以在 OpenSearch 服务控制台的**通知**面板中查看通知。所有 OpenSearch 服务通知也都显示在 [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) 中。有关通知的完整列表和示例事件，请参阅[使用 Amazon 监控 OpenSearch 服务事件 EventBridge](monitoring-events.md)。

## 开始使用通知
<a name="managedomains-notifications-start"></a>

创建域时会自动启用通知。转到 OpenSearch 服务控制台的**通知**面板以监控和确认通知。每个通知包括发布时间、相关域、严重性和状态级别以及简要说明等信息。您可以在控制台中查看长达 90 天的历史通知。

访问 **Notifications（通知）**面板或确认通知后，您可能会收到关于没有权限执行 `es:ListNotificationsV2` 或 `es:UpdateNotificationStatus` 的错误消息。要解决此问题，请在 IAM 中向您的用户或角色授予以下权限：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [{
    "Effect": "Allow",
    "Action": [
      "es:DescribeDomain",
      "es:ListDomainNames"
    ],
    "Resource": "arn:aws:es:*:111122223333:domain/*"
  }]
}
```

------

IAM 控制台抛出一个错误（“IAM does not recognize one or more actions." [IAM 无法识别一项或多项操作。]”），您可以放心地忽略该错误。您也可以限制对某些域进行 `es:UpdateNotificationStatus` 操作。要了解更多信息，请参阅[策略元素参考](ac.md#ac-reference)。

## 通知严重性
<a name="managedomains-notifications-severities"></a>

 OpenSearch 服务中的通知可以是*信息性*的，与您已经采取的任何操作或域名的操作有关，也可以是*可操作*的，需要您采取特定的操作，例如应用强制性的安全补丁。每个通知均包含与其关联的严重性，可以是 `Informational`、`Low`、`Medium`、`High` 或 `Critical`。下表汇总了每种严重性：


| 严重性 | 说明 | 示例 | 
| --- | --- | --- | 
| Informational |  与您的域操作相关的信息。  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/managedomains-notifications.html)  | 
| Low |  建议操作，但如果不采取任何操作，则不会对域可用性或性能产生不利影响。  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/managedomains-notifications.html)  | 
| Medium |  如果不采取建议的操作则可能会产生影响，但会带来更长的时间窗口。  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/managedomains-notifications.html)  | 
| High |  需要采取紧急操作以免产生不利影响。  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/managedomains-notifications.html)  | 
| Critical |  需要立即采取操作以免产生不利影响，或从中还原。  | 当前无可用 | 

## 示例 EventBridge 事件
<a name="managedomains-notifications-cloudwatch"></a>

以下示例显示了发送给 Amazon 的 OpenSearch 服务通知事件 EventBridge。由于更新可选，通知的严重性为 `Informational`：

```
{
  "version": "0",
  "id": "01234567-0123-0123-0123-012345678901",
  "detail-type": "Amazon OpenSearch Service Software Update Notification",
  "source": "aws.es",
  "account": "123456789012",
  "time": "2016-11-01T13:12:22Z",
  "region": "us-east-1",
  "resources": ["arn:aws:es:us-east-1:123456789012:domain/test-domain"],
  "detail": {
    "event": "Service Software Update",
    "status": "Available",
    "severity": "Informational",
    "description": "Service software update [R20200330-p1] available."
  }
}
```

# 在 Ama OpenSearch zon 服务中配置多可用区域
<a name="managedomains-multiaz"></a>

为了防止数据丢失并最大限度地减少 OpenSearch 服务中断时的 Amazon Service 集群停机时间，您可以在同一区域的两个或三个*可用区*中分配节点，这种配置称为多可用区。可用区是每个 AWS 区域内的隔离位置。

对于运行生产工作负载的域，建议使用带待机功能的多可用区部署选项，该选项可创建以下配置：
+ 跨三个区域部署域。
+ 为专用主节点和数据节点选择最新一代实例类型。
+ 三个专用主节点和三个（或三倍）数据节点。
+ 您的域中每个索引至少有两个副本，或者三倍的数据副本（包括主节点和副本）。

本节的其余部分提供了有关这些配置的解释和背景。

## 带待机功能的多可用区
<a name="managedomains-za-standby"></a>

带备用模式的多可用区是 Amazon Ser OpenSearch vice 域的部署选项，可提供 99.99% 的可用性、稳定的生产工作负载性能，并简化域配置和管理。当您使用带待机功能的多可用区时，域可以抵御基础设施故障，而不会影响性能或可用性。此部署选项通过强制执行一些最佳实践（例如指定的数据节点数、主节点数、实例类型、副本数量、软件更新设置和开启自动调整）来达到这一标准。

**注意**  
带备用模式的多可用区适用于 1.3 及更高 OpenSearch 版本，并且需要至少有三个可用区的区域。

当您将多可用区与备用区域配合使用时，S OpenSearch ervice 会跨三个可用区创建一个域，每个可用区都包含完整的数据副本，并且数据在每个区域中均匀分布。您的域让其中一个区中的节点处于待机状态，这意味着它们不响应搜索请求。当 S OpenSearch ervice 检测到底层基础设施出现故障时，它会在不到一分钟的时间内自动激活备用节点。域可以继续提供索引和搜索请求服务，而影响仅限于执行故障转移所耗费的时间。但不会对数据或资源进行重新分配，所以集群性能不会受到影响，而且也不会出现可用性下降的风险。带待机功能的多可用区完全免费。

您可以通过两种方式在 AWS 管理控制台上创建带有待机状态的域。首先，您可以使用 E **asy create 创建方法创建**域，然后 S OpenSearch ervice 将自动使用预先确定的配置，其中包括以下内容：
+ 三个可用区，其中一个可处于待机状态
+ 三个专用的主节点和数据节点
+ 已在域上启用自动调整
+ GP3 数据节点的存储

您也可以选择**标准创建**创建方法，然后选择**不带待机状态的域**作为部署选项。您可以自定义域，同时仍必需使用具有待机状态的域的关键功能，例如三个区和三个主节点。建议选择三倍（可用区数量）的数据节点数。

创建域后，您可以导航到域详细信息页面，然后在**集群配置**选项卡中，确认可用区下显示*带待机功能的 3-AZ*。

如果您在将现有域迁移到带待机功能的多可用区时遇到问题，请参阅故障排除指南中的[迁移到带待机功能的多可用区时出错](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/handling-errors.html#troubleshooting-multi-az-standby)。

### 限制
<a name="limitations"></a>

在设置带待机功能的多可用区的域时，请考虑以下限制：
+ 节点上的分片总数不能超过 1000，集群上的分片总数不能超过 75000，单个分片的大小不能超过 65 GB。
+ 带备用模式的多可用区仅适用`c5`于`m5``r5`、、`r6g`、`c6g`、`m6g`、`r6gd`、`r7g`、`c7g`、`m7g`、`r7gd`、和`i3`实例类型。有关所支持实例类型的更多信息，请参阅[支持的实例类型](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/supported-instance-types.html)。
+ 您只能使用预配置 IOPs SSD、通用型 SSD (GP3) 或带待机状态的实例备份存储。
+ 如果您在带有备用域的多可用区[UltraWarm](ultrawarm.md)上启用，则温节点的数量必须是正在使用的可用区数量的倍数。

## 不带待机功能的多可用区
<a name="managedomains-za-no-standby"></a>

OpenSearch 服务仍支持不带备用状态的多可用区，可用性高达 99.9%。节点分布在各个可用区中，可用性取决于可用区的数量和数据副本。而在带有待机功能的情况下，您必须按照最佳实践配置您的域，而在没有待机功能的情况下，您可以自己选择可用区、节点和副本的数量。除非您的现有工作流程会因创建带有待机功能的域而中断，否则我们不建议使用此选项。

如果您选择此选项，我们仍然建议您选择三个可用区，以保持对节点、磁盘和单可用区故障的弹性。发生故障时，集群会在剩余资源之间重新分配数据，以保持可用性和冗余。这种数据移动会增加集群的资源使用量，并可能对性能产生影响。如果集群的大小不正确，其可用性可能会降低，这在很大程度上违背了多可用区的目的。

配置未开启备用域的唯一方法 AWS 管理控制台 是选择**标准创建**方法，然后选择**不带备用状态的域**作为部署选项。

### 分片分配
<a name="shards"></a>

如果您启用不带待机功能的多可用区，则应该为集群中的每个索引创建至少一个副本。如果没有副本，S OpenSearch ervice 就无法将您的数据副本分发到其他可用区。幸运的是，所有索引的默认配置均为副本数量等于 1。如下图所示，S OpenSearch ervice 会尽最大努力将主分片及其对应的副本分片分配到不同的区域。

![\[Diagram showing three 可用区, each with primary and replica shards distributed across them.\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/images/za-3-az.png)


除了按可用区分配分片外，S OpenSearch ervice 还按节点分发分片。但是，某些域配置可能会导致分片计数不平衡。考虑以下域：
+ 5 个数据节点
+ 5 个主分片
+ 2 个副本
+ 3 个可用区

在这种情况下，S OpenSearch ervice 必须超载一个节点，才能将主分片和副本分片分布到各个区域，如下图所示。

![\[Diagram showing distribution of primary and replica shards across three availability zones.\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/images/za-3-az-imbal.png)


为避免这些可能导致单个节点紧张并损害性能的情况，如果您计划每个索引有两个或更多副本，建议您选择带待机功能的多可用区或一个为三的倍数的实例计数。

### 专用主节点分配
<a name="dm"></a>

即使您在配置域时选择了两个可用区，S OpenSearch ervice 也会自动在三个可用区之间分配[专用主节点](managedomains-dedicatedmasternodes.md)。此分发有助于在区域遇到服务中断时防止集群停机。如果您使用推荐的三个专用主节点并且一个可用区域关闭，则您的集群仍具有配额数量 (2) 的专用主节点，并且可以选择新的主节点。下图演示了此配置。

![\[Diagram showing distribution of primary and replica nodes across three 可用区.\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/images/za-2-az.png)


如果您选择三个可用区中不可用的较旧一代实例类型，则以下方案适用：
+ 如果您为域选择了三个可用区，则 OpenSearch 服务会引发错误。请选择其他实例类型，然后重试。
+ 如果您为域选择了两个可用区，S OpenSearch ervice 会将专用主节点分布在两个区域中。

## 可用区中断
<a name="managedomains-za-summary"></a>

可用区中断很少见，但仍会出现。下表列出了中断期间的不同多 AZ 配置和行为。表中的最后一行适用于带待机功能的多可用区，而所有其他行的配置仅适用于不带待机功能的多可用区。


| 一个区域中的可用区数量 | 您选择的可用区数量 | 专用主节点的数量 | 一个可用区遇到中断时的行为 | 
| --- | --- | --- | --- | 
| 2 或更多 | 2 | 0 |  停机时间。您的集群丢失了一半的数据节点，并且必须替换剩余可用区中的至少一个，然后才能选择主节点。  | 
| 2 | 2 | 3 |  停机几率为 50/50。 OpenSearch 服务将两个专用主节点分配到一个可用区，将一个分配到另一个可用区： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/managedomains-multiaz.html)  | 
| 3 或更多 | 2 | 3 |  没有停机时间。 OpenSearch Service 会自动将专用主节点分布到三个可用区，因此剩下的两个专用主节点可以选出一个主节点。  | 
| 3 或更多 | 3 | 0 |  无停机时间。大约三分之二的数据节点仍可用于选择主节点。  | 
| 3 或更多 | 3 | 3 |  无停机时间。其余两个专用主节点可以选择主节点。  | 

在*所有*配置中，无论原因如何，节点故障都可能导致集群的其余数据节点经历一段时间的负载增加，而 Ser OpenSearch vice 会自动配置新节点以替换现在缺少的节点。

例如，如果三区域配置中发生可用区中断，则三分之二的数据节点必须处理所有集群请求。当它们处理这些请求时，其余节点也会在新节点上线时将分片复制到新节点上，这可能会进一步影响性能。如果可用性对您的工作负载至关重要，请考虑向集群中添加资源以缓解此问题。

**注意**  
OpenSearch 服务以透明方式管理多可用区域，因此您无法手动模拟可用区中断。

# 在 VPC 内启动您的亚马逊 OpenSearch 服务域
<a name="vpc"></a>

您可以将诸如亚马逊 OpenSearch 服务域之类的 AWS 资源启动到*虚拟私有云* (VPC) 中。VPC 是专为您服务的虚拟网络 AWS 账户。它在逻辑上与 AWS 云中的其他虚拟网络隔离。在 VPC 中放置 OpenSearch 服务域可实现 OpenSearch 服务与 VPC 内的其他服务之间的安全通信，无需互联网网关、NAT 设备或 VPN 连接。所有流量都安全地保存在 AWS 云中。

**注意**  
如果您将 OpenSearch 服务域置于 VPC 内，则您的计算机必须能够连接到 VPC。此连接通常采用以下格式：VPN、过渡网关、托管网络或代理服务器。您无法从 VPC 外部访问您的域。

## VPC 与公有域对比
<a name="vpc-comparison"></a>

以下是 VPC 域与公有域不同的一些方式。每个差异都有更加详细的介绍。
+ 由于进行了逻辑隔离，与使用公共端点的域相比，驻留在 VPC 中的域有一层额外的安全性。
+ 虽然可以从任何连接互联网的设备访问公有域，但 VPC 域需要某种形式的 VPN 或代理服务器。
+ 与公共域相比，VPC 域在 控制台中显示的信息较少。具体而言，**集群运行状况**选项卡中不包含分片信息；不存在**索引**选项卡。
+ 域端点采用不同的形式（`https://search-domain-name` 与 `https://vpc-domain-name`)。
+ 您无法将基于IP的访问策略应用于驻留在 VPC 中的域，因为安全组已强制实施基于 IP 的访问策略。

## 限制
<a name="vpc-limitations"></a>

在 VPC 内运营 OpenSearch 服务域有以下限制：
+ 如果在 VPC 中启动了新域，以后就不能将其切换为使用公共终端节点。反过来也是如此：如果使用公共终端节点创建了域，则以后就不能将该域放入 VPC 中，您必须创建一个新的域，然后迁移数据。
+ 可以在 VPC 中启动域，也可以使用公共终端节点，但两者不能同时进行。在创建域时只能选择其一。
+ 您无法在使用专用租赁的 VPC 内启动您的域。您必须使用具有设置为 **Default** 的租赁的 VPC。
+ 将域放入 VPC 中之后，不能再将其移到其他 VPC 中，但可以更改子网和安全组设置。
+ 要访问位于 VPC 内的域的默认 OpenSearch 仪表板安装，用户必须有权访问该 VPC。此过程因网络配置而异，但可能涉及连接到 VPN 或托管网络或使用代理服务器或过渡网关。要了解更多信息，请参阅 [关于 VPC 域的访问策略](#vpc-security)，[Amazon VPC 用户指南](https://docs.aws.amazon.com/vpc/latest/userguide/)和 [控制对控制面板的访问](dashboards.md#dashboards-access)。

## 架构
<a name="vpc-architecture"></a>

为了提供支持 VPCs， OpenSearch 服务将终端节点放置在您的 VPC 的一个、两个或三个子网中。如果您为域启用[多个可用区](managedomains-multiaz.md)，则每个子网必须位于同一区域中的不同可用区中。如果您只使用一个可用区，S OpenSearch ervice 会将一个终端节点放入一个子网中。

下图显示了一个可用区的 VPC 架构。

![\[VPC architecture showing subnet with security group connecting to OpenSearch Service data nodes.\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/images/VPCNoZoneAwareness.png)


下图显示了两个可用区的 VPC 架构。

![\[VPC architecture with two 可用区, showing security groups, data nodes, and master nodes.\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/images/VPCZoneAwareness.png)


OpenSearch 服务还会在 VPC 中为您的每个数据节点放置一个*弹性网络接口* (ENI)。 OpenSearch 服务会根据您的子网地址范围为每个 ENI 分配一个私有 IP IPv4 地址。该服务还会分配这些 IP 地址的公有 DNS 主机名 (域终端节点)。您必须使用公共 DNS 服务将终端节点 (DNS 主机名) 解析为数据节点的相应 IP 地址：
+ 如果您的 VPC 通过将`enableDnsSupport`选项设置为`true`（默认值）来使用亚马逊提供的 DNS 服务器，则 OpenSearch 服务终端节点的解析将成功。
+ 如果您的 VPC 使用私有 DNS 服务器，并且该服务器可以访问公共权威 DNS 服务器来解析 DNS 主机名，则 OpenSearch 服务终端节点的解析也将成功。

因为 IP 地址可能会发生更改，所以您应定期解析域终端节点，以便可以始终访问正确的数据节点。我们建议您将 DNS 解析时间间隔设置为一分钟。如果您在使用客户端，还应确保客户端中的 DNS 缓存已清除。

### 从公有访问迁移到 VPC 访问
<a name="migrating-public-to-vpc"></a>

在创建域时，您会指定它是应该具有公共终端节点还是驻留在 VPC 中。一旦创建，就无法再切换，而只能创建一个新域，手动重建索引或迁移您的数据。快照提供了一种迁移数据的便捷方法。有关拍摄和还原快照的信息，请参阅[在 Amazon OpenSearch 服务中创建索引快照](managedomains-snapshots.md)。

### 关于 VPC 域的访问策略
<a name="vpc-security"></a>

将您的 OpenSearch 服务域置于 VPC 内可提供固有的强大安全层。使用公有访问权限创建域时，终端节点将采用以下形式：

```
https://search-domain-name-identifier.region.es.amazonaws.com
```

如“公有”标签所示，此终端节点可从任何连接 Internet 的设备访问，但您可以 (且应该) [控制对它的访问](ac.md)。如果您访问 Web 浏览器中的终端节点，您可能会收到一条 `Not Authorized` 消息，但请求将达到域。

当您使用 VPC 访问权限创建域时，终端节点*看起来* 类似于公有终端节点：

```
https://vpc-domain-name-identifier.region.es.amazonaws.com
```

但是，如果您尝试访问 Web 浏览器中的终端节点，您可能会发现请求超时。要执行更基本的 `GET` 请求，您的计算机必须能够连接到 VPC。此连接通常采用以下格式：VPN、过渡网关、托管网络或代理服务器。有关此连接可以采用的各种格式的详细信息，请参阅 *Amazon VPC 用户手册*中的 [VPC](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Scenarios.html) 示例。有关专注于开发的示例，请参阅 [测试 VPC 域](#vpc-test)。

除了此连接要求外，还 VPCs 允许您通过[安全组](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)管理对域的访问。对于许多使用案例，这种安全功能的组合方式已足够，并且您可能愿意将开放访问策略应用于域。

使用开放访问政策*并不*意味着互联网上的任何人都可以访问 OpenSearch 服务域。相反，这意味着如果请求到达 OpenSearch 服务域并且相关的安全组允许，则该域将接受该请求。唯一例外的情况是如果您使用细粒度访问控制或指定 IAM 角色的访问策略。在这些情况下，意味着要让域接受某个请求，安全组必须允许该请求*并且*必须使用有效凭证的签署该请求。

**注意**  
由于安全组已经强制执行基于 IP 的访问策略，因此您无法将基于 IP 的访问策略应用于 VPC 内的 OpenSearch 服务域。如果使用公有访问权限，则基于 IP 的策略仍可用。

### 开始之前：VPC 访问的先决条件
<a name="prerequisites-vpc-endpoints"></a>

在启用 VPC 与新 OpenSearch 服务域之间的连接之前，必须执行以下操作：
+ **创建 VPC**

  要创建您的 VPC，您可以使用 Amazon VPC 控制台、 AWS CLI 或其中一个 AWS SDKs。有关更多信息，请参阅 *Amazon VPC 用户指南 VPCs*中的[使用](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html)。如果您已有 VPC，请跳过此步骤。
+ **预留 IP 地址**

  OpenSearch 服务通过将网络接口放置在 VPC 的子网中来实现 VPC 与域的连接。每个网络接口都与一个 IP 地址关联。必须在子网中为网络接口预留足够数量的 IP 地址。有关更多信息，请参阅[在 VPC 子网中预留 IP 地址](#reserving-ip-vpc-endpoints)。

### 测试 VPC 域
<a name="vpc-test"></a>

VPC 增强的安全性可能会使连接到您的域并运行基本测试成为挑战。如果您已经拥有 OpenSearch 服务 VPC 域并且不想创建 VPN 服务器，请尝试以下过程：

1. 对于域的访问策略，请选择 **Only use fine-grained access control（仅使用精细访问控制）**。完成测试之后，您可以随时更新此设置。

1. 在与您的 OpenSearch 服务域相同的 VPC、子网和安全组中创建 Amazon Linux Amazon EC2 实例。

   由于此实例用于测试目的且需要做的工作非常少，因此请选择一种便宜的实例类型（如 `t2.micro`）。为此实例分配一个公有 IP 地址，并创建一个新的密钥对或选择一个现有的密钥对。如果您创建新的密钥，请将其下载到您的 `~/.ssh` 目录。

   要了解有关创建实例的更多信息，请参阅 [Amazon EC2 Linux 实例入门](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html)。

1. 将 [Internet 网关](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Internet_Gateway.html)添加到 VPC。

1. 在 VPC 的[路由表](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Route_Tables.html)中，添加新的路由。对于 **Destination (目的地)**，指定一个 [CIDR 块](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#IPv4_CIDR_blocks)，其中包含您的计算机的公有 IP 地址。对于 **Target (目标)**，请指定您刚刚创建的 Internet 网关。

   例如，您可能只为您的计算机指定 `123.123.123.123/32`，或者为一系列计算机指定 `123.123.123.0/24`。

1. 对于安全组，指定两条入站规则：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/vpc.html)

   第一条规则可让您的 SSH 连接到您的 EC2 实例。第二个允许 EC2 实例通过 HTTPS 与 OpenSearch 服务域通信。

1. 从终端运行以下命令：

   ```
   ssh -i ~/.ssh/your-key.pem ec2-user@your-ec2-instance-public-ip -N -L 9200:vpc-domain-name-identifier.region.es.amazonaws.com:443
   ```

   此命令创建一个 SSH 隧道，该隧道通过 EC2 实例将发送到 [https://localhost:9200](https://localhost:9200) 的请求转发到您的 OpenSearch 服务域。在命令中指定端口 9200 会模拟本地 OpenSearch 安装，但要使用任何你想要的端口。 OpenSearch 服务仅接受通过端口 80 (HTTP) 或 443 (HTTPS) 进行的连接。

   该命令不提供反馈并无限期运行。要停止此命令，请按 `Ctrl + C`。

1. 在你的网络浏览器中导航到 [https://localhost:9200/\$1dashboards/](https://localhost:9200/_plugin/kibana/)。您可能需要确认安全异常。

   或者，您可以使用 [https://localhost:9200](https://localhost:9200)curl[、](https://curl.haxx.se/)Postman[ 或您常用的编程语言将请求发送到 ](https://www.getpostman.com/)。
**提示**  
如果您由于证书不匹配而遇到 curl 错误，请尝试使用 `--insecure` 标记。

### 在 VPC 子网中预留 IP 地址
<a name="reserving-ip-vpc-endpoints"></a>

OpenSearch 服务通过将网络接口放置在 VPC（如果您启用多个[可用区](managedomains-multiaz.md)，则为 VPC 的多个子网）中放置网络接口，从而将域连接到 VPC。每个网络接口都与一个 IP 地址关联。在创建 OpenSearch 服务域之前，每个子网中必须有足够数量的 IP 地址来容纳网络接口。

以下是基本公式：S OpenSearch ervice 在每个子网中预留的 IP 地址数量等于数据节点数量的三倍除以可用区数量。

**示例**
+ 如果某个域在 3 个可用区中有 9 个数据节点，则每个子网的 IP 数为 9 \$1 3 / 3 = 9。
+ 如果某个域在 2 个可用区中有 8 个数据节点，则每个子网的 IP 数为 8 \$1 3 / 2 = 12。
+ 如果某个域在一个可用区中有 6 个数据节点，则每个子网的 IP 数为 6 \$1 3 / 1 = 18。

创建域时，S OpenSearch ervice 会保留 IP 地址，将一些 IP 地址用于域，其余的保留用于[蓝/绿](managedomains-configuration-changes.md)部署。您可以在 Amazon EC2 控制台的 **Network Interfaces** 部分看到网络接口及其相关的 IP 地址。**描述**列显示网络接口与哪个 OpenSearch 服务域相关联。

**提示**  
我们建议您为 OpenSearch 服务预留 IP 地址创建专用子网。通过使用专用子网，可以避免与其他应用程序和服务重叠，并确保在将来需要扩展集群时可以预留额外 IP 地址。要了解更多信息，请参阅[在 VPC 中创建子网](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#AddaSubnet)。

您也可以考虑配置专用的协调器节点，以减少您的 VPC 域所需的私有 IP 地址预留数量。 OpenSearch将弹性网络接口 (ENI) 附加到您的专用协调器节点，而不是您的数据节点。专用协调器节点数通常为总数据节点数的 10% 左右。这样就可以减少为 VPC 域保留的私有 IP 地址数量。

### VPC 访问的服务相关角色
<a name="enabling-slr"></a>

[服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)是一种独特的 IAM 角色类型，它将权限委派给服务，使之能够代表您创建和管理资源。 OpenSearch 服务需要服务相关角色才能访问您的 VPC、创建域终端节点以及将网络接口放置在您的 VPC 的子网中。

OpenSearch 当您使用服务控制台在 VPC 内创建域时， OpenSearch 服务会自动创建角色。为使这种自动创建成功，您必须具有 `iam:CreateServiceLinkedRole` 操作的权限。有关更多信息，请参阅 *IAM 用户指南*中的[服务相关角色权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions)。

 OpenSearch 服务创建角色后，您可以使用 IAM 控制台查看该角色 (`AWSServiceRoleForAmazonOpenSearchService`)。

有关此角色的权限以及如何删除它的完整信息，请参阅[在 Amazon OpenSearch 服务中使用服务相关角色](slr.md)。

# 在 Amazon OpenSearch 服务中创建索引快照
<a name="managedomains-snapshots"></a>

Amazon S OpenSearch ervice 中的快照是集群索引和状态的备份。*状态*包含集群设置、节点信息、索引设置和分片分配。

OpenSearch 服务快照有以下几种形式：
+ **自动快照**仅用于集群恢复。在发生红色群集状态或数据丢失时，您可以使用它们还原域。有关更多信息，请参阅下面的[恢复快照](managedomains-snapshot-restore.md)。 OpenSearch 该服务将自动快照存储在预配置的 Amazon S3 存储桶中，无需额外付费。
+ **手动快照**用于集群恢复*或者*将数据从一个集群移动到另一个集群。必须启动手动快照。这些快照将存储在您自己的 Amazon S3 存储桶中，收取标准 S3 费用。如果您有来自自管理 OpenSearch 集群的快照，则可以使用该快照迁移到 OpenSearch 服务域。有关更多信息，请参阅[迁移到 Amazon OpenSearch 服务](migration.md)。

所有 OpenSearch 服务域都会自动拍摄快照，但频率在以下方面有所不同：
+ 对于运行 OpenSearch 或 Elasticsearch 5.3 及更高版本的域名，S OpenSearch ervice 会按小时自动拍摄快照，并将其中最多 336 张快照保留 14 天。由于其增量性质，每小时快照的破坏性较小。如果出现域问题，它们还提供更新的恢复点。
+ 对于运行 Elasticsearch 5.1 及更早版本的域名，S OpenSearch ervice 会在您指定的时间内每天自动拍摄快照，最多保留 14 张快照，并且不会将任何快照数据保留超过 30 天。

如果您的集群进入红色状态，则所有自动快照都会失败，而集群状态仍然存在。如果您在两周内未解决问题，则可能会永久丢失集群内的数据。有关问题排查步骤，请参阅[红色集群状态](handling-errors.md#handling-errors-red-cluster-status)。

## 先决条件
<a name="managedomains-snapshot-prerequisites"></a>

要手动创建快照，您必须使用 IAM 和 Amazon S3。确保您已满足以下先决条件，然后再尝试创建快照。


****  

| 先决条件  | 说明 | 
| --- | --- | 
| S3 存储桶 | 创建 S3 存储桶来存储 OpenSearch 服务域的手动快照。有关说明，请参阅《Amazon Simple Storage Service 入门指南》** 中的[创建通用存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)。 记住要在以下位置使用它的存储桶名称：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/managedomains-snapshots.html)  请勿对此存储桶应用 Amazon Glacier 生命周期规则。手动快照不支持 Amazon Glacier 存储类别。  | 
| IAM 角色 | 创建 IAM 角色以向 OpenSearch 服务委派权限。有关说明，请参阅 *IAM 用户指南*中的[创建 IAM 角色（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html#roles-creatingrole-user-console)。本章剩余部分将此角色称为 `TheSnapshotRole`。 **附加 IAM policy** 将下面的策略附加到 `TheSnapshotRole` 以允许访问 S3 存储桶： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/managedomains-snapshots.html) 有关将策略附加到角色的说明，请参阅《IAM 用户指南》**中的[添加 IAM 身份权限（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console)。 **编辑信任关系** 编辑的信任关系`TheSnapshotRole`以在`Principal`语句中指定 S OpenSearch ervice，如以下示例所示： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/managedomains-snapshots.html) 有关编辑信任关系的说明，请参阅《IAM 用户指南》**中的[更新角色信任策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_update-role-trust-policy.html)。 | 
| Permissions |  要注册快照存储库，您需要能够传递`TheSnapshotRole`给 OpenSearch 服务。还需要对 `es:ESHttpPut` 操作的访问权限。要授予这两个权限，请将以下策略附加到 IAM 角色，该角色的凭据用于签署请求： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/managedomains-snapshots.html) 如果您的用户或角色没有 `iam:PassRole` 权限传递 `TheSnapshotRole`，在下一步骤中尝试注册存储库时，您可能会遇到以下常见错误： <pre>$ python register-repo.py<br />{"Message":"User: arn:aws:iam::123456789012:user/MyUserAccount<br />is not authorized to perform: iam:PassRole on resource:<br />arn:aws:iam::123456789012:role/TheSnapshotRole"}</pre>  | 

# 注册手动快照存储库
<a name="managedomains-snapshot-registerdirectory"></a>

您需要先向 S OpenSearch ervice 注册快照存储库，然后才能手动拍摄索引快照。此一次性操作要求您使用允许访问的凭据签署 AWS 请求`TheSnapshotRole`，如中所述[先决条件](managedomains-snapshots.md#managedomains-snapshot-prerequisites)。

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

注册存储库时，精细访问控制会引入额外的步骤。即使将 HTTP 基本身份验证用于所有其他目的，也需要将 `manage_snapshots` 角色映射到具有传递 `TheSnapshotRole` 的 `iam:PassRole` 权限的 IAM 角色。

1. 导航到您的 OpenSearch 服务域的 OpenSearch 仪表板插件。您可以在 OpenSearch 服务控制台的域控制面板上找到控制面板终端节点。

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

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

1. 添加具有传递 `TheSnapshotRole` 权限的角色的 ARN。将角色置 ARNs 于**后端角色**下。

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

1. 选择**映射**并确认在**映射的用户**下显示的用户或角色。

## 第 2 步：注册存储库
<a name="managedomains-snapshot-register"></a>

以下**快照**选项卡演示如何注册快照目录。有关在迁移到新域后加密手动快照和注册快照的特定选项，请参阅相关选项卡。

------
#### [ Snapshots ]

要注册快照存储库，请向 OpenSearch 服务域端点发送 PUT 请求。您可以使用 [curl](https://curl.se/docs/manpage.html#--aws-sigv4)、[示例 Python 客户端](#managedomains-snapshot-client-python)、[Postman](https://www.getpostman.com/) 或某种其他方式发送已签名请求以注册快照存储库。请注意，您不能在控制 OpenSearch 面板控制台中使用 PUT 请求来注册存储库。

 请求的格式如下：

```
PUT domain-endpoint/_snapshot/my-snapshot-repo-name
{
  "type": "s3",
  "settings": {
    "bucket": "amzn-s3-demo-bucket",
    "base_path": "my/snapshot/directory",
    "region": "region",
    "role_arn": "arn:aws:iam::123456789012:role/TheSnapshotRole"
  }
}
```

**注意**  
存储库名称不能以“cs-”开头。此外，您不应该从多个域写入同一个存储库。应该只有一个域具有对存储库的写入权限。

如果域位于某个 Virtual Private Cloud（VPC）中，则必须将您的电脑连接到该 VPC，请求才能成功注册快照存储库。访问 VPC 因网络配置而异，但很可能包括连接到 VPN 或企业网络。要检查您是否可以访问 OpenSearch 服务域，请在 Web 浏览器`https://your-vpc-domain.region.es.amazonaws.com`中导航到并验证您是否收到了默认 JSON 响应。

当您的 Amazon S3 存储桶位于 AWS 区域 其他 OpenSearch域中时，请将参数`"endpoint": "s3.amazonaws.com"`添加到请求中。

------
#### [ Encrypted snapshots ]

您目前无法使用 AWS Key Management Service (KMS) 密钥对手动快照进行加密，但您可以使用服务器端加密 (SSE) 对其进行保护。

要为您用作快照存储库的存储桶启用使用 S3 托管密钥的 SSE，请将 `"server_side_encryption": true` 添加到 PUT 请求 `"settings"` 数据块。有关更多信息，请参阅《Amazon Simple Storage Service 用户指南》**中的[使用 Amazon S3 托管式密钥服务器端加密（SSE-S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html)。

或者，您可以使用 AWS KMS 密钥对用作快照存储库的 S3 存储桶进行服务器端加密。如果您使用这种方法，请确保为用于加密 S3 存储桶的 AWS KMS 密钥提供`TheSnapshotRole`权限。有关更多信息，请参阅[AWS KMS中的密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)。

------
#### [ Domain migration ]

注册快照存储库是一次性操作。但要从一个域迁移到另一个域，您必须在旧域和新域中注册相同的快照存储库。存储库名称是任意的。

迁移到新域或使用多个域注册同一存储库时，请考虑以下准则：
+ 在新域中注册存储库时，将 `"readonly": true` 添加到`"settings"` PUT 请求数据库。此设置可防止您意外覆盖旧域中的数据。应该只有一个域具有对存储库的写入权限。
+ 如果您要将数据迁移到不同 AWS 区域中的域（例如，从位于 us-east-2 的旧域和存储桶迁移到 us-west-2 中的新域），请将 `"region": "region"` 替换为 PUT 语句中的 `"endpoint": "s3.amazonaws.com"`，然后重试请求。

------

### 使用示例 Python 客户端
<a name="managedomains-snapshot-client-python"></a>

Python 客户端比简单的 HTTP 请求更容易自动化，并且具有更好的可重用性。如果您选择使用此方法注册快照存储库，请将下面的示例 Python 代码保存为 Python 文件，如 `register-repo.py`。客户端需要 [适用于 Python (Boto3) 的 AWS SDK](https://aws.amazon.com/sdk-for-python/)、[requests](http://docs.python-requests.org/) 和 [requests-aws4auth](https://pypi.python.org/pypi/requests-aws4auth) 程序包。客户端包含其他快照操作的带注释示例。

更新示例代码中的以下变量：`host`、`region`、`path` 和 `payload`。

```
import boto3
import requests
from requests_aws4auth import AWS4Auth

host = '' # domain endpoint
region = '' # e.g. us-west-1
service = 'es'
credentials = boto3.Session().get_credentials()
awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token)

# Register repository

path = '/_snapshot/my-snapshot-repo-name' # the OpenSearch API endpoint
url = host + path

payload = {
  "type": "s3",
  "settings": {
    "bucket": "amzn-s3-demo-bucket",
    "base_path": "my/snapshot/directory",
    "region": "us-west-1",
    "role_arn": "arn:aws:iam::123456789012:role/snapshot-role"
  }
}

headers = {"Content-Type": "application/json"}

r = requests.put(url, auth=awsauth, json=payload, headers=headers)

print(r.status_code)
print(r.text)

# # Take snapshot
#
# path = '/_snapshot/my-snapshot-repo-name/my-snapshot'
# url = host + path
#
# r = requests.put(url, auth=awsauth)
#
# print(r.text)
#
# # Delete index
#
# path = 'my-index'
# url = host + path
#
# r = requests.delete(url, auth=awsauth)
#
# print(r.text)
#
# # Restore snapshot (all indexes except Dashboards and fine-grained access control)
#
# path = '/_snapshot/my-snapshot-repo-name/my-snapshot/_restore'
# url = host + path
#
# payload = {
#   "indices": "-.kibana*,-.opendistro_security,-.opendistro-*",
#   "include_global_state": False
# }
#
# headers = {"Content-Type": "application/json"}
#
# r = requests.post(url, auth=awsauth, json=payload, headers=headers)
#
# print(r.text)
# 
# # Restore snapshot (one index)
#
# path = '/_snapshot/my-snapshot-repo-name/my-snapshot/_restore'
# url = host + path
#
# payload = {"indices": "my-index"}
#
# headers = {"Content-Type": "application/json"}
#
# r = requests.post(url, auth=awsauth, json=payload, headers=headers)
#
# print(r.text)
```

# 手动创建快照
<a name="managedomains-snapshot-create"></a>

快照不是即时发生的。它们需要时间才能完成，并且不能代表集群的完美 point-in-time视图。当快照正在进行时，您仍可以对文档编制索引并对集群发出其他请求，但新文档（和对现有文档的更新）通常不包含在快照中。快照包括 OpenSearch 启动快照时存在的主分片。根据快照线程池的大小，快照中可能包含时间略有不同的不同分片。有关快照最佳实践，请参阅 [提高快照性能](bp.md#bp-stability-snapshots)。

**警告**  
手动快照不包括存储在 UltraWarm 或冷存储层中的数据。如果您的域使用 UltraWarm 或冷存储，如果您需要保留这些数据，请在拍摄手动快照之前将这些索引迁移到热存储。

## 快照存储和性能
<a name="managedomains-snapshot-storage"></a>

OpenSearch 快照是增量的，这意味着它们仅存储自上次成功快照以来更改的数据。此增量性质意味着频繁快照与不频繁快照之间的磁盘使用率差异通常极其小。换句话说，一周内每小时快照（总共 168 个快照）占用的磁盘空间比一周结束时的一个快照所占用的磁盘空间并不高多少。此外，拍摄快照的频率越高，完成快照所需的时间就更少。例如，每日快照可能需要 20-30 分钟才能完成，而每小时快照可能在几分钟内即可完成。有些 OpenSearch 用户每半小时拍摄一次快照。

## 拍摄快照
<a name="managedomains-snapshot-take"></a>

创建参数时，您需要指定以下信息：
+ 快照存储库的名称
+ 快照名称

为了方便和简洁起见，本章中的示例使用 [curl](https://curl.haxx.se/)，这是一种常见的 HTTP 客户端。要向 curl 请求传递用户名和密码，请参阅[入门教程](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/gsg.html)。

如果访问策略指定用户或角色，您必须签署快照请求。对于 curl，您可以在 7.75.0 或更高版本中使用 [`--aws-sigv4` 选项](https://curl.se/docs/manpage.html#--aws-sigv4)。您也可以使用[示例 Python 客户端](managedomains-snapshot-registerdirectory.md#managedomains-snapshot-client-python)中的带注释示例将签名 HTTP 请求置于 curl 命令使用的同一端点。

要制作手动快照，请执行以下步骤：

1. 如果当前正在制作快照，则您无法制作快照。要进行检查，请运行以下命令：

   ```
   curl -XGET 'domain-endpoint/_snapshot/_status'
   ```

1. 运行以下命令来手动创建快照：

   ```
   curl -XPUT 'domain-endpoint/_snapshot/repository-name/snapshot-name'
   ```

   要包括或排除某些索引并指定其他设置，请添加请求正文。有关请求结构，请参阅 OpenSearch 文档中的[拍摄快照](https://opensearch.org/docs/1.1/opensearch/snapshot-restore/#take-snapshots)。

**注意**  
拍摄快照所需的时间会随着 OpenSearch 服务域的大小而增加。长时间运行的快照操作有时会遇到以下错误：`504 GATEWAY_TIMEOUT`。通常情况下，您可以忽略这些错误并等待操作成功完成。运行以下命令验证您的域中所有快照的状态：  

```
curl -XGET 'domain-endpoint/_snapshot/repository-name/_all?pretty'
```

# 还原快照
<a name="managedomains-snapshot-restore"></a>

在恢复快照之前，请确保目标域不使用[带待机功能的多可用区](managedomains-multiaz.md#managedomains-za-standby)。启用待机状态会导致恢复操作失败。

**警告**  
如果您使用索引别名，应在删除别名的索引前停止向该别名写入请求（或将别名切换至其他索引）。停止写入请求有助于避免以下情景：  
您删除某个索引，同时会删除它的别名。
对于现已删除的别名的错误写入请求会创建一个与别名同名的新索引。
由于与新索引的命名冲突，您无法再使用别名。如果将别名切换到其他索引，请在从快照中还原时指定 `"include_aliases": false`。

还原快照

1. 确定要还原的快照。确保此索引的所有设置（例如，自定义分析器软件包或分配要求设置）均与域兼容。要查看所有快照存储库，请运行以下命令：

   ```
   curl -XGET 'domain-endpoint/_snapshot?pretty'
   ```

   在确定存储库后，您可以运行以下命令查看所有快照：

   ```
   curl -XGET 'domain-endpoint/_snapshot/repository-name/_all?pretty'
   ```
**注意**  
大多数自动快照存储在 `cs-automated` 存储库中。如果您的域对静态数据进行加密，这些快照将存储在 `cs-automated-enc` 存储库中。如果您没有看到要查找的手动快照存储库，请确保您已向域[注册](managedomains-snapshot-registerdirectory.md)该存储库。

1. （可选）如果群集上的索引与快照中的索引之间存在命名冲突，请删除或重命名 OpenSearch 服务域中的一个或多个索引。您无法将索引的快照还原到已包含同名索引的 OpenSearch 集群中。

   如果索引命名冲突，您可以使用以下选项：
   + 删除现有 OpenSearch 服务域上的索引，然后恢复快照。
   + 从快照还原索引时为其重命名，之后为它们重新编制索引。要了解如何重命名索引，请参阅 OpenSearch 文档中的[此示例请求](https://opensearch.org/docs/latest/api-reference/snapshots/restore-snapshot/#example-request)。
   + 将快照还原到不同的 OpenSearch 服务域（只能使用手动快照）。

   以下命令将删除域中的所有现有索引：

   ```
   curl -XDELETE 'domain-endpoint/_all'
   ```

   但是，如果您不打算还原所有索引，则可以仅删除一个索引：

   ```
   curl -XDELETE 'domain-endpoint/index-name'
   ```

1. 要还原快照，请运行以下命令：

   ```
   curl -XPOST 'domain-endpoint/_snapshot/repository-name/snapshot-name/_restore'
   ```

   由于 OpenSearch 仪表板上的特殊权限和精细的访问控制索引，尝试恢复所有索引可能会失败，尤其是在您尝试从自动快照还原时。以下示例通过 `my-index` 快照存储库中的 `2020-snapshot` 来只还原一个索引 `cs-automated`：

   ```
   curl -XPOST 'domain-endpoint/_snapshot/cs-automated/2020-snapshot/_restore' \
   -d '{"indices": "my-index"}' \
   -H 'Content-Type: application/json'
   ```

   您还可能需要还原*除*控制面板和精细访问控制索引以外的所有索引：

   ```
   curl -XPOST 'domain-endpoint/_snapshot/cs-automated/2020-snapshot/_restore' \
   -d '{"indices": "-.kibana*,-.opendistro*"}' \
   -H 'Content-Type: application/json'
   ```
**注意**  
根据您的 OpenSearch 版本，可能还需要排除其他系统索引，例如`-.opensearch-observability*`和`-.plugins-ml-config*`。如果目标域上已经存在这些索引，则恢复操作可能会失败。要将其排除在外，请将其添加到`indices`排除列表中。例如：`"indices": "-.kibana*,-.opendistro*,-.opensearch-observability*,-.plugins-ml-config*"`。

   使用 `rename_pattern` 和 `rename_replacement` 参数，即可在不删除快照数据的情况下恢复快照。有关这些参数的更多信息，请参阅 OpenSearch 文档中的恢复快照 API [请求字段](https://opensearch.org/docs/latest/api-reference/snapshots/restore-snapshot/#request-fields)[和示例请求](https://opensearch.org/docs/latest/api-reference/snapshots/restore-snapshot/#example-request)。

**注意**  
如果并非所有主分片都适用于涉及的索引，则快照的 `state` 可能为 `PARTIAL`。此值表示未成功存储至少一个分片中的数据。您仍可以从部分快照进行还原，但可能需要使用较旧的快照来还原任何缺失的索引。

## 删除手动快照
<a name="managedomains-snapshot-delete"></a>

要删除手动快照，运行下列命令：

```
DELETE _snapshot/repository-name/snapshot-name
```

# 使用快照管理自动处理快照
<a name="managedomains-snapshot-mgmt"></a>

您可以在 OpenSearch 控制面板中设置快照管理 (SM) 策略，以自动创建和删除定期快照。SM 可以为一组索引创建快照，而[索引状态管理](managedomains-snapshots.md#managedomains-snapshot-ism)只能为每个索引创建一个快照。要在 OpenSearch 服务中使用 SM，您需要注册自己的 Amazon S3 存储库。有关注册存储库的说明，请参阅[注册手动快照存储库](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/managedomains-snapshots.html#managedomains-snapshot-registerdirectory)。

**注意**  
从 2.5 OpenSearch 版开始支持快照管理。运行早期版本的域名不支持此功能。

在 SM 之前，S OpenSearch ervice 提供免费的自动快照功能，默认情况下该功能仍处于开启状态。此功能将快照发送到服务维护 `cs-*` 存储库。要停用此功能，请与 支持联系。

有关 SM 功能的更多信息，请参阅 OpenSearch 文档中的[快照管理](https://opensearch.org/docs/latest/dashboards/sm-dashboards/)。

SM 目前不支持基于多种索引类型创建快照。例如，如果尝试基于多个包含 `*` 的索引创建快照且部分索引位于[暖层](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/ultrawarm.html#ultrawarm-manual-snapshot)，则快照创建将失败。如果需要快照包含多种索引类型，请使用 [ISM 快照操作](https://opensearch.org/docs/latest/im-plugin/ism/policies/#snapshot)，直到 SM 支持此选项。

# 配置 权限
<a name="sm-security"></a>

如果您要从以前的 OpenSearch 服务域版本升级到 2.5，则可能无法在该域上定义快照管理安全权限。必须将非管理员用户映射到此角色，才能通过精细访问控制在域上使用快照管理。要手动创建快照管理角色，请执行下列步骤：

1. 在 “ OpenSearch 控制面板” 中，转至 “**安全**”，然后选择 “**权限**”。

1. 选择**创建操作组**并配置以下组：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/sm-security.html)

1. 选择**角色**和**创建角色**。

1. 将角色命名为 **snapshot\$1management\$1role**。

1. 对于**集群权限**，选择 `snapshot_management_full_access` 和 `snapshot_management_read_access`。

1. 选择**创建**。

1. 创建角色之后，[将其映射](fgac.md#fgac-mapping)到将管理快照的任何用户或后端角色。

## 注意事项
<a name="sm-considerations"></a>

配置快照管理时，请考虑以下事项：
+ 每个存储库允许使用一个策略。
+ 一个策略最多允许 400 个快照。
+ 如果域名处于红色状态、JVM 压力过高（85% 或以上）或快照功能卡住，则无法运行此功能。当集群的整体索引和搜索性能受到影响时，SM 也可能受到影响。
+ 只有完成上一个快照操作后才能开始下一个快照操作，因此无法通过一项策略激活并发快照操作。
+ 如果多个策略采用相同的计划，可能会导致资源激增。如果策略的快照索引重叠，则只能按顺序运行分片级别快照操作，因而可能引发级联性能问题。如果多个策略共享一个存储库，则该存储库的写入操作将激增。
+ 除非存在特殊用例，否则我们建议您将快照操作自动化时间间隔设置为每小时不超过一次。

## 使用索引状态管理自动执行快照
<a name="managedomains-snapshot-ism"></a>

您可以使用索引状态管理（ISM）[快照](https://opendistro.github.io/for-elasticsearch-docs/docs/im/ism/policies/#snapshot)操作，以根据索引的年龄、大小或文档数量的变化自动触发索引快照。如果需要为每个索引创建一个快照，ISM 是最佳选择。如果需要为一组索引创建快照，请参阅 [使用快照管理自动处理快照](managedomains-snapshot-mgmt.md)。

要在 OpenSearch 服务中使用 SM，您需要注册自己的 Amazon S3 存储库。有关使用`snapshot`操作的 ISM 示例，请参阅[示例策略](ism.md#ism-example)。

## 将 Curator 用于快照
<a name="managedomains-snapshot-curator"></a>

如果 ISM 不适用于索引和快照管理，则可以改用 Curator。它提供了高级筛选功能，可帮助简化复杂集群上的任务。使用 [pip](https://pip.pypa.io/en/stable/installing/) 安装 Curator：

```
pip install elasticsearch-curator
```

您可以使用 Curator 作为命令行界面 (CLI) 或 Python API。如果您使用 Python API，则必须使用旧式 [elasticsearch-py](https://elasticsearch-py.readthedocs.io/) 客户端的版本 7.13.4 或更早版本。它不支持 opensearch-py 客户端。

如果您使用 CLI，请在命令行处导出您的凭证并配置 `curator.yml`，如下所示：

```
client:
  hosts: search-my-domain.us-west-1.es.amazonaws.com
  port: 443
  use_ssl: True
  aws_region: us-west-1
  aws_sign_request: True
  ssl_no_validate: False
  timeout: 60

logging:
  loglevel: INFO
```

# 升级 Amazon OpenSearch Service 域
<a name="version-migration"></a>

**注意**  
OpenSearch 而且 Elasticsearch 版本升级不同于服务软件更新。有关更新服务域的服务软件的信息 OpenSearch ，请参阅[Amazon OpenSearch Service 中的服务软件更新](service-software.md)。

Amazon OpenSearch Service 为运行 OpenSearch 1.0 或更高版本，或者 Elasticsearch 5.1 或更高版本的域提供了就地升级。如果您使用诸如 Amazon Data Firehose 或 Amazon CloudWatch Logs 之类的 OpenSearch 服务将数据流式传输到服务，请在迁移 OpenSearch 之前检查这些服务是否支持较新版本的。

## 支持的升级途径
<a name="supported-upgrade-paths"></a>

目前， OpenSearch 服务支持以下升级路径：


| 之前版本 | 目标版本 | 
| --- | --- | 
| OpenSearch 1.3、2。 x，或 3。 x |  OpenSearch 3。 *x* 如果你运行的是 OpenSearch 1.3 或 2.x，则必须先升级到 OpenSearch 2.19，*然后再*升级到 OpenSearch 3.x。 从 OpenSearch 2.19 升级到 OpenSearch 3.x 时，可能需要解决以下不兼容的索引设置。这些索引设置在 2.x 之前的版本中就已弃用，如果不移除，会导致升级检查验证失败。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/version-migration.html) 有关已弃用的索引设置以及修复这些设置的步骤的更多信息，请参阅[索引设置](https://docs.opensearch.org/2.6/search-plugins/knn/knn-index/#index-settings)。有关 OpenSearch 3.x 重大更改的完整列表，请参阅 [3.](https://docs.opensearch.org/latest/breaking-changes/#300) 0.0。 如果您的域包含在 OpenSearch 1.3、Elasticsearch 7.10 或更早版本中创建的索引，则必须在升级到 3.x 之前对其重新编制索引。 OpenSearch OpenSearch 3.x 不支持这些较旧的索引，无论它们是在热存储还是冷存储 UltraWarm中。要重新编制不兼容索引 UltraWarm 或冷索引，请执行以下操作： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/version-migration.html) 或者，如果您不再需要索引，也可以将其删除。  | 
| OpenSearch 1.3 或 2。 x |  OpenSearch 2。 *x* OpenSearch 如果域满足以下条件，则默认情况下，2.17 将在自动模式下启用并行区段搜索： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/version-migration.html) 版本 2.3 具有以下重大更改： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/version-migration.html)  | 
| OpenSearch 1。 x | OpenSearch 1。 x | 
| Elasticsearch 7.x |  弹性搜索 7. *x* 或 OpenSearch 1。 *x*  OpenSearch 1。 *x* 引入了许多重大更改。有关更多信息，请参阅 [Amazon OpenSearch 服务重命名-变更摘要](rename.md)。   | 
|  Elasticsearch 6.8  |  弹性搜索 7. *x* 或 OpenSearch 1。 *x*  Elasticsearch 7.0 和 OpenSearch 1.0 包含许多重大更改。在启动就地升级之前，我们建议您[手动拍摄 6 的快照](managedomains-snapshots.md)。 *x* 域，在测试中将其恢复 7. *x* 或 OpenSearch 1。 *x* 域，并使用该测试域来识别潜在的升级问题。有关 OpenSearch 1.0 中的重大更改，请参阅[Amazon OpenSearch 服务重命名-变更摘要](rename.md)。 与 Elasticsearch 6.*x* 相似，索引只能包含一种映射类型，但该类型现在必须名为 `_doc`。因此，某些请求正文中 APIs 不再需要映射类型（例如 `_bulk` API）。 对于新索引，请使用自托管的 Elasticsearch 7。 *x* 和 OpenSearch 1。 *x* 的默认分片数为 1。 OpenSearch Elasticsearch 上的服务域 7. *x* 及更高版本保留之前的默认值 5。   | 
| Elasticsearch 6.*x* | Elasticsearch 6.*x* | 
| Elasticsearch 5.6 |  Elasticsearch 6.*x*  在版本 6.*x* 中创建的索引不再支持多个映射类型。在版本 5.*x* 中创建的索引在还原到 6.*x* 集群后仍然支持多个映射类型。请检查您的代码是否仅为每个索引创建一个映射类型。 尽量减少从 Elasticsearch 5.6 升级到 6 期间的停机时间。 *x，S* OpenSearch ervice 将索引重新索引到`.kibana-6``.kibana`、删除、创建名为的别名`.kibana`，并将新索引映射到新别名。`.kibana`   | 
| Elasticsearch 5.x | Elasticsearch 5.x | 

升级过程包括三个步骤：

1. **升级前检查** — OpenSearch 服务会检查是否存在可能阻碍升级的问题，除非这些检查成功，否则不会继续执行下一步操作。

1. **快照** — OpenSearch 服务会拍摄 OpenSearch 或 Elasticsearch 集群的快照，除非快照成功，否则不会继续执行下一步操作。如果升级失败， OpenSearch 服务将使用此快照将集群恢复到其原始状态。有关更多信息，请参阅 [升级后无法降级](handling-errors.md#troubleshooting-upgrade-snapshot)。

1. **升级**- OpenSearch 服务会启动升级，升级可能需要 15 分钟到几个小时才能完成。 OpenSearch 在部分或全部升级期间，仪表板可能不可用。

# 升级域（控制台）
<a name="starting-upgrades"></a>

升级过程是不可撤消的，并且无法暂停或取消。在升级过程中，您无法对域进行配置更改。在开始升级之前，请仔细确认您是否要继续。您可以使用这些相同步骤执行升级前检查而不实际开始升级。

如果集群有专用的主节点，则 OpenSearch 升级无需停机即可完成。否则，集群在选择主节点时可能会在升级后几秒钟无响应。

**将域名升级到更高版本 OpenSearch 或 Elasticsearch**

1. [创建您的域的手动快照](managedomains-snapshots.md)。此快照用作备份，如果您想[恢复使用先前 OpenSearch 版本，则可以在新域上恢复](managedomains-snapshot-restore.md)该快照。

1. 前往[https://aws.amazon.com](https://console.aws.amazon.com/)并选择 “**登录到控制台”**。

1. 在 “**分析**” 下，选择 “**亚马逊 OpenSearch 服务**”。

1. 在导航窗格中的 **Domains**（域）下，选择要升级的域。

1. 选择 **Actions（操作）**和 **Upgrade（升级）**。

1. 选择要升级到的版本。如果您要升级到某个 OpenSearch 版本，则会出现 “**启用兼容模式**” 选项。如果您启用此设置，则将其版本 OpenSearch 报告为 7.10，以允许 Elasticsearch OSS 客户端和 Logstash 等插件继续使用亚马逊服务。 OpenSearch 可以稍后禁用此设置

1. 选择 **Upgrade**。

1. 检查域控制面板上的 **Status（状态）**以监控升级的状态。

# 升级域（CLI）
<a name="starting-upgrades-cli"></a>

您可以使用以下操作为您的域识别 OpenSearch 或 Elasticsearch 的正确版本、开始就地升级、执行升级前检查并查看进度：
+ `get-compatible-versions` (`GetCompatibleVersions`)
+ `upgrade-domain` (`UpgradeDomain`)
+ `get-upgrade-status` (`GetUpgradeStatus`)
+ `get-upgrade-history` (`GetUpgradeHistory`)

有关更多信息，请参阅 [AWS CLI 命令参考](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/opensearch/index.html)和[亚马逊 OpenSearch 服务 API 参考](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/Welcome.html)。

# 升级域（SDK）
<a name="starting-upgrades-sdk"></a>

此示例使用中的[OpenSearchService](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/opensearch.html)低级 Python 客户端 AWS SDK for Python (Boto) 来检查域是否有资格升级到特定版本，对其进行升级，并持续检查升级状态。

```
import boto3
from botocore.config import Config
import time

# Build the client using the default credential configuration.
# You can use the CLI and run 'aws configure' to set access key, secret
# key, and default Region.

DOMAIN_NAME = ''  # The name of the domain to upgrade
TARGET_VERSION = ''  # The version you want to upgrade the domain to. For example, OpenSearch_1.1

my_config = Config(
    # Optionally lets you specify a Region other than your default.
    region_name='us-east-1'
)
client = boto3.client('opensearch', config=my_config)


def check_versions():
    """Determine whether domain is eligible for upgrade"""
    response = client.get_compatible_versions(
        DomainName=DOMAIN_NAME
    )
    compatible_versions = response['CompatibleVersions']
    for i in range(len(compatible_versions)):
        if TARGET_VERSION in compatible_versions[i]["TargetVersions"]:
            print('Domain is eligible for upgrade to ' + TARGET_VERSION)
            upgrade_domain()
            print(response)
        else:
            print('Domain not eligible for upgrade to ' + TARGET_VERSION)


def upgrade_domain():
    """Upgrades the domain"""
    response = client.upgrade_domain(
        DomainName=DOMAIN_NAME,
        TargetVersion=TARGET_VERSION
    )
    print('Upgrading domain to ' + TARGET_VERSION + '...' + response)
    time.sleep(5)
    wait_for_upgrade()


def wait_for_upgrade():
    """Get the status of the upgrade"""
    response = client.get_upgrade_status(
        DomainName=DOMAIN_NAME
    )
    if (response['UpgradeStep']) == 'UPGRADE' and (response['StepStatus']) == 'SUCCEEDED':
        print('Domain successfully upgraded to ' + TARGET_VERSION)
    elif (response['StepStatus']) == 'FAILED':
        print('Upgrade failed. Please try again.')
    elif (response['StepStatus']) == 'SUCCEEDED_WITH_ISSUES':
        print('Upgrade succeeded with issues')
    elif (response['StepStatus']) == 'IN_PROGRESS':
        time.sleep(30)
        wait_for_upgrade()


def main():
    check_versions()


if __name__ == "__main__":
    main()
```

## 对验证失败进行故障排除
<a name="upgrade-validation"></a>

当您启动 OpenSearch 或 Elasticsearch 版本升级时， OpenSearch 服务会首先执行一系列验证检查，以确保您的域名符合升级条件。如果其中任何一项检查失败，您将收到通知，其中包含在升级域之前必须修复的特定问题。有关潜在问题及其解决步骤的列表，请参阅 [对验证错误进行故障排除](managedomains-configuration-changes.md#validation)。

## 排查升级问题
<a name="upgrade-failures"></a>

就地 升级需要正常运行的域。您的域可能不符合升级条件或出于各种原因无法升级。下表显示了最常见的问题。


| 问题 | 说明 | 
| --- | --- | 
| 不支持可选插件 |  当您使用可选插件升级域名时，S OpenSearch ervice 也会自动升级插件。因此，您的域的目标版本还必须支持这些可选插件。如果域安装了目标版本不可用的可选插件，则升级请求将失败。  | 
| 一个节点的分片过多 | OpenSearch，以及 7。 x 个版本的 Elasticsearch，其默认设置为每个节点不超过 1,000 个分片。如果您当前集群中的某个节点超过此设置，则 OpenSearch 服务将不允许您升级。有关问题排查选项，请参阅[超过最大分片限制](handling-errors.md#troubleshooting-shard-limit)。 | 
| 域正在处理中 | 域正在接受配置更改。在操作完成后检查升级资格。 | 
| 红色集群状态 | 集群中的一个或多个索引为红色。有关问题排查步骤，请参阅[红色集群状态](handling-errors.md#handling-errors-red-cluster-status)。 | 
| 高错误率 | 在尝试处理请求时，集群返回大量 5xx 错误。此问题通常是因为同时读取或写入了过多的请求。请考虑减少流向集群的流量或扩展您的域。 | 
| 裂脑 | 脑裂意味着您的集群有多个主节点并且已拆分成两个绝不会自行重新联接的集群。您可以通过使用推荐数量的[专用主节点](managedomains-dedicatedmasternodes.md)避免裂脑。为了帮助您从裂脑恢复，请联系 [支持](https://console.aws.amazon.com/support/home)。 | 
| 找不到主节点 | OpenSearch 服务找不到集群的主节点。如果您的域使用了[多 AZ](managedomains-multiaz.md)，一个可用区故障可能已导致集群失去仲裁节点数且无法选择新的[主节点](managedomains-dedicatedmasternodes.md)。如果该问题无法自行解决，请联系 [支持](https://console.aws.amazon.com/support/home)。 | 
| 待处理任务过多 | 主节点处于高负载状态，且具有很多待处理任务。请考虑减少流向集群的流量或扩展您的域。 | 
| 存储卷受损 | 一个或多个节点的磁盘卷无法正常运行。此问题通常与其他问题一起发生，例如高错误率或待处理任务过多。如果它是独立发生的且无法自行解决，请联系 [支持](https://console.aws.amazon.com/support/home)。 | 
| KMS 密钥问题 | 用于加密域的 KMS 密钥无法访问或丢失。有关更多信息，请参阅 [监控对静态数据进行加密的域](encryption-at-rest.md#monitoring-ear)。 | 
| 快照拍摄正在进行中 | 域当前正在拍摄快照。在快照拍摄完成后检查升级资格。还要检查您是否可以列出手动快照存储库，在这些存储库中列出快照，并拍摄手动快照。如果 OpenSearch 服务无法检查快照是否正在进行中，则升级可能会失败。 | 
| 快照拍摄超时或失败 | 升级前快照拍摄所需的时间过长或失败。检查集群运行状况并重试。如果问题仍存在，请联系 [支持](https://console.aws.amazon.com/support/home)。 | 
| 索引不兼容 | 一个或多个索引与目标版本不兼容。如果您从旧版本 OpenSearch 或 Elasticsearch 迁移索引，则可能会出现此问题。重建索引并重试。 | 
| 高磁盘使用率 | 集群的磁盘使用率高于 90%。删除数据或扩展域，然后重试。 | 
| 高 JVM 使用率 | JVM 内存压力高于 75%。减少流向集群的流量或扩展域，然后重试。 | 
| OpenSearch 仪表板别名问题 | .dashboards已配置为别名并映射到不兼容的索引，可能来自早期版本的 Dashboard OpenSearch s。重建索引，然后重试。 | 
| 红色控制面板状态 | OpenSearch 仪表板状态为红色。尝试在升级完成时使用控制面板。如果红色状态仍然存在，请手动解决该问题，然后重试。 | 
| 跨集群兼容性 |  仅当升级之后源域与目标域之间保持跨集群兼容性时，才能升级。在升级过程中，会识别任何不兼容的连接。要继续，请删除远程域或删除不兼容的连接。请注意，如果域上的复制处于活动状态，则在删除连接后无法恢复复制。  | 
| 其他 OpenSearch 服务服务问题 |  OpenSearch 服务本身的问题可能会导致您的域名显示为不符合升级资格。如果上述情况都不适用于您的域且该问题持续超过一天，请联系 [支持](https://console.aws.amazon.com/support/home)。 | 

# 使用快照迁移数据
<a name="snapshot-based-migration"></a>

就地升级是将域名升级到更高版本 OpenSearch 或 Elasticsearch 版本的更简单、更快速、更可靠的方法。如果您需要从 5.1 之前的 Elasticsearch 版本迁移或想要迁移到全新的集群，那么快照是一个很好的选择。

下表显示了如何使用快照将数据迁移到使用不同版本 OpenSearch 或 Elasticsearch 版本的域中。有关制作和还原快照的更多信息，请参阅[在 Amazon OpenSearch 服务中创建索引快照](managedomains-snapshots.md)。


| 之前版本 | 目标版本 | 迁移过程 | 
| --- | --- | --- | 
| OpenSearch 1.3 或 2。 x | OpenSearch 2。 x |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/snapshot-based-migration.html)  | 
| OpenSearch 1。 x | OpenSearch 1。 x |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/snapshot-based-migration.html)  | 
| Elasticsearch 6.x 或 7.x | OpenSearch 1。 x |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/snapshot-based-migration.html)  | 
| Elasticsearch 6.x | Elasticsearch 7.x |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/snapshot-based-migration.html)  | 
| Elasticsearch 6.x | Elasticsearch 6.8 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/snapshot-based-migration.html)  | 
| Elasticsearch 5.x | Elasticsearch 6.x |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/snapshot-based-migration.html)  | 
| Elasticsearch 5.x | Elasticsearch 5.6 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/snapshot-based-migration.html)  | 
| Elasticsearch 2.3 | Elasticsearch 6.x |  Elasticsearch 2.3 快照与 6.*x* 不兼容。要将您的数据直接从 2.3 迁移到 6.*x*，则必须在新域中手动重新创建您的索引。 或者，您也可以执行本表中从 2.3 迁移到 5.*x* 的步骤，在新的 5.*x* 域中执行 `_reindex` 操作以将 2.3 索引转换为 5.*x* 索引，然后执行从 5.*x* 迁移到 6.*x* 的步骤。  | 
| Elasticsearch 2.3 | Elasticsearch 5.x |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/snapshot-based-migration.html)  | 
| Elasticsearch | Elasticsearch 5.x |  1.5 快照与 5.*x* 不兼容。要将您的数据从 1.5 迁移到 5.*x*，则必须在新域中手动重新创建您的索引。  1.5 快照*与* 2.3 兼容，但 OpenSearch 服务 2.3 域不支持该`_reindex`操作。由于您无法为它们重新编制索引，因此 1.5 域中发出的索引仍无法从 2.3 快照还原到 5.*x* 域。   | 
| Elasticsearch | Elasticsearch 2.3 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/snapshot-based-migration.html)  | 

# 为亚马逊 OpenSearch 服务创建自定义终端节点
<a name="customendpoint"></a>

为您的 Amazon S OpenSearch ervice 域创建自定义终端节点可让您更轻松地参考 OpenSearch 和 OpenSearch 控制面板 URLs。你可以加入贵公司的品牌，也可以只使用比标准 easier-to-remember端点更短的端点。

如果您需要切换到新域，只需更新 DNS 以指向新 URL 并继续使用与之前相同的端点即可。

您可以通过在 AWS Certificate Manager (ACM) 中生成证书或导入自己的证书来保护自定义终端节点。

## 新域的自定义端点
<a name="customize-endpoint"></a>

您可以使用服务控制台或配置 API 为新的 OpenSearch OpenSearch 服务域启用自定义终端节点。 AWS CLI

**要自定义端点（控制台）**

1. 在 OpenSearch 服务控制台中，选择**创建域**并提供该域的名称。

1. 在**自定义端点**下方，选择**启用自定义端点**。

1. 适用于**自定义主机名**中，输入首选的自定义端点主机名。主机名应为完全限定域名（FQDN），例如 www.yourdomain.com 或者例如 example.yourdomain.com。
**注意**  
如果您没有[通配符证书](https://en.wikipedia.org/wiki/Wildcard_certificate)，则可能需要为自定义端点的子域获取新证书。

1. 对于 **AWS 证书**，选择要用于您的域的 SSL 证书。如果没有可用的证书，则可以将证书导入 ACM 或使用 ACM 预配证书。有关更多信息，请参阅 *AWS Certificate Manager 用户指南*中的[发布和管理证书](https://docs.aws.amazon.com/acm/latest/userguide/gs.html)。
**注意**  
证书必须具有自定义终端节点名称，并且必须与您的 OpenSearch 服务域位于同一个账户中。证书状态应该为“ISSUED”。
   + 请按照接下来的步骤创建您的域，然后选择**创建**。
   + 完成处理后，选择域以查看您的自定义终端节点。

   要使用 CLI 或配置 API，请使用 `CreateDomain` 和 `UpdateDomainConfig` 运算符。有关更多信息，请参阅[AWS CLI 命令参考](https://docs.aws.amazon.com/cli/latest/reference/)和[亚马逊 OpenSearch 服务 API 参考](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/Welcome.html)。

## 现有域的自定义终端节点
<a name="enable-disable-custom-endpoint"></a>

要向现有 OpenSearch 服务域添加自定义终端节点，请选择**编辑**并执行上述步骤 2-4。

## CNAME 映射
<a name="customize-endpoint-next-steps"></a>

为 OpenSearch 服务域启用自定义终端节点后，您可以在 Amazon Route 53（或您的首选 DNS 服务提供商）中创建别名记录映射。创建 CNAME 映射将使您能够将流量路由到自定义端点及其子域。如果没有此映射，您无法将流量路由到自定义端点。有关在 Route 53 中创建此映射的步骤，请参阅[为新域配置 DNS 路由](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-configuring-new-domain.html)和[为子域创建新的托管区](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-routing-traffic-for-subdomains.html#dns-routing-traffic-for-subdomains-creating-hosted-zone)。对于其他提供商，请参考其文档。

创建将自定义端点指向自动生成的域端点的 CNAME 记录。如果您的域是双堆栈，则可以将 CNAME 记录指向两个服务生成的端点中的任何一个。自定义端点的双栈功能取决于 CNAME 记录指向的服务生成端点。自定义端点主机名是 CNAME 记录的*名称*，域端点主机名是 CNAME 记录的*值*。

如果您[对 OpenSearch仪表板使用 SAML 身份验证](saml.md)，则必须使用新的 SSO 网址更新您的 IdP。

您可以使用 Amazon Route 53 创建别名记录类型，以将域的自定义端点指向某个双栈搜索端点。要创建别名记录类型，必须将域配置为使用双栈 IP 地址类型。您可以使用 Route 53 API 来执行此操作。

要使用 Route 53 API 创建别名记录类型，请指定域的别名目标。您可以在 OpenSearch 服务控制台的自定义终端节点部分的**托管区域（双堆栈）**字段中找到您的域的别名目标，也可以使用 `DescribeDomain` API 并复制的值`DomainEndpointV2HostedZoneId`。

# Amazon OpenSearch 服务自动调整
<a name="auto-tune"></a>

Amazon S OpenSearch ervice 中的 Auto-Tune 使用 OpenSearch 集群中的性能和使用率指标来建议与内存相关的配置更改，包括队列和缓存大小以及节点上的 Java 虚拟机 (JVM) 设置。这些可选更改可提高集群速度和稳定性。

一些更改会立即部署，另一些更改则安排在域的非高峰时段部署。您可以随时恢复到默认的 OpenSearch 服务设置。当 Auto-Tune 收集和分析您的域的性能指标时，您可以在 OpenSearch 服务控制台的 “**通知**” 页面上查看其建议。

[自动调整可在运行任何 OpenSearch版本或 Elasticsearch 6.7 或更高版本且实例类型支持的域名 AWS 区域 上以商业形式提供。](supported-instance-types.md)

## 更改类型
<a name="auto-tune-types"></a>

自动调整有两大类更改：
+ 集群运行时应用的无中断更改。
+ 需要[蓝绿部署](managedomains-configuration-changes.md)的更改将在域的非高峰时段应用。

根据您域的性能指标，“自动调整”可以建议对以下设置进行调整：


| 更改类型 | 类别 | 说明 | 
| --- | --- | --- | 
|  JVM 堆大小  |  蓝/绿  |  默认情况下， OpenSearch 服务将实例 RAM 的 50% 用于 JVM 堆，堆大小不超过 32 GiB。 增加此百分比可 OpenSearch 获得更多内存，但留给操作系统和其他进程的内存却更少。较大的值可以减少垃圾回收暂停的数量，但会增加这些暂停的长度。  | 
|  JVM 年轻一代设置  |  蓝/绿  |  JVM“年轻一代”设置会影响次要垃圾收集的频率。更频繁的次要收集可以减少主要收集和暂停的次数。  | 
|  队列大小  |  无中断  |  默认情况下，搜索队列大小为 `1000`，写入队列大小为 `10000`。如果有其他堆可用于处理请求，则自动调整会自动缩放搜索和写入队列。  | 
|  缓存大小  |  无中断  |  *字段缓存*监控堆上的数据结构，因此监控缓存的使用非常重要。自动调整可调整字段数据高速缓存大小，以避免内存不足和断路器问题。 这些区域有：*分片请求缓存*在节点级别进行管理，并且默认的最大大小为堆的 1%。自动调整可扩展分片请求高速缓存大小，以接受比配置的集群能够处理的更多搜索和索引请求。  | 
| 请求大小 | 无中断 |  默认情况下，当运行中请求的总大小超过 JVM 总量的 10%（实例类型为 2%，`t2`实例类型为 1%`t3.small`）时，会 OpenSearch 限制所有新`_bulk`请求`_search`和请求，直到现有请求完成。 自动调整将会根据系统上当前占用的 JVM 量自动调整此阈值，通常在 5-15％ 之间。例如，如果 JVM 内存压力大，则自动调整可能会将阈值降至 5％，此时，您可能会看到更多拒绝，直到集群稳定和阈值提高。  | 

# 启用或禁用自动调整
<a name="auto-tune-enable"></a>

OpenSearch 默认情况下，服务在新域上启用自动调整。要在现有域上启用或禁用自动调整，我们建议使用控制台，这简化了过程。启用自动调整不会导致 blue/green 部署。

您目前无法使用 AWS CloudFormation启用或禁用自动调整。

## 控制台
<a name="auto-tune-enable-console"></a>

**对现有域启用自动调整**

1. 在[https://console.aws.amazon.com/aos/家](https://console.aws.amazon.com/aos/home )中打开亚马逊 OpenSearch 服务控制台。

1. 在导航窗格中的**域**下，选择域名以打开集群配置。

1. 如果尚未启用自动调整，请选择**启用**。

1. （可选）选择**非高峰时段**，以安排需要在域配置的非高峰时段进行 blue/green 部署的优化。有关更多信息，请参阅 [计划自动调整增强功能](auto-tune-schedule.md)。

1. 选择**保存更改**。

## CLI
<a name="auto-tune-enable-cli"></a>

要使用启用自动调整 AWS CLI，[UpdateDomainConfig](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/API_UpdateDomainConfig.html)请发送请求：

```
aws opensearch update-domain-config \
  --domain-name my-domain \
  --auto-tune-options DesiredState=ENABLED
```

# 计划自动调整增强功能
<a name="auto-tune-schedule"></a>

在 2023 年 2 月 16 日之前，Auto-Tune 使用*维护窗口*来安排需要 blue/green 部署的更改。现在已弃用维护时段，取而代之的是[非高峰时段](off-peak.md)，即每天域流量通常较低的 10 小时时段。您可以修改非高峰时段的默认开始时间，但不能修改长度。

在 2023 年 2 月 16 日推出非高峰时段之前启用自动调整维护时段的所有域均可继续沿用旧版无间断维护时段。但是，我们建议您迁移现有域，改用非高峰时段进行域维护。有关说明，请参阅[从自动调整维护窗口迁移](off-peak.md#off-peak-migrate)。

## 控制台
<a name="auto-tune-schedule-console"></a>

**计划在非高峰时段执行自动调整操作**

1. 在[https://console.aws.amazon.com/aos/家](https://console.aws.amazon.com/aos/home )中打开亚马逊 OpenSearch 服务控制台。

1. 在导航窗格中的**域**下，选择域名以打开集群配置。

1. 转到**自动调整**选项卡，选择**编辑**。

1. 如果尚未启用自动调整，请选择**启用**。

1. 在**计划在非高峰时段执行优化**下，选择**非高峰时段**。

1. 选择**保存更改**。

## CLI
<a name="auto-tune-schedule-cli"></a>

要将您的域配置为在配置的非高峰时段内安排自动调整操作，请在请求`UseOffPeakWindow`中[UpdateDomainConfig](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/API_UpdateDomainConfig.html)包括：

```
aws opensearch update-domain-config \
  --domain-name my-domain \
  --auto-tune-options DesiredState=ENABLED,UseOffPeakWindow=true,MaintenanceSchedules=null
```

## 监控自动调整更改
<a name="auto-tune-monitor"></a>

您可以在 Amazon CloudWatch中监控自动调整统计数据。有关指标的完整列表，请参阅[自动调整指标](managedomains-cloudwatchmetrics.md#managedomains-cloudwatchmetrics-autotune-metrics)。

OpenSearch 服务向 Amazon EventBridge 发送自动调整事件。您可以使用配置规则， EventBridge 以便在收到事件时发送电子邮件或执行特定操作。要查看发送到的每个 Auto-Tune 事件的格式 EventBridge，请参阅[自动调整事件](monitoring-events.md#monitoring-events-autotune)。

# 为 Amazon OpenSearch 服务域名添加标签
<a name="managedomains-awsresourcetagging"></a>

标签允许您将任意信息分配给 Amazon S OpenSearch ervice 域，这样您就可以对这些信息进行分类和筛选。标签是您定义并与 OpenSearch 服务域关联的键值对。您可以使用这些标签通过对标签相似的资源的费用进行分组来跟踪成本。 AWS 不会对你的标签应用任何语义含义。标签严格按字符串进行解释。所有标签均包含以下元素：


| 标签元素 | 说明 | 必填 | 
| --- | --- | --- | 
| 标签键 |  标签键是标签的名称。密钥必须是与其关联的 OpenSearch 服务域所独有的。有关对标签键和值的基本限制的列表，请参阅[用户定义的标签限制](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/allocation-tag-restrictions.html)。  | 是 | 
| 标签值 |  标签值则是标签字符串值。标签值可为 `null`，且在标签集中不必具有唯一性。例如，您可以在标签集中使用键值对。project/Trinity and cost-center/Trinity有关对标签键和值的基本限制的列表，请参阅[用户定义的标签限制](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/allocation-tag-restrictions.html)。  | 否 | 

每个 OpenSearch 服务域都有一个标签集，其中包含分配给该 OpenSearch 服务域的所有标签。 AWS 不会自动为 OpenSearch 服务域分配任何标签。标签集可以包含 0 到 50 个标签。如果使用与现有标记相同的键向域添加标记，则新值将覆盖旧值。

## 标签示例
<a name="managedomains-awsresourcetagging-examples"></a>

您可以使用密钥定义类别，而值作为该类别中的项目。例如，您可以将标签键定义为`project`，标签值为`Salix`，表示 OpenSearch 服务域已分配给 Salix 项目。您也可以使用诸如或之类的密钥使用标签将 OpenSearch 服务域指定为用于测试`environment=test`或生产`environment=production`。尝试使用一组一致的标签密钥，以便更轻松地跟踪与 OpenSearch 服务域关联的元数据。

您还可以使用标签来整理 AWS 账单，以反映您自己的成本结构。为此，请注册以获取包含标签键值的 AWS 账户 账单。然后，如需查看组合资源的成本，请按有同样标签键值的资源组织您的账单信息。例如，您可以使用键值对标记多个 OpenSearch 服务域，然后整理账单信息以查看多个服务中每个域的总费用。有关更多信息，请参阅 [https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html) 账单和成本管理*文档中的AWS 使用成本分配标签*。

**注意**  
对标签进行缓存以用于授权。因此，在 OpenSearch 服务域上添加和更新标签可能需要几分钟才能发布。

# 标记域（控制台）
<a name="managedomains-awsresourcetagging-console"></a>

控制台是标记域的最简单方法。

****创建标签（控制台）****

1. 转到 [https://aws.amazon.com](https://aws.amazon.com/ )，然后选择 **Sign In to the Console (登录控制台)**。

1. 在 “**分析**” 下，选择 “**亚马逊 OpenSearch 服务**”。

1. 选择您要将标签添加到的域，然后转到 **Tags（标签）**选项卡。

1. 选择 **Manage（管理）**和 **Add new tag（添加新标签）**。

1. 输入一个标签键和可选的值。

1. 选择**保存**。

要删除标签，请按照相同步骤操作并在 **Manage tags（管理标签）**页面中选择 **Remove（删除）**。

有关使用控制台处理标签的更多信息，请参阅《AWS 管理控制台入门指南》**中的[标签编辑器](https://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/tag-editor.html)。

# 标记域（AWS CLI）
<a name="managedomains-awsresourcetagging-cli"></a>

您可以使用 AWS CLI 带**--add-tags**命令的创建资源标签。

**语法**

`add-tags --arn=<domain_arn> --tag-list Key=<key>,Value=<value>`


****  

| 参数 | 说明 | 
| --- | --- | 
| --arn | 附加标签的 OpenSearch 服务域的 Amazon 资源名称。 | 
| --tag-list | 采用以下格式设置空格分隔的键值对：Key=<key>,Value=<value> | 

**示例**

以下示例为 *logs* 域创建两个标签：

```
aws opensearch add-tags --arn arn:aws:es:us-east-1:379931976431:domain/logs --tag-list Key=service,Value=OpenSearch Key=instances,Value=m3.2xlarge
```

您可以使用**--remove-tags**命令从 OpenSearch 服务域中移除标签。

**语法**

`remove-tags --arn=<domain_arn> --tag-keys Key=<key>,Value=<value>`


****  

| 参数 | 说明 | 
| --- | --- | 
| --arn | 附加标签的 OpenSearch 服务域的亚马逊资源名称 (ARN)。 | 
| --tag-keys | 要从服务域中移除的一组以空格分隔的键值对。 OpenSearch  | 

**示例**

以下示例从之前示例中创建的 *logs* 域中删除两个标签：

```
aws opensearch remove-tags --arn arn:aws:es:us-east-1:379931976431:domain/logs --tag-keys service instances
```

您可以使用以下**--list-tags**命令查看 OpenSearch 服务域的现有标签：

**语法**

`list-tags --arn=<domain_arn>`


****  

| 参数 | 说明 | 
| --- | --- | 
| --arn | 附加标签的 OpenSearch 服务域的亚马逊资源名称 (ARN)。 | 

**示例**

以下示例列出了 *logs* 域的所有资源标签：

```
aws opensearch list-tags --arn arn:aws:es:us-east-1:379931976431:domain/logs
```

# 标记域（AWS SDKs）
<a name="managedomains-awsresourcetagging-sdk"></a>

 AWS SDKs （Android 和 iOS 除外 SDKs）支持《[亚马逊 OpenSearch 服务 API 参考](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/Welcome.html)》中定义的所有操作，包括`AddTags``ListTags`、和`RemoveTags`操作。有关安装和使用的更多信息 AWS SDKs，请参阅[AWS 软件开发套件](https://aws.amazon.com/code)。

## **Python**
<a name="pythonsample"></a>

此示例使用适用于 Python 的 AWS 开发工具包 (Boto) 中的[OpenSearchService](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/opensearch.html)低级 Python 客户端向域添加标签，列出附加到该域的标签，并从域中移除标签。必须提供 `DOMAIN_ARN`、`TAG_KEY` 和 `TAG_VALUE` 的值。

```
import boto3
from botocore.config import Config  # import configuration

DOMAIN_ARN = ''  # ARN for the domain. i.e "arn:aws:es:us-east-1:123456789012:domain/my-domain
TAG_KEY = ''  # The name of the tag key. i.e 'Smileyface'
TAG_VALUE = ''  # The value assigned to the tag. i.e 'Practicetag'

# defines the configurations parameters such as region

my_config = Config(region_name='us-east-1')
client = boto3.client('opensearch', config=my_config)


# defines the client variable

def addTags():
    """Adds tags to the domain"""

    response = client.add_tags(ARN=DOMAIN_ARN,
                               TagList=[{'Key': TAG_KEY,
                                         'Value': TAG_VALUE}])

    print(response)


def listTags():
    """List tags that have been added to the domain"""

    response = client.list_tags(ARN=DOMAIN_ARN)
    print(response)


def removeTags():
    """Remove tags that have been added to the domain"""

    response = client.remove_tags(ARN=DOMAIN_ARN, TagKeys=[TAG_KEY])

    print('Tag removed')
    return response
```

# 对 Amazon OpenSearch 服务域名执行管理操作
<a name="admin-options"></a>

如果您需要解决域名问题，Amazon Ser OpenSearch vice 提供了多种管理选项，这些选项可提供精细控制。这些选项包括在数据节点上重新启动 OpenSearch 进程的能力和重新启动数据节点的能力。

OpenSearch 服务监控节点运行状况参数，并在出现异常时采取纠正措施以保持域稳定。通过在节点上重新启动 OpenSearch进程和重新启动节点本身的管理选项，您可以控制其中一些缓解措施。

您可以使用 AWS 管理控制台 AWS CLI、或 AWS SDK 来执行这些操作。以下各节介绍如何使用控制台执行这些操作。

# 在 Amazon OpenSearch 服务中的节点上重新启动该 OpenSearch 进程
<a name="restart-process"></a>

**在节点上重新启动 OpenSearch 进程**

1. 导航到 OpenSearch 服务控制台，网址为[https://console.aws.amazon.com/aos/](https://console.aws.amazon.com/aos/)。

1. 在左侧导航窗格中，选择 **域**。选择要使用的域的名称。

1. 打开域的详细信息页面后，导航至**实例运行状况**选项卡。

1. 在**数据节点**下，选择要重启流程的节点旁边的按钮。

1. 选择 “**操作**” 下拉列表并选择 “**重新启动 OpenSearch/Elasticsearch 进程**”。

1. 在模态上选择**确认**。

1. 要查看您启动的操作的状态，请选择节点的名称。打开节点详细信息页面后，选择节点名称下方的**事件**选项卡，查看与该节点关联的事件列表。

# 在 Amazon 服务中重启数据节点 OpenSearch
<a name="restart-node"></a>

**要重启数据节点**

1. 导航到 OpenSearch 服务控制台，网址为[https://console.aws.amazon.com/aos/](https://console.aws.amazon.com/aos/)。

1. 在左侧导航窗格中，选择 **域**。选择要使用的域的名称。

1. 打开域的详细信息页面后，导航至**实例运行状况**选项卡。

1. 在**数据节点**下，选择要重启流程的节点旁边的按钮。

1. 选择**操作**下拉列表，然后选择**重启节点**。

1. 在模态上选择**确认**。

1. 要查看您启动的操作的状态，请选择节点的名称。打开节点详细信息页面后，选择节点名称下方的**事件**选项卡，查看与该节点关联的事件列表。

# 在 Amazon OpenSearch 服务中的节点上重新启动 OpenSearch 控制面板流程
<a name="restart-dashboards"></a>

您可以重新启动 OpenSearch 仪表板（以前是 Kibana）进程，以从界面冻结、加载失败或可视化效果无响应等问题中恢复。重启 OpenSearch 仪表板的选项仅适用于正在积极运行仪表板进程的节点。在大多数 OpenSearch 服务域中，此过程在专用的协调器节点上运行，而不是在数据节点上运行。因此，在控制台中打开**操作**下拉菜单时，该选项通常仅对协调器节点显示。有关更多信息，请参阅 [Amazon OpenSearch 服务中的专用协调器节点](Dedicated-coordinator-nodes.md)。

这种行为取决于域的配置方式。
+ **带专用协调器节点的域**：控制面板流程仅在这些节点上运行，且仅这些节点显示重启选项。
+ **没有专用协调器节点的域**：在更简单或更早期的设置中，控制面板可能改为在数据节点上运行，重启选项会出现在该节点。
+ **主节点**：这些节点仅用于管理集群状态和选举过程。这些节点不会运行控制面板，也从不显示重启选项。

要确定哪个节点正在运行控制面板流程，请导航到域的**集群配置**部分并查看节点角色。重启选项仅适用于托管控制面板流程的节点。

**要重启节点上的控制面板流程**

1. 导航到 OpenSearch 服务控制台，网址为[https://console.aws.amazon.com/aos/](https://console.aws.amazon.com/aos/)。

1. 在左侧导航窗格中，选择 **域**。选择要使用的域的名称。

1. 打开域的详细信息页面后，导航至**实例运行状况**选项卡。

1. 在运行控制面板流程的节点部分，选择您希望重启该流程的节点旁边的按钮。

1. 选择 “**操作**” 下拉列表并选择 “**重新启动 Dashboard/Kibana 进程**”。

1. 在模态上选择**确认**。

1. 要查看您启动的操作的状态，请选择节点的名称。打开节点详细信息页面后，选择节点名称下方的**事件**选项卡，查看与该节点关联的事件列表。

## 限制
<a name="admin-limitations"></a>

管理选项具有以下限制：
+ Elasticsearch 7.x 及更高版本支持管理选项。
+ 管理选项不支持启用了带待机功能的多可用区的域。
+ 具有三个或更多数据节点的域支持重启 OpenSearch 和 Elasticsearch 进程以及重启数据节点。
+ 在具有两个或更多数据节点的域上，支持控制面板和 Kibana 流程。
+ 要在节点上重新启动 OpenSearch 进程或重新启动节点，该域不得处于红色状态，并且所有索引都必须配置副本。