全球 5000 多家客户已经开始了他们的 SAP on 亚马逊云科技之旅,要么按原样迁移现有的 SAP 工作负载,要么探索在 HANA 或 S/4HANA 上实施套件,作为他们迁移到亚马逊云科技的一部分。
在评估这些基于云的 SAP 部署的总拥有成本时,许多人检查了亚马逊云科技提供的灵活商业模型,并确定了使用 Savings Plans、Amazon EC2 预留实例和使用 Amazon EC2 减少运行时间的组合来降低成本的机会不需要 24×7 的系统按需定价。
对于许多客户而言,包括开发、测试、培训和沙盒实例在内的非生产 SAP 系统并未持续使用。这些系统中的部分或全部可能具有较低的正常运行时间要求或在项目周期中的作用很短,在这种情况下,按需定价可能是更具成本效益的选择。
例如,在 us-west-1 中每周运行时间少于 67 小时的 r5.16xlarge EC2 实例使用按需定价比我们最具成本效益的定价模型更便宜。请参阅下图中的比较成本,并使用亚马逊云科技定价计算器为您的实例类型和区域执行类似的比较。
图1
控制正常运行时间是降低成本的好方法,但它带来了在不使用时关闭 EC2 实例的操作挑战,例如夜间和周末。它还要求停止/启动进程在分布式环境中能够感知应用程序。例如,SAP 应用程序服务器实例在其相应的数据库实例启动并运行之前无法启动,并且在关闭期间,停止数据库主机而不首先完全停止数据库应用程序会增加数据库损坏的风险。
我们经常看到客户如何应对这一挑战的演变。在项目阶段,当您熟悉云设置和操作模型时,您的 SAP Basis 管理员登录到各个系统以执行多个启动和关闭命令的传统方法并不罕见。除了这是一个冗长的手动过程之外,如果没有适当的控制,它很容易出错并可能带来风险。
我们经常看到的下一次迭代,使用了在 CRON 和/或基于标签的关闭/启动计划中调度的脚本的组合。这减少了手动步骤,但仍然存在协调跨实例依赖项的挑战,并且可能无法将系统正常运行时间最小化到仅在系统使用时。手动设置工作、调度更改和可见性是此方法列出的其他问题。
最后,我们看到一些客户采用现成的解决方案来管理他们的 SAP 环境。如果产品提供一组广泛的操作功能并与 SAP 和亚马逊云科技功能集成,则这种方法是有意义的。在您的评估中,确保将与许可、托管、实施和支持相关的成本考虑在内。
了解所有这些解决方案的局限性后,我们寻找了替代方案。我们开发的亚马逊云原生解决方案可以分为两部分:
第一部分为SAP Aware Systems Manager 自动化文档(运行手册)。一种 SAP 感知和云原生的启动/停止系统的方法,将所有实例操作(包括实例启动)移至中央控制机制。第二部分为执行和通知框架。通过框架,可以消除或减少对技术团队的依赖,但确保必要的控制和可见性的选项。
由此产生的解决方案已被包括 CHS Inc. 在内的客户使用,该公司是一家多元化的全球农业合作企业,自从迁移到亚马逊云以来,他们一直在继续他们的 SAP 开发运营之旅。CHS 利用这种自动化在下班后关闭其非生产 SAP 系统,所有这些都无需人工干预。通过在非工作时间关闭非生产部门,CHS 很快就看到了有意义的成本节约。
姓名 | 行动 | 描述 |
START_QUERY_AWS_DBInstanceId | aws:executeAwsApi | 运行 EC2 Describe 实例以查询标签值以识别特定 SID 的数据库服务器。 |
START_AWS_DBInstanceId | aws:changeInstanceState | 将实例的所需状态更改为“正在运行” |
START_DB_HANA | aws:运行命令 | 调用 sapcontrol 启动函数并验证系统正在运行的短批处理脚本 |
让我们更详细地看一下我们描述的两个元素:
AWS Systems Manager
提供了一个统一的用户界面,因此您可以查看来自多个亚马逊云服务的操作数据并跨亚马逊云资源自动执行操作任务。对于具有系统管理背景的操作员来说,使用预定义的自动化剧本、允许编写简单 bash 脚本的 RunCommand 模块和偶尔的决策步骤的组合应该很容易配置。
每个步骤都被设计为执行单个
操作或步骤,允许构建、链接在一起和重用元素,同时还提供改进的可见性和控制。(这将成为以后框架的一个关键元素)。
我们选择了 RunCommand 和 bash 脚本,因为这与 SAP 管理员熟悉的“命令行”使用一致,我们还尝试最小化所需的配置和输入,使用主机上的查询来识别正在运行的内容并导出参数需要发出命令。为了将执行联系在一起并识别实例,使用了 SSM 自动化文档参数、输出和实例标签。
部署文档后,您可以查看标记文本描述以更详细地了解这些步骤。
例如,如果选择启动动作,将执行以下步骤。
以下代码片段给出了用于运行 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
作为一项附加功能,请考虑如何使用适当的安全控制和治理来触发 Systems Manager Runbook,以与系统的重要性保持一致。
如果从外部源授予访问权限,请确保您遵循 IAM 的最佳实践并使用具有最低权限的角色运行文档。
首先手动执行自动化以熟悉文档。下一步,探索使用触发器(例如将 Runbook 配置为 EventBridge 事件规则的目标的 Amazon Eventbridge 模式)进行调度的选项。Systems Manager 文档中最好地介绍了这些选项和详细信息
。
如果时间表不固定,这些机制可以扩展为按需和临时使用。通过与其他服务(包括电子邮件和 AWS 聊天机器人)集成,可以执行 Runbook 并接收有关状态的通知。可以设计更复杂的框架来与外部审批流程和即时消息服务一起使用。
在提供的 CloudFormation 模板中,我们采用了一个使用 Amazon Eventbridge 和 Amazon SNS 的简单解决方案。Eventbridge 将使用规则识别 Runbook 状态的变化,这些规则将在完成或失败时发送电子邮件,包括亚马逊云控制台中 Runbook 执行详细信息的链接。
图2
部署此解决方案的 CloudFormation 文档可在 GitHub 中使用 (
/aws-samples/aws-ssm-automation-for-start-stop-sap
) 查看自述文件以了解有关如何设置环境和将创建的服务。
图3