

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

# 自动修补 SAP HANA
<a name="automated-patching"></a>

维护 SAP HANA 数据库软件版本，可使数据库使用支持的软件版本正常运行，并使您能够随时了解安全修复和软件改进的最新信息。

本节提供有关使用 S AWS ystems Manager 自动更新 SAP HANA 数据库软件版本的信息。您必须非常了解 SAP HANA 的修补流程、路径和先决条件。除了 SAP HANA 之外，您还必须使用支持 SAP 的版本使 SAP 系统的所有其他组件保持更新。

**Topics**
+ [SAP 参考](#sap-references)
+ [架构](#architecture-patching)
+ [先决条件](#prerequisites)
+ [SSM 自动化文档](#ssm-automation-document)
+ [AWS 服务](#services-patching)
+ [准备运行 SSM 自动化文档](#preparations)
+ [故障排除](#troubleshoot-patching)
+ [SAP HANA 版本报告](#version-reporting)

## SAP 参考
<a name="sap-references"></a>

建议您熟悉以下 SAP 文档，以便了解 SAP HANA 的修补流程、路径和先决条件。

您必须具备 SAP 门户访问权限，才能查看 SAP Note。
+ SAP Note：[2115815 - FAQ: SAP HANA Database Patches and Upgrades](https://me.sap.com/notes/2115815) 
+ SAP Note：[1948334 - SAP HANA Database Update Paths for SAP HANA Maintenance Revisions](https://me.sap.com/notes/1948334) 
+ SAP Note：[2378962 - SAP HANA 2.0 Revision and Maintenance Strategy](https://me.sap.com/notes/2378962) 
+ 《SAP HANA Master Guide》：[Updating an SAP HANA System Landscape](https://help.sap.com/docs/SAP_HANA_PLATFORM/eb3777d5495d46c5b2fa773206bbfb46/e396b93cbb571014a319bfdf7fb84638.html) 

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

根据您的治理策略，您可以将 AWS SSM 自动化文档集中到共享服务帐户或自动化帐户中。有关更多信息，请参阅[基础设施 OU - 共享服务账户](https://docs.aws.amazon.com/prescriptive-guidance/latest/security-reference-architecture/shared-services.html)。

本文档使用共享服务账户。 AWS SSM 自动化文档存储在此帐户中。它与托管运行 SAP HANA 工作负载的 Amazon EC2 实例的子 AWS 账户相关联。共享服务账户还托管 Amazon S3 存储桶，其中包含 SAP HANA 媒体软件和存储在 S AWS ecrets Manager 中的特定参数。这些参数是运行自动化文档必需的参数。

自动化账户可以是运行 SAP 工作负载的生产账户，也可以是仅用于运行 SSM 自动化文档的专用账户。用于自动化的共享服务账户通过在同一个账户中维护自动化文档及其依赖关系来减少管理开销。

![\[与托管运行 SAP HANA 工作负载的 Amazon EC2 实例的子账户关联的自动化账户示意图。\]](http://docs.aws.amazon.com/zh_cn/sap/latest/sap-hana/images/automated-patching-architecture.jpg)


## 先决条件
<a name="prerequisites"></a>
+ 您必须在共享服务账户以及关联的子账户中设置 IAM 权限。这是为了让 S AWS ystems Manager 能够将自动化文档从共享服务帐户运行到关联的帐户。有关更多信息，请参阅[在多个 AWS 区域和账户中运行自动化](https://docs.aws.amazon.com/systems-manager/latest/userguide/running-automations-multiple-accounts-regions.html)。
+ 您必须将运行 SAP 工作负载的 Amazon EC2 实例设置为由 S AWS ystems Manager 进行管理。有关更多信息，请参阅[在适用于 Linux 的 Amazon EC2 实例上使用 SSM Agent](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-install-ssm-agent.html)。

## SSM 自动化文档
<a name="ssm-automation-document"></a>

您可以在[AWS 示例](https://github.com/aws-samples) GitHub 存储库中找到 SSM 自动化文档的代码。有关更多信息，请参阅 [sap-hana-patch-sample.yml。](https://github.com/aws-samples/sap-automated-hana-patching/blob/main/sap-hana-patch-sample.yml)下图展示了 SSM 自动化文档所执行的步骤。

![\[SSM 自动化文档执行的步骤示意图。\]](http://docs.aws.amazon.com/zh_cn/sap/latest/sap-hana/images/ssm-automation-steps.jpg)


## AWS 服务
<a name="services-patching"></a>

示例代码与以下 AWS 服务交互以运行 SSM 自动化文档。

**Topics**
+ [Amazon S3](#services-s3)
+ [Amazon EC2](#services-ec2)
+ [AWS Identity and Access Management](#services-iam)
+ [AWS Secrets Manager](#services-secrets-manager)
+ [AWS 密钥管理服务](#services-kms)

### Amazon S3
<a name="services-s3"></a>

您可以通过以下三个选项来存储 SAP HANA 软件媒体。
+ 将 Amazon EBS 卷挂载到您的 Amazon EC2 实例。
+ NFS 挂载点 — 亚马逊 EFS 或 FSx 适用于 ONTAP 的 NetApp 亚马逊
+ 亚马逊 S3 存储桶

Amazon S3 存储桶可用于存储包含不同版本的所有 SAP HANA 软件媒体。可以从此处选择要在 SSM 自动化文档中使用的目标软件版本。

将 SAP 媒体存储在压缩的 `0SAR` 文件中。如果选择从 Amazon S3 下载 SAP HANA 媒体，SSM 自动化文档就会从该文件中提取信息。

存储桶可以驻留在共享服务账户中，并且可以与所有运行 SAP HANA 工作负载的 AWS 账户共享。下表提供了 Amazon S3 中 SAP HANA 软件媒体的示例结构。


|  |  |  |  |  | 
| --- |--- |--- |--- |--- |
|   **软件**   |   **版本**   |   **修订**   |   **补丁**   |   **Amazon S3 路径**   | 
|  SAP HANA 数据库软件  |  2  |  SP04  |  48  |  S3://<Your SAP software bucket>linuxx86/hanadb/2.0/ /48 SP04  | 
|  SAP HANA 数据库软件  |  2  |  SP05  |  59  |  S3://<Your SAP software bucket>linuxx86/hanadb/2.0/ /59 SP05  | 
|  SAP HANA 数据库软件  |  2  |  SP05  |  59.5  |  S3://<Your SAP software bucket>linuxx86/hanadb/2.0/ /59 SP05 p5  | 
|  SAP HANA 数据库软件  |  2  |  SP06  |  60  |  S3://<Your SAP software bucket>linuxx86/hanadb/2.0/ /60 SP06  | 
|  SAP HANA 数据库软件  |  2  |  SP06  |  64  |  S3://<Your SAP software bucket>linuxx86/hanadb/2.0/ /64 SP06  | 

 **Amazon S3 存储桶策略** 

包含 SAP HANA 软件媒体的 Amazon S3 存储桶必须可供所有 AWS 账户中运行 SAP HANA 工作负载的亚马逊 EC2 实例访问。使用 Amazon S3 存储桶策略，仅向特定的授权实体授予对 Amazon S3 存储桶及其内容的有限访问权限。有关更多信息，请参阅以下文档。
+  [Amazon S3 中的策略和权限](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-policy-language-overview.html) 
+  [Amazon S3 的安全最佳实践](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html) 

以下策略是 Amazon S3 存储桶策略示例，该策略可授权特定账户的特定角色从 Amazon S3 存储桶下载所有文件。

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:role/service-role/{ec2_role}"
            },
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::{bucket_name}/*",
                "arn:aws:s3:::{bucket_name}"
            ]
        }
    ]
}
```

 **专用 Linux 文件系统** 

如果 SAP HANA 数据库软件存储在 Amazon S3 存储桶中，则会将其下载到 Amazon EC2 上的本地 Linux 目录中。将 SAP HANA 软件媒体文件从 Amazon S3 存储桶下载到本地 Linux 目录时，建议至少留有 30 GB 的可用空间。目录路径必须在 SSM 自动化文档的输入参数中指定，如下图所示。

![\[用于 ONTAP 的 SAP HANA 工作负载的横向扩展环境示意图 FSx 。\]](http://docs.aws.amazon.com/zh_cn/sap/latest/sap-hana/images/ssm-automation-document.jpg)


这些文件必须位于 Amazon EC2 实例上的指定目录中。必须根据 AWS SSM 自动化文档代码，将文件解压并按以下结构存储。

```
/{{HanaUpgradeBaseDir}}/x-sap-lnx-patch-hanadb/{{HANADBVersion}}/SAP_HANA_DATABASE/
```

SSM 自动化文档完成 SAP HANA 数据库更新后，下载的文件将从本地目录中删除。

### Amazon EC2
<a name="services-ec2"></a>

运行 SAP HANA 工作负载的 Amazon EC2 实例需要两个标签，才能支持 SSM 自动化文档代码。有关更多信息，请参阅[标记 Amazon EC2 资源](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html)。

`DBSid:{SID}`和`HanaPatchGroup:{Usage}`标签可由 S AWS ecrets Manager 访问。这两个标签均在 arc [架构](#architecture-patching)中进行了描述。

该`HanaPatchGroup`标签用于筛选从 SAP HANA 数据库用户的 S AWS ecrets Manager 检索到的不同亚马逊资源名称 (ARNs)。下面是 `HanaPatchGroup` 标签值的示例。

```
DBSid = HDB
HanaPatchGroup = DEV
HanaPatchGroup = QAS
HanaPatchGroup = PRD
HanaPatchGroup = SBX
```

您可以根据要执行 SAP HANA 更新过程的数据库用户的用户和密码管理策略自定义标签。

### AWS Identity and Access Management
<a name="services-iam"></a>

 AWS Systems Manager 必须能够管理运行 SAP HANA 工作负载的 Amazon EC2 实例。有关更多信息，请参阅[为 Systems Manager 创建 IAM 实例配置文件](https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html)。

如果您的 SAP HANA 数据库实例是通过 La AWS unch Wizard for SAP 配置的，则此权限将包含在部署中。有关更多信息，请参阅 [AWS Launch Wizard for SAP](https://docs.aws.amazon.com/launchwizard/latest/userguide/launch-wizard-sap.html)。

### AWS Secrets Manager
<a name="services-secrets-manager"></a>

 AWS Secrets Manager 用于存储运行 SSM 自动化文档所需的 SAP HANA 数据库参数。 AWS Secrets Manager 允许在多个账户之间共享密钥。有了这种灵活性，您就可以在一个位置和代码之外管理参数。

在不同账户之间共享密钥需要额外的权限。如需了解更多信息，请参阅[如何在 AWS 账户之间共享 S AWS ecrets Manager 密钥？](https://repost.aws/knowledge-center/secrets-manager-share-between-accounts) 

下表显示了在共享服务账户中创建的用于运行示例代码的示例密钥。


|  |  |  | 
| --- |--- |--- |
|   **密钥名称**   |   **密钥**   |   **密钥值**   | 
|  zsap/hana/upgrade/user  |  用户  |  <HANA 升级用户 ID>  | 
|  zsap/hana/upgrade/password/DEV  |  密码  |  <HANA DEV 升级用户密码>  | 
|  zsap/hana/upgrade/password/QAS  |  密码  |  <HANA QAS 升级用户密码>  | 
|  zsap/hana/upgrade/password/PRD  |  密码  |  <HANA PRD 升级用户密码>  | 
|  zsap/hana/upgrade/password/SBX  |  密码  |  <HANA SBX 升级用户密码>  | 
|  zsap/hana/upgrade/bucket  |  亚马逊 S3 存储桶  |  <用于 SAP HANA 软件的 Amazon S3 存储桶>  | 
|  zsap/sap/bucket/version\$1repo  |  亚马逊 S3 存储桶  |  <用于 SAP HANA 版本存储库的 Amazon S3 存储桶>  | 

**注意**  
示例代码引用了密钥的 Amazon 资源名称。这是必需的，因为密钥存储在不同的账户中。包含运行 SAP HANA 工作负载的 Amazon EC2 实例的 AWS 账户不同。

 **S AWS ecrets Manager 的政策** 

必须将在 S AWS ecrets Manager 中创建的密钥设置为可供目标 AWS 账户访问。有关更多信息，请参阅[基于资源的策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_resource-based)。

以下是分配给 Secret 的策略示例，该策略允许来自其他 AWS 账户的访问权限。

```
{
  "Version" : "2012-10-17",
  "Statement" : [ {
    "Effect" : "Allow",
    "Principal" : {
      "{aws}" : "arn:aws:iam::{sap_workloads_account_id}:role/service-role/{ec2_role}"
    },
    "Action" : "secretsmanager:GetSecretValue",
    "Resource" : "arn:aws:secretsmanager:{region}:{automation_account_id}:
    {secret_ARN}"
  } ]
}
```

**注意**  
在 SAP HANA 数据库 `SYSTEMDB` 中必须有一个具有所需授权来更新 SAP HANA 的有效用户。

在示例代码中，用户和密码作为 AWS 密钥存储在 Secrets Manager 中。遵循授予最低权限的原则，并使用具有所需授权的用户。有关更多详细信息，请参阅 [Create a Lesser-Privileged Database User for Update](https://help.sap.com/docs/SAP_HANA_PLATFORM/2c1988d620e04368aa4103bf26f17727/df3de8c31cef45c0847d2804b97604ea.htmls)。

### AWS 密钥管理服务
<a name="services-kms"></a>

示例代码使用 S AWS ecrets Manager 在不同的 AWS 账户之间共享密钥。由于 S AWS ecrets Manager 对参数内容进行加密，因此 KMS 密钥用于加密和解密操作。您的所有 AWS 账户都必须可以访问 KMS 密钥。有关更多信息，请参阅[创建密钥](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。

## 准备运行 SSM 自动化文档
<a name="preparations"></a>

运行 SSM 自动化文档之前，必须确保存在 SAP HANA 数据库的有效备份，并且连接到 SAP HANA 数据库的应用程序已正常停止。有关更多详细信息，请参阅[管理](https://docs.aws.amazon.com/sap/latest/sap-hana/hana-ops-administration.html)。

对于由操作系统或第三方集群软件管理的 SAP HANA 数据库，必须先将集群置于维护模式，然后才能启动自动修补。SSM 自动化文档必须先在辅助节点上运行。

有关 SAP HANA 集群环境的更多详细信息，请参阅 [SAP HANA AWS：SLES 和 RHEL 高可用性配置指南](https://docs.aws.amazon.com/sap/latest/sap-hana/sap-hana-on-aws-ha-configuration.html)。有关在启用 SAP HANA 系统复制的情况下更新 SAP HANA 数据库的更多详细信息，请参阅 [Update SAP HANA Systems Running in a System Replication Setup](https://help.sap.com/docs/SAP_HANA_PLATFORM/6b94445c94ae495c83a19646e7c3fd56/e94ce3e59ece4b918b5c90d998ab7fae.html)。

使用并发功能，您可以定义应并行更新多少个 SAP HANA 数据库。有关更多信息，请参阅[大规模控制自动化](https://docs.aws.amazon.com/systems-manager/latest/userguide/running-automations-scale-controls.html)。

## 故障排除
<a name="troubleshoot-patching"></a>

按照以下步骤查看每个 SSM 自动化的状态。

1. 打开 [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager)。

1. 在左侧导航窗格中，选择**自动化**。

1. 选择**配置首选项** > **执行**。

1. 您可以在**自动化执行**部分查看 SSM 自动化的状态。

 AWS 管理控制台允许您深入研究每次执行情况，查看执行的步骤以及每个步骤的结果。您可以了解执行 SSM 自动化*之前*发生的故障。要在启动 SSM 自动化*之后*进行故障排除，请查看日志。您可以通过以下路径在 Amazon EC2 上找到 SSM 日志。

```
/var/lib/amazon/ssm/{instance-id}/document/orchestration/{automation_step_execution_id}/awsrunShellScript/0.awsrunShellScript
```

您可以将每个 SSM 自动化的输出发送到 Amazon L CloudWatch ogs。有关更多信息，请参阅[为运行命令配置 Amazon CloudWatch 日志](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-rc-setting-up-cwlogs.html)。

## SAP HANA 版本报告
<a name="version-reporting"></a>

您可以使用 [Amazon QuickSight](https://aws.amazon.com/quicksight/?nc1=h_ls) 创建无服务器的 BI 控制面板，这些仪表板可用作 SAP HANA 软件版本的存储库。通过亚马逊 QuickSight，您可以查看所有 AWS 账户中的所有 SAP HANA 数据库版本。有关更多信息，请参阅使用 S [AWS ystems Manager 和 Amazon Athena 维护 SAP 环境清单](https://aws.amazon.com/blogs/awsforsap/maintain-an-sap-landscape-inventory-with-aws-systems-manager-and-amazon-athena/)。

示例代码中的 `HDB_Report_Version` 步骤会收集 SAP HANA 版本信息，并将这些数据上传到 Amazon S3 存储桶。（在示例代码中，Amazon S3 存储桶有一个包含 SAP HANA 版本信息的 `/HANA` 文件夹。） 您可以将此存储桶中的数据用作源数据集，为 Amazon QuickSight 控制面板提供数据。有关更多信息，请参阅[使用 Amazon S3 文件创建数据集](https://docs.aws.amazon.com/quicksight/latest/user/create-a-data-set-s3.html)。您可以通过安排自动刷新来确保数据的准确性。有关更多信息，请参阅[刷新 SPICE 数据](https://docs.aws.amazon.com/quicksight/latest/user/refreshing-imported-data.html)。

您必须为 Amazon S3 存储桶设置 IAM 权限。以下是用于存储 SAP HANA 版本信息的 Amazon S3 存储桶策略示例。

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:role/service-role/{ec2_role}"
            },
            "Action": "s3:PutObject",
            "Resource": [
                "arn:aws:s3:::{bucket_name}/*",
                "arn:aws:s3:::{bucket_name}"
            ]
        }
    ]
}
```