你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
规划 SAP 自动化框架的部署
使用 SAP 部署自动化框架规划 SAP 部署时,有一些事项需要注意。 它们包括订阅规划、凭据管理虚拟网络设计。
有关 Azure 上的 SAP 的一般性设计注意事项,请参阅 SAP 采用方案简介。
注意
Terraform 部署使用 Microsoft 在 SAP 部署自动化框架存储库中提供的 Terraform 模板。 该模板将参数文件与特定于系统的信息配合使用,以便执行部署。
订阅计划
应在不同的订阅中部署控制平面和工作负载区域。 控制平面应驻留在用于托管 SAP 自动化框架的管理组件的中心订阅中。
SAP 系统应托管在专用于 SAP 系统的分支订阅中。 系统分区的一个示例是,将开发系统托管在单独的订阅中,使用专用虚拟网络;生产系统将托管在其自己的订阅中,使用专用虚拟网络。
此方法既提供了安全边界,又实现了明确的职责分离。 例如,SAP Basis 团队可以将系统部署到工作负载区域,而基础结构团队可以管理控制平面。
控制平面规划
可以从 Azure Pipelines 或直接从 Azure 托管的 Linux 虚拟机使用提供的 shell 脚本来执行部署和配置活动。 此环境称为控制平面。 有关为部署框架设置 Azure DevOps 的信息,请参阅为 SAP 部署自动化框架设置 Azure DevOps。 有关将 Linux 虚拟机设置为部署程序的信息,请参阅为 SAP 部署自动化框架设置 Linux 虚拟机。
在设计控制平面之前,请考虑以下问题:
- 你需要在哪些区域部署 SAP 系统?
- 控制平面是否有专用的订阅?
- 控制平面是否有专用的部署凭据(服务主体)?
- 是否存在现有的虚拟网络,或者是否需要新的虚拟网络?
- 如何为虚拟机提供出站 Internet?
- 是否要为出站 Internet 连接部署 Azure 防火墙?
- 存储帐户和密钥保管库是否需要专用终结点?
- 要为虚拟机使用现有的专用 DNS 区域,还是使用控制平面托管专用 DNS?
- 你是否要使用 Azure Bastion 安全地远程访问虚拟机?
- 你是否要使用 SAP 部署自动化框架配置 Web 应用程序来执行配置和部署活动?
控制面板
控制平面提供以下服务:
- 部署 VM,用于执行 Terraform 部署和 Ansible 配置。 充当 Azure DevOps 自托管代理。
- 密钥保管库,其中包含 Terraform 在执行部署时使用的部署凭据(服务主体)。
- 用于提供出站 Internet 连接的 Azure 防火墙。
- 用于提供对已部署的虚拟机的安全远程访问的 Azure Bastion。
- 用于执行配置和部署活动的 SAP 部署自动化框架配置 Azure Web 应用程序。
控制平面是使用两个配置文件定义的,一个用于部署程序,一个用于 SAP 库。
部署程序配置文件定义区域、环境名称和虚拟网络信息。 例如:
# Deployer Configuration File
environment = "MGMT"
location = "westeurope"
management_network_logical_name = "DEP01"
management_network_address_space = "10.170.20.0/24"
management_subnet_address_prefix = "10.170.20.64/28"
firewall_deployment = true
management_firewall_subnet_address_prefix = "10.170.20.0/26"
bastion_deployment = true
management_bastion_subnet_address_prefix = "10.170.20.128/26"
use_webapp = true
webapp_subnet_address_prefix = "10.170.20.192/27"
deployer_assign_subscription_permissions = true
deployer_count = 2
use_service_endpoint = false
use_private_endpoint = false
public_network_access_enabled = true
DNS 注意事项
规划自动化框架的 DNS 配置时,请考虑以下问题:
- 解决方案是否可以与现有的专用 DNS 集成,还是需要为部署环境使用自定义专用 DNS 区域?
- 要使用虚拟机的预定义 IP 地址,还是让 Azure 动态分配它们?
可以通过在 tfvars
文件中提供以下值来与现有的专用 DNS 区域集成:
management_dns_subscription_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
#management_dns_resourcegroup_name = "RESOURCEGROUPNAME"
use_custom_dns_a_registration = false
如果没有这些值,则会在 SAP 库资源组中创建专用 DNS 区域。
有关详细信息,请参阅有关如何配置部署器的深入说明。
SAP 库配置
SAP 库资源组为 SAP 安装介质、物料清单文件、Terraform 状态文件和可选的专用 DNS 区域提供存储。 配置文件定义 SAP 库的区域和环境名称。 有关参数信息和示例,请参阅配置 SAP 库以实现自动化。
工作负载区域规划
大多数 SAP 应用程序环境在不同的层中分区。 在 SAP 部署自动化框架中,这些层称为工作负载区域。 例如,对于开发、质量保证和生产系统,你可能有不同的工作负载区域。 有关详细信息,请参阅工作负载区域。
工作负载区域为 SAP 应用程序提供以下共享服务:
- Azure 虚拟网络,用于虚拟网络、子网和网络安全组。
- Azure 密钥保管库,用于存储虚拟机和 SAP 系统凭据。
- Azure 存储帐户,用于启动诊断和云见证。
- SAP 系统的共享存储,Azure 文件存储或 Azure NetApp 文件。
在设计工作负载区域布局之前,请考虑以下问题:
- 需要在哪些区域部署工作负载?
- 你的场景需要多少个工作负载区域(开发、质量保证、生产)?
- 你要部署到新的虚拟网络中,还是使用现有的虚拟网络?
- 你的共享存储需要哪种存储类型(Azure 文件存储 NFS 或 Azure NetApp 文件)?
- 是否要为出站 Internet 连接部署 NAT 网关?
工作负载区域的默认命名约定为 [ENVIRONMENT]-[REGIONCODE]-[NETWORK]-INFRASTRUCTURE
。 例如,DEV-WEEU-SAP01-INFRASTRUCTURE
适用于使用 SAP01 虚拟网络托管在西欧区域的开发环境。 PRD-WEEU-SAP02-INFRASTRUCTURE
适用于使用 SAP02 虚拟网络托管在西欧区域的生产环境。
SAP01
和 SAP02
指定定义了 Azure 虚拟网络的逻辑名称。 它们可用于进一步分区环境。 假设你需要将两个 Azure 虚拟网络用于同一工作负载区域。 例如,你可能有一个多订阅方案,在两个订阅中托管开发环境。 你可以对每个虚拟网络使用不同的逻辑名称。 例如,可以使用 DEV-WEEU-SAP01-INFRASTRUCTURE
和 DEV-WEEU-SAP02-INFRASTRUCTURE
。
有关详细信息,请参阅配置工作负载区域部署以实现自动化。
基于 Windows 的部署
执行基于 Windows 的部署时,工作负载区域虚拟网络中的虚拟机需要能够与 Active Directory 通信才能将 SAP 虚拟机加入 Active Directory 域。 提供的 DNS 名称需要能够由 Active Directory 解析。
SAP 部署自动化框架不会在 Active Directory 中创建帐户,因此需要预先创建帐户并将其存储在工作负载区域密钥保管库中。
凭据 | 名称 | 示例 |
---|---|---|
可以执行域加入活动的帐户 | [IDENTIFIER]-ad-svc-account | DEV-WEEU-SAP01-ad-svc-account |
执行域加入的帐户的密码 | [IDENTIFIER]-ad-svc-account-password | DEV-WEEU-SAP01-ad-svc-account-password |
sidadm 帐户密码 |
[IDENTIFIER]-[SID]-win-sidadm_password_id | DEV-WEEU-SAP01-W01-winsidadm_password_id |
SID 服务帐户密码 | [IDENTIFIER]-[SID]-svc-sidadm-password | DEV-WEEU-SAP01-W01-svc-sidadm-password |
SQL Server 服务帐户 | [IDENTIFIER]-[SID]-sql-svc-account | DEV-WEEU-SAP01-W01-sql-svc-account |
SQL Server 服务帐户密码 | [IDENTIFIER]-[SID]-sql-svc-password | DEV-WEEU-SAP01-W01-sql-svc-password |
SQL Server 代理服务帐户 | [IDENTIFIER]-[SID]-sql-agent-account | DEV-WEEU-SAP01-W01-sql-agent-account |
SQL Server 代理服务帐户密码 | [IDENTIFIER]-[SID]-sql-agent-password | DEV-WEEU-SAP01-W01-sql-agent-password |
DNS 设置
对于高可用性方案,SAP 中心服务群集的 Active Directory 中需要 DNS 记录。 需要在 Active Directory DNS 区域中创建 DNS 记录。 DNS 记录名称定义为 [sid]>scs[scs instance number]cl1
。 例如,w01scs00cl1
用于群集,W01
用于 SID,00
用于实例编号。
凭据管理
自动化框架使用服务主体进行基础结构部署。 建议对每个工作负载区域使用不同的部署凭据(服务主体)。 框架将这些凭据存储在 Deployer 的密钥保管库中。 然后,框架将在部署过程中动态检索这些凭据。
SAP 和虚拟机凭据管理
自动化框架使用工作负载区域密钥保管库来存储自动化用户凭据和 SAP 系统凭据。 下表列出了虚拟机凭据的名称。
凭据 | 名称 | 示例 |
---|---|---|
私钥 | [IDENTIFIER]-sshkey | DEV-WEEU-SAP01-sid-sshkey |
公钥 | [IDENTIFIER]-sshkey-pub | DEV-WEEU-SAP01-sid-sshkey-pub |
用户名 | [IDENTIFIER]-username | DEV-WEEU-SAP01-sid-username |
密码 | [IDENTIFIER]-password | DEV-WEEU-SAP01-sid-password |
sidadm 密码 |
[IDENTIFIER]-[SID]-sap-password | DEV-WEEU-SAP01-X00-sap-password |
sidadm 帐户密码 |
[IDENTIFIER]-[SID]-winsidadm_password_id | DEV-WEEU-SAP01-W01-winsidadm_password_id |
SID 服务帐户密码 | [IDENTIFIER]-[SID]-svc-sidadm-password | DEV-WEEU-SAP01-W01-svc-sidadm-password |
创建服务主体
创建服务主体:
使用具有创建服务主体权限的帐户登录到 Azure CLI
通过运行命令
az ad sp create-for-rbac
创建新的服务主体。 确保对--name
使用说明名称。 例如:az ad sp create-for-rbac --role="Contributor" --scopes="/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" --name="DEV-Deployment-Account"
记下输出。 在下一步骤中会需要应用程序标识符 (
appId
)、密码 (password
) 和租户标识符 (tenant
)。 例如:{ "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "displayName": "DEV-Deployment-Account", "name": "http://DEV-Deployment-Account", "password": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }
将“用户访问管理员”角色分配给服务主体。 例如:
az role assignment create --assignee <your-application-ID> --role "User Access Administrator" --scope /subscriptions/<your-subscription-ID>/resourceGroups/<your-resource-group-name>
有关详细信息,请参阅关于创建服务主体的 Azure CLI 参考文档。
重要
如果未将用户访问管理员角色分配给服务主体,则无法使用自动化来分配权限。
权限管理
在锁定的环境中,你可能需要为服务主体分配其他权限。 例如,可能需要将用户访问管理员角色分配给服务主体。
所需的权限
下表显示了服务主体所需的权限。
凭据 | 区域 | 所需的权限 | 持续时间 |
---|---|---|---|
控制平面 SPN | 控制平面订阅 | 参与者 | |
控制平面 SPN | 部署程序资源组 | 参与者 | |
控制平面 SPN | 部署程序资源组 | 用户访问管理员 | 在设置期间 |
控制平面 SPN | SAP 库资源组 | 参与者 | |
控制平面 SPN | SAP 库资源组 | 用户访问管理员 | |
工作负载区域 SPN | 目标订阅 | 参与者 | |
工作负载区域 SPN | 工作负载区域资源组 | 参与者、用户访问管理员 | |
工作负载区域 SPN | 控制平面订阅 | 读者 | |
工作负载区域 SPN | 控制平面虚拟网络 | 网络参与者 | |
工作负载区域 SPN | SAP 库 tfstate 存储帐户 |
存储帐户参与者 | |
工作负载区域 SPN | SAP 库 sapbits 存储帐户 |
读者 | |
工作负载区域 SPN | 专用 DNS 区域 | 专用 DNS 区域参与者 | |
Web 应用程序标识 | 目标订阅 | 读者 | |
群集虚拟机标识 | 资源组 | 隔离角色 |
防火墙配置
组件 | 地址 | 持续时间 | 说明 |
---|---|---|---|
SDAF | github.com/Azure/sap-automation 、github.com/Azure/sap-automation-samples 、githubusercontent.com |
部署程序设置 | |
Terraform | releases.hashicorp.com 、registry.terraform.io 、checkpoint-api.hashicorp.com |
部署程序设置 | 请参阅安装 Terraform。 |
Azure CLI | 安装 Azure CLI | 部署程序设置和部署过程中 | 安装 Azure CLI 中定义了 Azure CLI 安装的防火墙要求。 |
PIP | bootstrap.pypa.io |
部署程序设置 | 请参阅安装 Ansible。 |
Ansible | pypi.org 、pythonhosted.org 、files.pythonhosted.org 、galaxy.ansible.com 、'https://ansible-galaxy-ng.s3.dualstack.us-east-1.amazonaws.com' |
部署程序设置 | |
PowerShell 库 | onegetcdn.azureedge.net 、psg-prod-centralus.azureedge.net 、psg-prod-eastus.azureedge.net |
设置基于 Windows 的系统 | 请参阅 PowerShell 库。 |
Windows 组件 | download.visualstudio.microsoft.com 、download.visualstudio.microsoft.com 、download.visualstudio.com |
设置基于 Windows 的系统 | 请参阅 Visual Studio 组件。 |
SAP 下载 | softwaredownloads.sap.com |
SAP 软件下载 | 请参阅 SAP 下载。 |
Azure DevOps 代理 | https://vstsagentpackage.azureedge.net |
设置 Azure DevOps |
可以使用 PowerShell 脚本测试与 Azure 中 Linux 虚拟机的 URL 的连接,该脚本使用 Azure 中的“run-command”功能来测试与 URL 的连接。
以下示例演示如何使用交互式 PowerShell 脚本测试与 URL 的连接。
$sdaf_path = Get-Location
if ( $PSVersionTable.Platform -eq "Unix") {
if ( -Not (Test-Path "SDAF") ) {
$sdaf_path = New-Item -Path "SDAF" -Type Directory
}
}
else {
$sdaf_path = Join-Path -Path $Env:HOMEDRIVE -ChildPath "SDAF"
if ( -not (Test-Path $sdaf_path)) {
New-Item -Path $sdaf_path -Type Directory
}
}
Set-Location -Path $sdaf_path
git clone https://github.com/Azure/sap-automation.git
cd sap-automation
cd deploy
cd scripts
if ( $PSVersionTable.Platform -eq "Unix") {
./Test-SDAFURLs.ps1
}
else {
.\Test-SDAFURLs.ps1
}
DevOps 结构
部署框架对部署项目使用三个单独的存储库。 对于你自己的参数文件,最佳做法是将这些文件保留在你管理的源代码管理存储库中。
主存储库
此存储库包含所有工作负载区域和系统部署的 Ansible playbook 所需的 Terraform 参数文件和文件。
要创建此存储库,可以将 SAP 部署自动化框架启动存储库克隆到你的源代码管理存储库中。
重要
此存储库必须是 Azure DevOps 项目的默认存储库。
文件夹结构
以下示例文件夹层次结构演示如何将配置文件与自动化框架文件组织在一起。
文件夹名称 | 目录 | 说明 |
---|---|---|
BOMS | BoM 文件 | 用于手动 BoM 下载 |
DEPLOYER | 部署器的配置文件 | 一个文件夹,其中包含环境管理的所有部署的部署器配置文件。 按“环境 - 区域 - 虚拟网络”的命名约定命名每个子文件夹。 例如,PROD-WEEU-DEP00-INFRASTRUCTURE。 |
LIBRARY | SAP 库的配置文件 | 一个文件夹,其中包含环境管理的所有部署的 SAP 库配置文件。 按“环境 - 区域 - 虚拟网络”的命名约定命名每个子文件夹。 例如,PROD-WEEU-SAP-LIBRARY。 |
LANDSCAPE | 工作负载区域的配置文件 | 一个文件夹,其中包含环境管理的所有工作负载区域的配置文件。 按“环境 - 区域 - 虚拟网络”的命名约定命名每个子文件夹。 例如,PROD-WEEU-SAP00-INFRASTRUCTURE。 |
SYSTEM | SAP 系统的配置文件 | 一个文件夹,其中包含环境管理的所有 SAP 系统标识 (SID) 部署的配置文件。 按“环境 - 区域 - 虚拟网络 - SID”的命名约定命名每个子文件夹。 例如,PROD-WEEU-SAPO00-ABC。 |
参数文件的名称将成为 Terraform 状态文件的名称。 出于此原因,请确保使用唯一的参数文件名。
代码存储库
此存储库包含 Terraform 自动化模板、Ansible playbook 以及部署管道和脚本。 对于大多数用例,请将此存储库视为只读存储库,不要修改它。
要创建此存储库,请将 SAP 部署自动化框架存储库克隆到你的源代码管理存储库中。
将此存储库命名为 sap-automation
。
示例存储库
此存储库包含示例材料清单文件和示例 Terraform 配置文件。
要创建此存储库,请将 SAP 部署自动化框架示例存储库克隆到你的源代码管理存储库中。
将此存储库命名为 samples
。
支持的部署方案
自动化框架支持部署到新方案和现有的方案。
Azure 区域
在部署解决方案之前,必须考虑要使用哪些 Azure 区域。 不同的 Azure 区域可能会位于范围内,具体取决于你的具体方案。
自动化框架支持部署到多个 Azure 区域。 每个区域主机:
- 部署基础结构。
- 包含状态文件和安装介质的 SAP 库。
- 1-N 个工作负载区域。
- 工作负载区域中的 1-N 个 SAP 系统。
部署环境
如果要支持一个区域中的多个工作负载区域,请使用部署环境和 SAP 库的唯一标识符。 请勿使用工作负载区域的标识符。 例如,将 MGMT
用于管理目的。
自动化框架还支持将部署环境和 SAP 库放在与工作负载区域不同的订阅中。
部署环境提供以下服务:
- 一个或多个部署虚拟机,它们使用 Terraform 执行基础结构部署,并使用 Ansible playbook 执行系统配置和 SAP 安装。
- 密钥保管库,其中包含供 Terraform 部署使用的服务主体标识信息。
- Azure 防火墙组件,用于提供出站 Internet 连接。
部署配置文件定义区域、环境名称和虚拟网络信息。 例如:
# The environment value is a mandatory field, it is used for partitioning the environments, for example (PROD and NP)
environment = "MGMT"
# The location/region value is a mandatory field, it is used to control where the resources are deployed
location = "westeurope"
# management_network_address_space is the address space for management virtual network
management_network_address_space = "10.10.20.0/25"
# management_subnet_address_prefix is the address prefix for the management subnet
management_subnet_address_prefix = "10.10.20.64/28"
# management_firewall_subnet_address_prefix is the address prefix for the firewall subnet
management_firewall_subnet_address_prefix = "10.10.20.0/26"
# management_bastion_subnet_address_prefix is a mandatory parameter if bastion is deployed and if the subnets are not defined in the workload or if existing subnets are not used
management_bastion_subnet_address_prefix = "10.10.20.128/26"
deployer_enable_public_ip = false
firewall_deployment = true
bastion_deployment = true
有关详细信息,请参阅有关如何配置部署器的深入说明。
工作负载区域结构
大多数 SAP 配置都有多个工作负载区域用于不同的应用程序层。 例如,对于开发、质量保证和生产,你可能有不同的工作负载区域。
在每个工作负载区域中创建或授予对以下服务的访问权限:
- Azure 虚拟网络,用于虚拟网络、子网和网络安全组。
- Azure 密钥保管库,用于系统凭据和部署服务主体。
- Azure 存储帐户,用于启动诊断和云见证。
- SAP 系统的共享存储,Azure 文件存储或 Azure NetApp 文件。
在设计工作负载区域布局之前,请考虑以下问题:
- 你的方案需要多少个工作负载区域?
- 需要在哪些区域部署工作负载?
- 你的部署方案是什么?
有关详细信息,请参阅配置工作负载区域部署以实现自动化。
SAP 系统设置
SAP 系统包含托管 SAP 应用程序所需的所有 Azure 组件。
在配置 SAP 系统之前,请考虑以下问题:
- 你想要使用哪种数据库后端?
- 需要多少个数据库服务器?
- 方案是否需要高可用性?
- 需要多少个应用程序服务器?
- 需要多少个 Web 调度程序(如果有)?
- 需要多少个中心服务实例?
- 你需要哪种大小的虚拟机?
- 你要使用哪个虚拟机映像? 映像是 Azure 市场上的还是自定义的?
- 是要部署到新的部署方案还是现有的部署方案?
- 你的 IP 分配策略是什么? 是希望 Azure 设置 IP 还是希望使用自定义设置?
有关详细信息,请参阅配置 SAP 系统以实现自动化。
部署流
规划部署时,必须考虑整个流。 使用自动化框架在 Azure 上部署 SAP 包含三个主要步骤。
部署控制平面。 此步骤部署组件以支持指定 Azure 区域中的 SAP 自动化框架。
- 创建部署环境。
- 为 Terraform 状态文件创建共享存储。
- 为 SAP 安装介质创建共享存储。
部署工作负载区域。 此步骤部署工作负载区域组件,例如虚拟网络和密钥保管库。
部署系统。 此步骤包括 SAP 系统的基础结构部署以及 SAP 配置和 SAP 安装。
命名约定
自动化框架使用默认命名约定。 如果要使用自定义命名约定,请在部署之前规划并定义自定义名称。 有关详细信息,请参阅配置命名约定。
磁盘大小调整
如果要配置自定义磁盘大小,请确保在部署之前规划自定义设置。