使用 Terraform 在 Google Cloud 上自动部署 SAP

您可以使用 Terraform 自动部署 Google Cloud 基础架构。Terraform 是一个开源工具,可让您自动创建和管理 Google Cloud 资源。如需了解 Terraform,请参阅将 Terraform 与 Google Cloud 搭配使用

对于部分特选的 SAP 解决方案和支持数据库(例如 SAP HANA),Google Cloud 提供了预定义的 Terraform 配置文件,可用于部署满足 SAP 可支持性要求和最佳做法的 Google Cloud 基础架构。

支持的 SAP 解决方案

Google Cloud 为以下 SAP 解决方案提供 Terraform 配置文件:

配置文件部署的内容

Google Cloud 提供用来部署 SAP 的所有 Terraform 配置文件都会配置或部署以下元素:

  • 一个或多个 Compute Engine 虚拟机
  • 您指定的一个操作系统映像
  • 一个或多个永久性磁盘或 Hyperdisk 卷
  • (可选)您指定用于虚拟机的 Identity and Access Management (IAM) 服务账号
  • SAP 部署所需的 Google Cloud API
  • (可选)每个虚拟机实例的网络标记
  • (可选)每个虚拟机实例的外部 IP 地址
  • 最新版本的 Google Cloud's Agent for SAP

对于 SAP HANA,Terraform 配置文件还会部署以下内容:

  • 针对 /hana/data/hana/log/hana/shared/usr/sap/hanabackup 的存储卷
  • (可选)SAP HANA 系统本身
  • 1 个主实例主机、最多 15 个工作器主机和最多 3 个备用主机(针对具有主机自动故障切换功能的 SAP HANA 横向扩容系统)
  • 一个 Linux 高可用性集群
  • (可选)对于 SAP HANA 纵向扩容系统,主实例和辅助实例的静态 IP 地址
  • (可选)对于 SAP HANA 横向扩容系统,主节点、工作器节点和备用节点的静态 IP 地址

对于 SAP NetWeaver,Terraform 配置文件还会部署以下内容:

  • 针对 /sapmnt/usr/sap 的多个存储卷,以及一个交换卷
  • (可选)SLES 上的 Linux 高可用性集群

对于高可用性 (HA) 集群,Terraform 配置文件还会部署额外的功能和特性,例如内部负载均衡器、实例组和转发规则。如需了解详情,请参阅高可用性场景的部署指南

每个 SAP 部署的 Terraform 配置

SAP 的每个预定义 Terraform 配置都包含一个声明式配置文件 DEPLOYMENT_TYPE.tf

如需获取配置文件名称或了解如何下载配置文件,请参阅您的场景的部署指南

填写 Terraform 配置文件

为 SAP 部署提供的 Terraform 配置文件符合 Terraform 定义的标准。

为 SAP 提供的配置文件包括主模块定义,定义后面的注释部分可用来声明参数。以下示例摘自 sap_hana.tf 文件,用于部署不包含备用节点的 SAP HANA 横向扩容系统:

#...
module "sap_hana" {
  source = "https://storage.googleapis.com/cloudsapdeploy/terraform/latest/terraform/sap_hana/sap_hana_module.zip"
  #
  # By default, this source file uses the latest release of the terraform module
  # for SAP on Google Cloud. To fix your deployments to a specific release
  # of the module, comment out the source property above and uncomment the source property below.
  #
  # source = "https://storage.googleapis.com/cloudsapdeploy/terraform/YYYYMMDDHHMM/terraform/sap_hana/sap_hana_module.zip"
  # ...
  project_id = "example-project-123456"
  zone = "us-central1-f"
  machine_type = "n2-highmem-32"
  subnetwork = "example-subnet-us-central1"
  linux_image = "sles-15-sp2-sap"
  linux_image_project = "suse-sap-cloud"
  # ...
  instance_name = "hana-scaleout"
  # ...
  sap_hana_deployment_bucket = "mybucketname"
  sap_hana_sid = "AB2"
  sap_hana_instance_number = 12
  sap_hana_sidadm_password = "TempPa55word"
  sap_hana_system_password = "TempPa55word"
  sap_hana_scaleout_nodes = 3
  sap_hana_sidadm_uid = 11
  vm_static_ip = "10.0.0.1"
  worker_static_ips = ["10.0.0.2", "10.0.0.3", "10.0.0.4"]
  enable_fast_restart = true
  # ...
}

如需使用可选参数,请移除注释字符 #,并指定参数的值。 大多数可选参数都有默认值。如果未指定可选参数,则 Terraform 配置会使用该参数的默认值(如果有)。

如需详细了解配置文件,请参阅 Terraform 语言文档

模块版本控制

您从 Google Cloud 下载的用来部署 SAP 的 Terraform 配置文件 DEPLOYMENT_TYPE.tf 包含 source 参数的两个实例:一个实例是当前活跃对象,另一个实例则作为注释包含在文件内。您可以控制配置使用哪个模块版本,您只需要从所需的 source 参数移除前导注释字符 #,并将该字符添加到您不需要的版本即可。

默认情况下,当您从 Google Cloud 下载用于部署 SAP 的新 Terraform 配置文件时,活跃 source 参数会指定 latest 作为模块版本,这意味着如果 Terraform 在您输入 terraform init 命令后刷新工作目录中的文件,您的配置会使用 Google Cloud 为 SAP 部署提供的 Terraform 模块的最新可用版本。

source 参数的第二个实例(默认通过前导 # 字符停用)包含一个时间戳,用于标识 Google Cloud 提供的特定模块版本。例如,在以下示例中,1.3.674800406 便是用以标识 Terraform 模块版本的时间戳。

#...
module "sap_hana" {
  source = "https://storage.googleapis.com/cloudsapdeploy/terraform/latest/terraform/sap_hana/sap_hana_module.zip"
  #...
  # source = "https://storage.googleapis.com/cloudsapdeploy/terraform/1.3.674800406/terraform/sap_hana/sap_hana_module.zip"
  #...
  # arguments...
  #...

如果您需要所有部署使用同一模块版本,则在 DEPLOYMENT_TYPE.tf 中,从包含版本时间戳的 source 参数移除前导 # 字符,并将该字符添加到指定 latest 作为版本的 source 参数,如以下示例所示:

#...
module "sap_hana" {
  # source = "https://storage.googleapis.com/cloudsapdeploy/terraform/latest/terraform/sap_hana/sap_hana_module.zip"
  #...
  source = "https://storage.googleapis.com/cloudsapdeploy/terraform/1.3.674800406/terraform/sap_hana/sap_hana_module.zip"
  #...
  # arguments...
  #...}

指定时间戳后,所有部署都会使用与指定时间戳对应的 Terraform 模块版本。

使用一个配置文件部署多个系统

您可以使用单个 Terraform 配置文件部署多个系统。为此,您需要将 module 块添加到您需要部署的每个附加系统的配置文件中。

对于 SAP 部署,请复制 Google Cloud 提供的 module 块定义,并将其按适当的顺序粘贴到配置文件中。

在每个模块的块中,确保为所有实例特定参数(如 moduleinstance_name)指定唯一值。

应用配置

您可以使用 terraform apply 命令应用 Terraform 配置。

如果您希望在实际部署任何 Google Cloud 资源之前先预览配置结果,请使用 terraform plan 命令创建 Terraform 执行计划。

如需了解详细的应用过程,请参阅您的场景的部署指南

当 Terraform 完成配置的应用过程后,Terraform 会在 Cloud Shell 中对它创建的每个资源显示 COMPLETED,并将控制权传递给 Shell 脚本。Shell 脚本会在已部署虚拟机上作为启动脚本进行调用。

Shell 脚本会进一步配置已部署的资源,并在 Cloud Logging 中记录配置进度。直到 Shell 脚本处理完成后,SAP 部署才会完成。

部署后脚本

您可以使用部署后脚本执行额外的操作,例如触发 SAP NetWeaver 应用的安装、监控代理等。

建议使用部署后脚本进行自定义配置,因为只有在按照 SAP 可支持性要求配置 Google Cloud 基础架构后,这些脚本才能获得控制权。

如需显示部署后脚本的状态消息,您需要对这些脚本进行编码,将消息写入日志。如需了解详情,请参阅 Cloud Logging 文档

Terraform 写入 Cloud Shell 或本地 Google Cloud CLI Shell 会话的消息中不包含部署后脚本的状态。

获取 Terraform 配置支持

如果您在解决 Google Cloud 为 SAP 提供的 Terraform 配置相关问题时需要帮助,请收集必要的诊断信息并与 Cloud Customer Care 联系。

如需详细了解如何获取 Terraform 问题支持,请参阅获取 Terraform 问题支持