共用方式為


開始使用 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 自動化部署架構也可以使用使用者指派的身分識別 (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
    msi_objectid objectId
  3. 將參與者角色指派給身分識別。

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

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

重要

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

建立 Web 應用程式的應用程式註冊

SAP 自動化部署架構可以利用 Azure App 服務 來設定 tfvars 參數檔案。

  1. 建立應用程式註冊。

       $ApplicationName="<App Registration Name>"
       $MSI_objectId="<msi_objectid>"
    
        Write-Host "Creating an App Registration for" $ApplicationName -ForegroundColor Green
    
        if (Test-Path $manifestPath) { Write-Host "Removing manifest.json" ; Remove-Item $manifestPath }
        Add-Content -Path manifest.json -Value '[{"resourceAppId":"00000003-0000-0000-c000-000000000000","resourceAccess":[{"id":"e1fe6dd8-ba31-4d61-89e7-88639da4683d","type":"Scope"}]}]'
    
        $APP_REGISTRATION_ID = $(az ad app create --display-name $ApplicationName --enable-id-token-issuance true --sign-in-audience AzureADMyOrg --required-resource-access $manifestPath --query "appId" --output tsv)
    
        Write-Host "App Registration created with App ID: $APP_REGISTRATION_ID"
    
        Write-Host "Waiting for the App Registration to be created" -ForegroundColor Green
        Start-Sleep -s 20
    
        $ExistingData = $(az ad app list --all --filter "startswith(displayName, '$ApplicationName')" --query  "[?displayName=='$ApplicationName']| [0]" --only-show-errors) | ConvertFrom-Json
    
        $APP_REGISTRATION_OBJECTID = $ExistingData.id
    
        if (Test-Path $manifestPath) { Write-Host "Removing manifest.json" ; Remove-Item $manifestPath }
    
        Write-Host "Configuring authentication for the App Registration" -ForegroundColor Green
        az rest --method POST --uri "https://graph.microsoft.com/beta/applications/$APP_REGISTRATION_OBJECTID/federatedIdentityCredentials\" --body "{'name': 'ManagedIdentityFederation', 'issuer': 'https://login.microsoftonline.com/$ARM_TENANT_ID/v2.0', 'subject': '$MSI_objectId', 'audiences': [ 'api://AzureADTokenExchange' ]}"
    
        $API_URL="https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/~/ProtectAnAPI/appId/$APP_REGISTRATION_ID/isMSAApp~/false"
    
        Write-Host "The browser will now open, Please Add a new scope, by clicking the '+ Add a new scope link', accept the default name and click 'Save and Continue'"
        Write-Host "In the Add a scope page enter the scope name 'user_impersonation'. Choose 'Admins and Users' in the who can consent section, next provide the Admin consent display name 'Access the SDAF web application' and 'Use SDAF' as the Admin consent description, accept the changes by clicking the 'Add scope' button"
    
        Start-Process $API_URL
        Read-Host -Prompt "Once you have created and validated the scope, Press any key to continue"
    
    
    

建立服務主體

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. 複製輸出詳細數據。 請務必儲存 appIdpasswordTenant 的值。

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

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

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

重要

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

發行小眾測試版前的檢查

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

  • 檢查服務主體是否具有在訂用帳戶中建立資源的正確許可權。
  • 檢查服務主體是否具有使用者存取系統管理員許可權。
  • 建立 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。

如需如何設定適用於 SAP 部署自動化架構的 Azure DevOps 詳細資訊,請參閱設定適用於 SAP 部署自動化架構的 Azure DevOps

建立不含 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

後續步驟