共用方式為


規劃 SAP 自動化架構的部署

規劃使用 SAP 部署自動化架構的 SAP 部署有多個考量事項, 其中包括訂用帳戶規劃、認證管理虛擬網路設計。

如需 Azure 上的 SAP 一般設計考量,請參閱 SAP 採用情節簡介

注意

Terraform 部署會使用 SAP 部署自動化架構存放庫中由 Microsoft 提供的 Terraform 範本。 此範本會搭配系統特定資訊使用參數檔案來執行部署。

訂用帳戶規劃

您應該在不同的訂用帳戶中部署控制平面和工作負載區域。 控制平面應該放在中樞訂用帳戶,該帳戶用來裝載 SAP 自動化架構的管理元件。

SAP 系統應該裝載在專用於 SAP 系統的輪輻訂用帳戶中。 分割系統的範例之一是透過專用虛擬網路將開發系統裝載在個別訂用帳戶中,而生產系統將會透過專用虛擬網路裝載在自己的訂用帳戶中。

此方法可提供安全性界限,同時能夠清楚區分職責和責任。 例如,SAP Basis 小組可以將系統部署到工作負載區域,而基礎結構小組可以管理控制平面。

控制平面規劃

您可以從 Azure Pipelines 或直接從 Azure 代管的 Linux 虛擬機器使用所提供的殼層指令碼來執行部署和設定活動。 此環境稱為控制平面。 如需為部署架構設定 Azure DevOps,請參閱設定 Azure DevOps 以用於 SAP 部署自動化架構。 如需將 Linux 虛擬機器設定為部署器,請參閱 設定 Linux 虛擬機器以用於 SAP 部署自動化架構

在設計控制平面之前,請考慮下列問題:

  • 您需要在哪些區域中部署 SAP 系統?
  • 控制平面是否有專用訂用帳戶?
  • 控制平面是否有專用的部署認證 (服務主體)?
  • 有現有的虛擬網路,還是需要使用新的虛擬網路?
  • 如何為虛擬機器提供輸出網際網路?
  • 您要部署 Azure 防火牆以進行輸出網際網路連線嗎?
  • 儲存體帳戶和金鑰保存庫是否需要私人端點?
  • 您即將為虛擬機器要使用現有的私人 DNS 區域,還是使用控制平面裝載私人 DNS?
  • 您要使用 Azure Bastion 來保護虛擬機器的遠端存取嗎?
  • 您要使用 SAP 部署自動化架構設定 Web 應用程式,以執行設定和部署活動嗎?

控制平面

控制平面提供下列服務:

  • 執行 Terraform 部署和 Ansible 設定的部署 VM。 作為 Azure DevOps 自我裝載式代理程式。
  • 金鑰保存庫,其中包含執行部署時 Terraform 所使用的部署認證 (服務主體)。
  • 用來提供輸出網際網路連線的 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 動態指派?

若要整合現有的私人 DNS 區域,請在 tfvars 檔案中提供下列值:

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 Key Vault,適用於儲存虛擬機器和 SAP 系統認證。
  • Azure 儲存體帳戶,適用於開機診斷和雲端見證。
  • SAP 系統的共用儲存體 (Azure 檔案儲存體或 Azure NetApp 檔案)。

在設計工作負載區域配置之前,請考慮下列問題:

  • 您需要在哪些區域中部署工作負載?
  • 您的案例需要多少工作負載區域 (開發、品質保證、生產)?
  • 您要部署到新的虛擬網路,還是使用現有的虛擬網路?
  • 共用儲存體需要何種儲存體類型 (Azure 檔案儲存體 NFS 或 Azure NetApp Files)?
  • 您即將部署 NAT 閘道以進行輸出網際網路連線嗎?

工作負載區域的預設命名慣例是 [ENVIRONMENT]-[REGIONCODE]-[NETWORK]-INFRASTRUCTURE。 例如,DEV-WEEU-SAP01-INFRASTRUCTURE 是指使用 SAP01 虛擬網路裝載於西歐區域的開發環境。 PRD-WEEU-SAP02-INFRASTRUCTURE 是指使用 SAP02 虛擬網路裝載於西歐區域的生產環境。

SAP01SAP02 名稱會定義 Azure 虛擬網路的邏輯名稱, 可用來進一步分割環境。 假設您需要適用於同一工作負載區域的兩個 Azure 虛擬網路。 例如,您可能會有一個多訂用帳戶情境,要在兩個訂用帳戶中裝載開發環境。 您可以針對每個虛擬網路使用不同的邏輯名稱。 例如,您可以使用 DEV-WEEU-SAP01-INFRASTRUCTUREDEV-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 Agent 服務帳戶 [IDENTIFIER]-[SID]-sql-agent-account DEV-WEEU-SAP01-W01-sql-agent-account
SQL Server Agent 服務帳戶密碼 [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 代表執行個體編號。

認證管理

自動化架構會使用服務主體進行基礎結構部署。 建議針對每個工作負載區域使用不同的部署認證 (服務主體)。 架構會將這些認證儲存在部署器的金鑰保存庫中。 然後,架構會在部署程序期間動態擷取這些認證。

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

服務主體建立

若要建立您的服務主體:

  1. 使用有權限建立服務主體的帳戶登入 Azure CLI

  2. 執行命令 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"
    
  3. 注意輸出。 在下一個步驟中,您需要應用程式識別碼 (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"
    }
    
  4. 將「使用者存取管理員」角色指派給您的服務主體。 例如:

    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-samplesgithubusercontent.com 設定部署器
Terraform releases.hashicorp.com、 、 registry.terraform.iocheckpoint-api.hashicorp.com 設定部署器 請參閱安裝 Terraform
Azure CLI 安裝 Azure CLI 設定部署器和部署期間 Azure CLI 安裝的防火牆需求可參照安裝 Azure CLI
PIP bootstrap.pypa.io 設定部署器 請參閱安裝 Ansible
Ansible pypi.org、、pythonhosted.orgfiles.pythonhosted.org、、galaxy.ansible.com'https://ansible-galaxy-ng.s3.dualstack.us-east-1.amazonaws.com' 設定部署器
PowerShell 資源庫 onegetcdn.azureedge.net、 、 psg-prod-centralus.azureedge.netpsg-prod-eastus.azureedge.net 設定 Windows 型系統 請參閱 PowerShell 資源庫
Windows 元件 download.visualstudio.microsoft.com、 、 download.visualstudio.microsoft.comdownload.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 結構

部署架構會為部署成品使用三個不同的存放庫。 針對您自己的參數檔案,最佳做法是將這些檔案保留在您管理的原始檔控制存放庫中。

主要存放庫

此存放庫包含 Terraform 參數檔案,以及所有工作負載區域和系統部署之 Ansible 劇本所需的檔案。

此存放庫的建立方法是將 SAP 部署自動化架構啟動程序存放庫複製到原始檔控制存放庫。

重要

此存放庫必須是 Azure DevOps 專案的預設存放庫。

資料夾結構

下列樣本資料夾階層示範如何建構設定檔以及自動化架構檔案。

資料夾名稱 目錄 描述
BOMS BoM 檔案 用於手動 BoM 下載
部署器 部署器的設定檔 具有部署器設定檔的資料夾,用於環境管理的所有部署。 依環境 - 區域 - 虛擬網路的命名慣例,為每個子資料夾命名。 例如 PROD-WEEU-DEP00-INFRASTRUCTURE
LIBRARY SAP 程式庫的設定檔 具有 SAP 程式庫設定檔的資料夾,用於環境管理的所有部署。 依環境 - 區域 - 虛擬網路的命名慣例,為每個子資料夾命名。 例如 PROD-WEEU-SAP-LIBRARY
橫向 工作負載區域的設定檔 包含設定檔的資料夾,適用於環境管理的所有工作負載區域。 依環境 - 區域 - 虛擬網路的命名慣例,為每個子資料夾命名。 例如 PROD-WEEU-SAP00-INFRASTRUCTURE
系統 SAP 系統的設定檔 包含設定檔的資料夾,適用於環境管理的所有 SAP 系統識別 (SID) 部署。 依環境 - 區域 - 虛擬網路 - SID的命名慣例,為每個子資料夾命名。 例如 PROD-WEEU-SAPO00-ABC

螢幕擷取畫面顯示範例資料夾結構,其中具有 SAP HANA 和多個工作負載環境的個別資料夾。

參數檔案的名稱會變成 Terraform 狀態檔案的名稱。 基於這個原因,請務必使用唯一的參數檔案名稱。

程式碼存放庫

此存放庫包含 Terraform 自動化範本和 Ansible 劇本,以及部署管線和指令碼。 對於大部分的使用案例,請將此存放庫視為唯讀,且請勿加以修改。

若要建立此存放庫,請將 SAP 部署自動化架構存放庫複製到原始檔控制存放庫。

將此存放庫命名為 sap-automation

範例存放庫

此存放庫包含範例用料表檔案和範例 Terraform 設定檔。

若要建立此存放庫,請將 SAP 部署自動化架構範例存放庫複製到原始檔控制存放庫。

將此存放庫命名為 samples

支援的部署情節

自動化架構支援部署至新的和現有的情節

Azure 區域

部署解決方案之前,請務必考慮要使用的 Azure 區域。 視特定情節而定,不同的 Azure 區域可能位於範圍內。

自動化架構支援在多個 Azure 區域中進行部署。 每個區域都會裝載:

  • 部署基礎結構
  • 具有狀態檔案和安裝媒體的 SAP 程式庫
  • 1-N 個工作負載區域
  • 在工作負載區域中的 1-N 個 SAP 系統

部署環境

如果您在某個區域中支援多個工作負載區域,請為部署環境和 SAP 程式庫使用唯一識別碼。 請勿將識別碼用於工作負載區域。 例如,將 MGMT 用於管理用途。

自動化架構也支援在與工作負載區域不同的訂用帳戶中擁有部署環境和 SAP 程式庫。

部署環境提供下列服務:

  • 一或多個部署虛擬機器,其會使用 Terraform 執行基礎結構部署,並使用 Ansible 劇本執行系統設定和 SAP 安裝。
  • 金鑰保存庫,其中包含供 Terraform 部署使用的服務主體身分識別資訊。
  • 提供輸出網際網路連線能力的 Azure 防火牆元件。

部署設定檔會定義區域、環境名稱和虛擬網路資訊。 例如:

# 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 Key Vault,適用於系統認證和部署服務主體。
  • Azure 儲存體帳戶,適用於開機診斷和雲端見證。
  • SAP 系統的共用儲存體 (Azure 檔案儲存體或 Azure NetApp 檔案)。

在設計工作負載區域配置之前,請考慮下列問題:

  • 您的情節需要多少工作負載區域?
  • 您需要在哪些區域中部署工作負載?
  • 您的部署情節為何?

如需詳細資訊,請參閱設定自動化的工作負載區域部署

SAP 系統設定

SAP 系統包含裝載 SAP 應用程式所需的所有 Azure 元件。

設定 SAP 系統之前,請考慮下列問題:

  • 您想要使用哪些資料庫後端?
  • 您需要多少資料庫伺服器?
  • 您的情節是否需要高可用性?
  • 您需要多少應用程式伺服器?
  • 您需要多少 Web 發送器 (如有)?
  • 您需要多少中央服務執行個體?
  • 您需要多大的虛擬機器?
  • 您想要使用哪個虛擬機器映像? 映像是否在 Azure Marketplace 上或自訂?
  • 您要部署至新的或現有的部署案例
  • 您的 IP 配置策略為何? 您要 Azure 設定 IP 或使用自訂設定嗎?

如需詳細資訊,請參閱設定 SAP 系統以進行自動化

部署流程

在規劃部署時,請務必考慮整體流程。 在 Azure 上使用自動化架構進行 SAP 部署有三個主要步驟。

  1. 部署控制平面。 此步驟會部署元件以支援特定 Azure 區域中的 SAP 自動化架構。

    1. 建立部署環境。
    2. 建立 Terraform 狀態檔案的共用儲存體。
    3. 建立 SAP 安裝媒體的共用儲存體。
  2. 部署工作負載區域。 此步驟會部署工作負載區域元件,例如虛擬網路和金鑰保存庫。

  3. 部署系統。 此步驟包含 SAP 系統部署的基礎結構,以及 SAP 設定和 SAP 安裝

命名規範

自動化架構會使用預設命名慣例。 如果您想要使用自訂命名慣例,請在部署之前規劃及定義自訂名稱。 如需詳細資訊,請參閱設定命名慣例

磁碟大小調整

如果您想要設定自訂磁碟大小,請務必在部署之前規劃自訂設定。

後續步驟