亚马逊AWS官方博客

使用 AWS Systems Manager 自动启动或停止分布式 SAP HANA 系统

本篇博客翻译自AWS 英文博客 “AWS for SAP” 中的文章 Automate Start or Stop of Distributed SAP HANA systems using AWS Systems Manager,原文请点击这里

 

全球 5000 多家客户已经开始了他们的 SAP on AWS 之旅,要么按原样迁移现有的 SAP 工作负载,要么探索在 HANA 或 S/4HANA 上实施套件,作为他们迁移到 AWS 的一部分。

在评估这些基于云的 SAP 部署的总拥有成本时,许多人检查了AWS 提供的灵活商业模型,并确定了使用 Savings Plans、Amazon EC2 预留实例和使用 Amazon EC2 减少运行时间的组合来降低成本的机会不需要 24×7 的系统按需定价。

对于许多客户而言,包括开发、测试、培训和沙盒实例在内的非生产 SAP 系统并未持续使用。这些系统中的部分或全部可能具有较低的正常运行时间要求或在项目周期中的作用很短,在这种情况下,按需定价可能是更具成本效益的选择。

例如,在 us-west-1 中每周运行时间少于 67 小时的 r5.16xlarge EC2 实例使用按需定价比我们最具成本效益的定价模型更便宜。请参阅下图中的比较成本,并使用AWS 定价计算器为您的实例类型和区域执行类似的比较。

控制正常运行时间是降低成本的好方法,但它带来了在不使用时关闭 EC2 实例的操作挑战,例如夜间和周末。它还要求停止/启动进程在分布式环境中能够感知应用程序。例如,SAP 应用程序服务器实例在其相应的数据库实例启动并运行之前无法启动,并且在关闭期间,停止数据库主机而不首先完全停止数据库应用程序会增加数据库损坏的风险。

我们经常看到客户如何应对这一挑战的演变。在项目阶段,当您熟悉云设置和操作模型时,您的 SAP Basis 管理员登录到各个系统以执行多个启动和关闭命令的传统方法并不罕见。除了这是一个冗长的手动过程之外,如果没有适当的控制,它很容易出错并可能带来风险。

我们经常看到的下一次迭代,使用了在 cron 和/或基于标签的关闭/启动计划中调度的脚本的组合。这减少了手动步骤,但仍然存在协调跨实例依赖项的挑战,并且可能无法将系统正常运行时间最小化到仅在系统使用时。手动设置工作、调度更改和可见性是此方法列出的其他问题。

最后,我们看到一些客户采用现成的解决方案来管理他们的 SAP 环境。如果产品提供一组广泛的操作功能并与 SAP 和 AWS 功能集成,则这种方法是有意义的。在您的评估中,确保将与许可、托管、实施和支持相关的成本考虑在内。

了解所有这些解决方案的局限性后,我们寻找了替代方案。我们开发的 AWS 云原生解决方案可以分为两部分:

  • SAP Aware Systems Manager 自动化文档(运行手册)。一种 SAP 感知和云原生的启动/停止系统的方法,将所有实例操作(包括实例启动)移至中央控制机制。
  • 执行和通知框架。消除或减少对技术团队的依赖,但确保必要的控制和可见性的选项。

由此产生的解决方案已被包括 CHS Inc. 在内的客户使用,该公司是一家多元化的全球农业合作企业,自从迁移到 AWS 以来,他们一直在继续他们的 SAP 开发运营之旅。CHS 利用这种自动化在下班后关闭其非生产 SAP 系统,所有这些都无需人工干预。通过在非工作时间关闭非生产部门,CHS 很快就看到了有意义的成本节约。

 

解决方案

让我们更详细地看一下我们描述的两个元素:

SAP Aware Systems Manager 自动化文档

AWS Systems Manager 提供了一个统一的用户界面,因此您可以查看来自多个 AWS 服务的操作数据并跨 AWS 资源自动执行操作任务。对于具有系统管理背景的操作员来说,使用预定义的自动化剧本、允许编写简单 bash 脚本的 RunCommand 模块和偶尔的决策步骤的组合应该很容易配置。

每个步骤都被设计为执行单个 操作或步骤,允许构建、链接在一起和重用元素,同时还提供改进的可见性和控制。(这将成为以后框架的一个关键元素)。

我们选择了 RunCommand 和 bash 脚本,因为这与 SAP 管理员熟悉的“命令行”使用一致,我们还尝试最小化所需的配置和输入,使用主机上的查询来识别正在运行的内容并导出参数需要发出命令。为了将执行联系在一起并识别实例,使用了 SSM 自动化文档参数、输出和实例标签。

部署文档后,您可以查看标记文本描述以更详细地了解这些步骤。

例如,如果选择启动动作,将执行以下步骤。

 姓名  行动 描述
 START_QUERY_AWS_DBInstanceId  aws:executeAwsApi 运行 EC2 Describe 实例以查询标签值以识别特定 SID 的数据库服务器。
 START_AWS_DBInstanceId  aws:changeInstanceState 将实例的所需状态更改为“正在运行”
 START_DB_HANA  aws:运行命令 调用 sapcontrol 启动函数并验证系统正在运行的短批处理脚本

以下代码片段给出了用于运行 sapcontrol 命令的 bash 脚本示例。请参阅注释 1763593 – 启动和停止 SAP 系统实例 – 不推荐使用 startsap/stopsap(需要 SAP s 用户)

#!/bin/bash
SAPProfile=`grep -o 'pf=[^[:space:]]*' /usr/sap/sapservices | grep _HDB`
SID=`echo ${SAPProfile} | awk -F "/" '{print $4}'`
SYSTEMNO=`echo ${SAPProfile} | awk -F "/" '{print $7}' | awk -F "_" '{print $2}' | sed 's@^[^0-9]*\([0-9]\+\).*@\1@'`

echo "Running /usr/sap/hostctrl/exe/sapcontrol -nr ${SYSTEMNO} -function GetSystemInstanceList"

/usr/sap/hostctrl/exe/sapcontrol -nr ${SYSTEMNO} -function GetSystemInstanceList
if [ $? -eq 0 ]
then
    echo "There is a system here, I am going to use start"
    /usr/sap/hostctrl/exe/sapcontrol -nr ${SYSTEMNO} -function StartWait 600 2
else
    echo "There is no service running for instance number ${SYSTEMNO} "
    exit 1
fi

/usr/sap/hostctrl/exe/sapcontrol -nr ${SYSTEMNO} -function GetProcessList
if [ $? -eq 3 ]
then
    echo "`date +%F\ %T`: The HANA Database Started Successfully"
else
    echo "The return code was $? "
    exit 1
fi

Runbook 执行和通知框架

作为一项附加功能,请考虑如何使用适当的安全控制和治理来触发 Systems Manager Runbook,以与系统的重要性保持一致。

如果从外部源授予访问权限,请确保您遵循 IAM 的最佳实践并使用具有最低权限的角色运行文档。

首先手动执行自动化以熟悉文档。下一步,探索使用触发器(例如将 Runbook 配置为 EventBridge 事件规则的目标的 Amazon Eventbridge 模式)进行调度的选项。Systems Manager 文档中最好地介绍了这些选项和详细信息 。

如果时间表不固定,这些机制可以扩展为按需和临时使用。通过与其他服务(包括电子邮件和 AWS 聊天机器人)集成,可以执行 Runbook 并接收有关状态的通知。可以设计更复杂的框架来与外部审批流程和即时消息服务一起使用。

在提供的 CloudFormation 模板中,我们采用了一个使用 Amazon Eventbridge 和 Amazon SNS 的简单解决方案。Eventbridge 将使用规则识别 Runbook 状态的变化,这些规则将在完成或失败时发送电子邮件,包括 AWS 控制台中 Runbook 执行详细信息的链接。

结论

部署此解决方案的 CloudFormation 文档可在 GitHub 中使用 ( /aws-samples/aws-ssm-automation-for-start-stop-sap ) 查看自述文件以了解有关如何设置环境和将创建的服务。

 

下一步是什么

虽然我们希望您可以按原样使用该文档,但最让我们兴奋的是该解决方案的可扩展性。在 SAP 操作环境中使用的选项是无穷无尽的。

这个文件可以很容易地修改为

  • 使用不同的数据库类型
  • 将 PowerShell 命令用于 Windows 工作负载
  • 为集群化高可用性中央服务或数据库设置合并其他步骤
  • 在启动和关闭过程中添加额外的前或后步骤,例如确保备份完成

类似风格的文档和框架可用于

  • 协调数据库和文件系统备份
  • 具有日志记录功能的日常检查和内务管理
  • 调整实例大小或更改存储特性以进行性能测试

当您开始探索时,您会发现 AWS API 调用和操作系统命令的大多数组合都是可能的。还可以合并依赖 AWS Lambda 的步骤。我们期待看到我们的客户构建的内容,如果您需要使用本机服务自动化运营活动,请考虑参与AWS 专业服务全球 SAP 专业实践。

本篇作者

郭强

亚马逊云科技解决方案架构师,负责基于亚马逊云科技的云计算方案架构的咨询和设计,同时致力于亚马逊云科技云服务在国内的应用和推广。在加入亚马逊云科技之前,曾就职于IBM,并且有2次ToB的创业经历,现致力于SAP在云上的最佳实践和大数据分析相关技术领域的研究。