

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

# 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 天后进行更新。计划更新时，将收到控制台通知，您可以选择重新安排在未来的某个日期执行更新。

要启用自动软件更新，请在创建或更新域时选择**启用自动软件更新**。要使用配置相同的设置 Amazon 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>

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

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

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

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

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

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

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

1. 选择**确认**。

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

发送启动服务软件更新的[start-service-software-update](https://docs.amazonaws.cn/cli/latest/reference/opensearch/start-service-software-update.html) Amazon 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`状态的持续时间可能会有很大差异，这取决于您 Amazon Web Services 区域 和 OpenSearch 服务正在执行的并发更新的数量。要取消更新，请使用控制台或`cancel-service-software-update` Amazon CLI 命令。

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

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

此示例 Python 脚本使用中的 d [escribe\_domain](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/opensearch.html#OpenSearchService.Client.describe_domain) 和 [start\_service\_software\_update 方法 适用于 Python (Boto3) 的 Amazon 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.amazonaws.cn/aos/home )中打开亚马逊 OpenSearch 服务控制台。

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

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

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

1. 选择**确认**。

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

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

要使用在即将到来的非高峰时段安排更新 Amazon CLI，请发送[StartServiceSoftwareUpdate](https://docs.amazonaws.cn/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)避免裂脑。为了帮助您从裂脑恢复，请联系 [Amazon Web Services 支持](https://console.amazonaws.cn/support/home)。 | 
| Amazon Cognito 集成问题 | 您的域名[对 OpenSearch 控制面板使用身份验证](cognito-auth.md)， OpenSearch 服务找不到一个或多个 Amazon Cognito 资源。如果缺少 Amazon Cognito 用户池，则通常会出现此问题。要更正此问题，请重新创建缺失的资源并配置 OpenSearch 服务域以使用该资源。 | 
| 其他 服务问题 |  OpenSearch 服务本身的问题可能会导致您的域名显示为不符合更新条件。如果上述情况都不适用于您的域且该问题持续超过一天，请联系 [Amazon Web Services 支持](https://console.amazonaws.cn/support/home)。 | 

## 回滚服务软件更新
<a name="service-software-rollback"></a>

Amazon OpenSearch 服务支持回滚服务软件更新。您可以使用 OpenSearch 服务控制台 Amazon CLI、或其中一个启动回滚。 Amazon SDKs使用 blue/green 部署回滚软件更新。

**注意**  
只有在 2026 年 4 月 24 日当天或之后应用的服务软件更新才支持回滚。引擎版本升级无法回滚。

### 回滚资格和注意事项
<a name="service-software-rollback-eligibility"></a>

您的域名必须满足以下所有条件才能进行回滚：
+ **域处于活动状态**-域必须处于`Active`状态。当配置更改、软件更新或其他 blue/green 部署正在进行时，回滚不可用。
+ **在回滚时间窗口内**-软件更新必须在允许的回滚期限内应用。请参阅[回滚时间窗口](#service-software-rollback-windows)。
+ **更新后不更改配置**-如果在应用软件更新后对域进行了配置更改，则会阻止回滚。配置更改可能会以与先前软件版本不兼容的方式影响域设置。例如，在更新后更改实例类型、启用副本或调整存储设置将阻止回滚。
+ **服务未自动应用更新** — 如果您未在 30 天的可用性窗口内对强制更新采取行动，并且 OpenSearch 服务部门自动应用了更新，则该更新无法使用回滚功能。
+ **更新不是引擎版本升级** — 引擎版本更改（例如，从 OpenSearch 1.3 升级到 OpenSearch 2.11）是不可逆的。仅支持服务软件版本回滚。
+ **存在以前的软件版本** — 回滚仅适用于此功能正式推出后应用的软件更新 (GA)。自 GA 以来尚未进行软件更新的域名没有以前的版本可供回滚。
+ **每次更新只允许回滚一**次 — 回滚完成后，该域被视为处于回滚状态。在成功应用新的软件更新之前，您无法再次回滚。
+ **软件更新是明确启动**的 — 只有当软件更新由您明确启动或由 OpenSearch 服务作为强制或可选更新的一部分自动安排时，才可使用回滚功能。在以下情况下，回滚不可用：
  + 软件更新是在配置更改触发的 blue/green 部署期间应用的。这包括启用该`UseLatestServiceSoftwareForBlueGreen`设置的情况，该设置将最新的软件更新与配置更改捆绑在一起。您可以选择禁用此设置。
  + 此更新是在服务启动的域名维护操作期间应用的，例如基础设施恢复、自动修复或 OpenSearch 服务为维护域的运行状况和可用性而执行的其他内部操作。

### 回滚时间窗口
<a name="service-software-rollback-windows"></a>

回滚窗口取决于所应用的软件更新的类型。


| 更新类型 | 回滚窗口 | 注意 | 
| --- | --- | --- | 
| 可选 | 自应用更新之日起 15 天 | 无论您是手动应用更新、计划更新还是在非高峰时段自动应用更新，均适用。 | 
| 强制性 | 自应用更新之日起 15 天 | 仅当您在 30 天的可用性窗口内自行应用更新时才可用。如果服务在截止日期之后自动应用更新，则无法进行回滚。 | 

回滚窗口到期后，自助服务回滚将不再可用。[Amazon Web Services 支持](https://console.amazonaws.cn/support/home)如果您在窗口关闭后遇到严重问题，请与联系。

### 如何申请回滚
<a name="service-software-rollback-requesting"></a>

您可以使用 `RollbackServiceSoftwareUpdate` API 请求回滚。

#### 请求
<a name="service-software-rollback-request"></a>

```
POST /2021-01-01/opensearch/serviceSoftwareUpdate/rollback
```

请求正文：

```
{
    "DomainName": "{{your-domain-name}}"
}
```

#### 响应
<a name="service-software-rollback-response"></a>

在所有非错误情况下，API 都会返回 HTTP 200 响应。响应正文中的`RollbackAvailable`字段表示回滚是否已启动。

```
{
    "RollbackServiceSoftwareOptions": {
        "CurrentVersion": "string",
        "NewVersion": "string",
        "RollbackAvailable": boolean,
        "Description": "string"
    }
}
```

响应字段：


| 字段 | Type | 说明 | 
| --- | --- | --- | 
| CurrentVersion | 字符串 | 域中当前运行的软件版本。 | 
| NewVersion | 字符串 | 域名将回滚到的软件版本。如果回滚不可用，则返回 null。 | 
| RollbackAvailable | 布尔值 | `true`如果已成功启动回滚。 `false`如果该域不符合回滚资格。 | 
| Description | 字符串 | 描述回滚结果或原因的人类可读消息不可用。 | 

#### 错误响应
<a name="service-software-rollback-errors"></a>


| 错误 | 说明 | 
| --- | --- | 
| ResourceNotFoundException | 指定的域不存在。 | 
| ValidationException | 该域未处于活动状态。请等待所有正在进行的更改完成后再重试。 | 
| InternalException |  服务遇到了内部错误。重试请求。 | 
| DisabledOperationException | 此域不支持回滚操作。 | 

#### 回复消息
<a name="service-software-rollback-messages"></a>

下表描述了 `RollbackServiceSoftwareUpdate` API 可能返回的响应消息。


| 案例 | 说明 | 
| --- | --- | 
| 成功 | 已成功启动回滚。该域将从回滚{{current-version}}到{{previous-version}}。 | 
| 功能未启用 | 回滚不可用。如[Amazon Web Services 支持](https://console.amazonaws.cn/support/home)需帮助，请联系。 | 
| 以前的软件不可用 | 没有以前的软件版本可供回滚。如[Amazon Web Services 支持](https://console.amazonaws.cn/support/home)需帮助，请联系。 | 
| 以前的软件与当前的软件相同 | 回滚不可用。没有以前的软件版本可供回滚。如[Amazon Web Services 支持](https://console.amazonaws.cn/support/home)需帮助，请联系。 | 
| 域名已回滚 | 域已处于回滚状态。 | 
| 集群已使用固定的软件版本 | 软件覆盖当前已应用于该域。 | 
| 在时间窗口之外 | 回滚不可用。15 天的回滚窗口已过期。如[Amazon Web Services 支持](https://console.amazonaws.cn/support/home)需帮助，请联系。 | 
| 自动应用强制服务更新 | 回滚不可用。当前版本是通过强制性服务更新应用的。如[Amazon Web Services 支持](https://console.amazonaws.cn/support/home)需帮助，请联系。 | 
| 引擎版本升级 | 回滚不可用。引擎版本升级是不可逆的。如[Amazon Web Services 支持](https://console.amazonaws.cn/support/home)需帮助，请联系。 | 
| 更新后配置已更改 | 回滚不可用。自上次软件更新以来，群集配置已更改。如[Amazon Web Services 支持](https://console.amazonaws.cn/support/home)需帮助，请联系。 | 

**示例响应：**

```
{
    "RollbackServiceSoftwareOptions": {
        "CurrentVersion": "OpenSearch_2_11_R20240115",
        "NewVersion": "OpenSearch_2_11_R20231023",
        "RollbackAvailable": true,
        "Description": "Rollback initiated successfully. The domain will be rolled back from OpenSearch_2_11_R20240115 to OpenSearch_2_11_R20231023."
    }
}
```

如果回滚不可用，`RollbackAvailable`则会返回`false`，该`Description`字段包含上表中的原因。