開始使用SAP部署自動化架構

快速 開始使用SAP部署自動化架構

必要條件

若要開始使用 SAP 部署自動化架構,您需要:

  • Azure 訂用帳戶。 如果您沒有 Azure 訂用帳戶,您可以建立免費帳戶
  • 具有在 Azure 環境中下載 SAP 軟體 許可權的 SAP 用戶帳戶。 如需 S-User 的詳細資訊,請參閱 SAP S-User
  • Azure CLI 安裝。
  • 使用者指派的身分識別 (MS) 或服務主體,用於控制平面部署。
  • 使用者指派的身分識別 (MS) 或要用於工作負載區域部署的服務主體。
  • 如果您想要使用 Azure DevOps 進行部署,則可以建立 Azure DevOps 專案。

某些必要條件可能已經安裝在您的部署環境中。 Azure Cloud Shell 和部署者都隨附已安裝 Terraform 和 Azure CLI。

建立服務主體

SAP 自動化部署架構會使用服務主體進行部署。

當您為服務主體選擇名稱時,請確定該名稱在您的 Azure 租使用者中是唯一的。 執行腳本時,請務必使用具有服務主體建立許可權的帳戶。

  1. 建立具有參與者許可權的服務主體。

    export    ARM_SUBSCRIPTION_ID="<subscriptionId>"
    export control_plane_env_code="LAB"
    
    az ad sp create-for-rbac --role="Contributor"  --scopes="/subscriptions/$ARM_SUBSCRIPTION_ID"   --name="$control_plane_env_code-Deployment-Account"
    

    檢閱輸出。 例如:

    {
        "appId": "<AppId>",
        "displayName": "<environment>-Deployment-Account ",
        "name": "<AppId>",
        "password": "<AppSecret>",
        "tenant": "<TenantId>"
    }
    
  2. 複製輸出詳細數據。 請務必儲存、 passwordTenant的值appId

    輸出會對應至下列參數。 您可以在後續步驟中使用這些參數,並搭配自動化命令。

    參數輸入名稱 輸出名稱
    spn_id appId
    spn_secret password
    tenant_id tenant
  3. 選擇性地將使用者存取 管理員 istrator 角色指派給服務主體。

    export appId="<appId>"
    
    az role assignment create --assignee $appId --role "User Access Administrator"  --scope /subscriptions/$ARM_SUBSCRIPTION_ID
    

重要

如果您未將使用者存取 管理員 istrator 角色指派給服務主體,則無法使用自動化架構來指派許可權。

建立使用者指派的身分識別

SAP 自動化部署架構也可以使用使用者指派的身分識別 (MSI) 進行部署。 執行建立身分識別的腳本時,請務必使用具有許可權的帳戶來建立受控識別。

  1. 建立受控識別。

    export    ARM_SUBSCRIPTION_ID="<subscriptionId>"
    export control_plane_env_code="LAB"
    
    az identity create --name ${control_plane_env_code}-Deployment-Identity --resource-group <ExistingResourceGroup>
    

    檢閱輸出。 例如:

       {
         "clientId": "<appId>",
         "id": "<armId>",
         "location": "<location>",
         "name": "${control_plane_env_code}-Deployment-Identity",
         "principalId": "<objectId>",
         "resourceGroup": "<ExistingResourceGroup>",
         "systemData": null,
         "tags": {},
         "tenantId": "<TenantId>",
         "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
       }
    
  2. 複製輸出詳細數據。

    輸出會對應至下列參數。 您可以在後續步驟中使用這些參數,並搭配自動化命令。

    參數輸入名稱 輸出名稱
    app_id appId
    msi_id armId
  3. 將參與者角色指派給身分識別。

    export appId="<appId>"
    
    az role assignment create --assignee $appId  --role "Contributor"  --scope /subscriptions/$ARM_SUBSCRIPTION_ID
    
  4. 選擇性地將使用者存取 管理員 istrator 角色指派給身分識別。

    export appId="<appId>"
    
    az role assignment create --assignee $appId  --role "User Access Administrator"  --scope /subscriptions/$ARM_SUBSCRIPTION_ID
    

重要

如果您未將使用者存取 管理員 istrator 角色指派給受控識別,則無法使用自動化架構來指派許可權。

發行小眾測試版前的檢查

您可以使用下列腳本來執行正式發行前小眾測試。 文稿會執行下列檢查和測試:

  • 檢查服務主體是否具有在訂用帳戶中建立資源的正確許可權。
  • 檢查服務主體是否具有使用者 Access 管理員 istrator 許可權。
  • 建立 Azure 虛擬網絡。
  • 使用私人端點建立 Azure 虛擬 金鑰保存庫。
  • 建立 Azure 檔案儲存體 NSF 共用。
  • 使用 進階儲存體 v2 建立具有數據磁碟的 Azure 虛擬機。
  • 使用已部署的虛擬機檢查所需 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-SDAFReadiness.ps1
}
else {
.\Test-SDAFReadiness.ps1
}

從 Azure DevOps Services 使用 SAP 部署自動化架構

使用 Azure DevOps 可簡化部署程式。 Azure DevOps 提供您可以執行的管線,以執行基礎結構部署和設定和 SAP 安裝活動。

您可以使用 Azure Repos 來儲存組態檔。 Azure Pipelines 提供管線,可用來部署和設定基礎結構和 SAP 應用程式。

註冊 Azure DevOps Services

若要使用 Azure DevOps Services,您需要 Azure DevOps 組織。 組織用來連接相關專案的群組。 使用您的公司或學校帳戶,將組織自動連線到您的 Microsoft Entra ID。 若要建立帳戶,請開啟 Azure DevOps 並登入或建立新的帳戶。

使用 Azure DevOps 建立 SAP 部署自動化架構環境

您可以使用下列腳本來執行適用於 SAP 部署自動化架構的 Azure DevOps Services 基本安裝。

開啟 PowerShell ISE 並複製下列腳本,並更新參數以符合您的環境。

    $Env:SDAF_ADO_ORGANIZATION = "https://dev.azure.com/ORGANIZATIONNAME"
    $Env:SDAF_ADO_PROJECT = "SAP Deployment Automation Framework"
    $Env:SDAF_CONTROL_PLANE_CODE = "MGMT"
    $Env:SDAF_WORKLOAD_ZONE_CODE = "DEV"
    $Env:SDAF_ControlPlaneSubscriptionID = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    $Env:SDAF_WorkloadZoneSubscriptionID = "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy"
    $Env:ARM_TENANT_ID="zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz"

    $UniqueIdentifier = Read-Host "Please provide an identifier that makes the service principal names unique, for instance a project code"

    $confirmation = Read-Host "Do you want to create a new Application registration (needed for the Web Application) y/n?"
    if ($confirmation -eq 'y') {
        $Env:SDAF_APP_NAME = $UniqueIdentifier + " SDAF Control Plane"
    }

    else {
      $Env:SDAF_APP_NAME = Read-Host "Please provide the Application registration name"
    }

    $confirmation = Read-Host "Do you want to create a new Service Principal for the Control plane y/n?"
    if ($confirmation -eq 'y') {
        $Env:SDAF_MGMT_SPN_NAME = $UniqueIdentifier + " SDAF " + $Env:SDAF_CONTROL_PLANE_CODE + " SPN"
    }
        else {
      $Env:SDAF_MGMT_SPN_NAME = Read-Host "Please provide the Control Plane Service Principal Name"
    }

    $confirmation = Read-Host "Do you want to create a new Service Principal for the Workload zone y/n?"
    if ($confirmation -eq 'y') {
        $Env:SDAF_WorkloadZone_SPN_NAME = $UniqueIdentifier + " SDAF " + $Env:SDAF_WORKLOAD_ZONE_CODE + " SPN"
    }
        else {
      $Env:SDAF_WorkloadZone_SPN_NAME = Read-Host "Please provide the Workload Zone Service Principal Name"
    }

    if ( $PSVersionTable.Platform -eq "Unix") {
        if ( Test-Path "SDAF") {
        }
        else {
            $sdaf_path = New-Item -Path "SDAF" -Type Directory
        }
    }
    else {
        $sdaf_path = Join-Path -Path $Env:HOMEDRIVE -ChildPath "SDAF"
        if ( Test-Path $sdaf_path) {
        }
        else {
            New-Item -Path $sdaf_path -Type Directory
        }
    }

    Set-Location -Path $sdaf_path

    if ( Test-Path "New-SDAFDevopsProject.ps1") {
        remove-item .\New-SDAFDevopsProject.ps1
    }

    Invoke-WebRequest -Uri https://raw.githubusercontent.com/Azure/sap-automation/main/deploy/scripts/New-SDAFDevopsProject.ps1 -OutFile .\New-SDAFDevopsProject.ps1 ; .\New-SDAFDevopsProject.ps1

執行腳本並遵循指示。 腳本會開啟瀏覽器視窗以進行驗證,並在 Azure DevOps 專案中執行工作。

您可以選擇直接從 GitHub 執行程式碼,也可以將程式代碼的複本匯入您的 Azure DevOps 專案。

若要確認已建立專案,請移至 Azure DevOps 入口網站,然後選取專案。 請確定已填入存放庫,並已建立管線。

重要

在您的本機工作站上執行下列步驟。 此外,請執行 az upgrade 命令,確定您已安裝最新的 Azure CLI。

如需如何設定 Azure DevOps for SAP Deployment Automation Framework 的詳細資訊,請參閱 設定 Azure DevOps for SAP Deployment Automation Framework

建立不含 Azure DevOps 的 SAP 部署自動化架構環境

您可以從 Azure 中的虛擬機執行 SAP 部署自動化架構。 下列步驟說明如何建立環境。

重要

請確定虛擬機使用系統指派或使用者指派的身分識別,並具有訂用帳戶的許可權來建立資源。

請確定虛擬機器已安裝下列必要條件:

  • git
  • jq
  • unzip
  • virtualenv (如果在 Ubuntu 上執行)

您可以使用下列命令,在 Ubuntu 虛擬機上安裝必要條件:

sudo apt-get install -y git jq unzip virtualenv

接著,您可以使用下列命令來安裝部署器元件:


wget https://raw.githubusercontent.com/Azure/sap-automation/main/deploy/scripts/configure_deployer.sh -O configure_deployer.sh
chmod +x ./configure_deployer.sh
./configure_deployer.sh

# Source the new variables

. /etc/profile.d/deploy_server.sh

範例

資料夾 ~/Azure_SAP_Automated_Deployment/samples 包含一組範例組態檔,以開始測試部署自動化架構。 您可以使用下列命令來複製它們:

cd ~/Azure_SAP_Automated_Deployment

cp -Rp samples/Terraform/WORKSPACES ~/Azure_SAP_Automated_Deployment

後續步驟