Поделиться через


Начало работы с SAP Deployment Automation Framework

Быстро приступить к работе с SAP Deployment Automation Framework.

Необходимые компоненты

Чтобы приступить к работе с SAP Deployment Automation Framework, вам потребуется:

  • Подписка Azure. Если у вас еще нет подписки Azure, вы можете создать бесплатную учетную запись.
  • Учетная запись пользователя SAP с разрешениями на скачивание программного обеспечения SAP в среде Azure. Дополнительные сведения о 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
    

Внимание

Если роль администратора доступа пользователей не назначена управляемому удостоверению, вы не можете назначить разрешения с помощью платформы автоматизации.

Создание регистрации приложения для веб-приложения

Платформа развертывания автоматизации SAP может использовать службу приложение Azure для настройки файлов параметров 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. Скопируйте выходные данные. Обязательно сохраните значения для appId, passwordи Tenant.

    Выходные данные сопоставляются со следующими параметрами. Эти параметры используются в последующих шагах с командами автоматизации.

    Имя входных данных параметра Имя вывода
    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 Virtual Key Vault с частной конечной точкой.
  • Создайте общую папку NSF Файлы Azure.
  • Создайте виртуальную машину Azure с диском данных с помощью хранилище класса Premium версии 2.
  • Проверьте доступ к необходимым 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
}

Использование платформы автоматизации развертывания SAP в службах Azure DevOps Services

Использование Azure DevOps упрощает процесс развертывания. Azure DevOps предоставляет конвейеры, которые можно запустить для развертывания инфраструктуры и действий по настройке и установке SAP.

Azure Repos можно использовать для хранения файлов конфигурации. Azure Pipelines предоставляет конвейеры, которые можно использовать для развертывания и настройки инфраструктуры и приложения SAP.

Регистрация в службах Azure DevOps Services

Чтобы использовать Azure DevOps Services, требуется организация Azure DevOps. Организация используется для подключения групп связанных проектов. Используйте рабочую или учебную учетную запись для автоматического подключения организации к идентификатору Microsoft Entra. Чтобы создать учетную запись, откройте Azure DevOps и войдите или создайте новую учетную запись.

Создание среды sap Deployment Automation Framework с помощью Azure DevOps

Чтобы выполнить базовую установку Azure DevOps Services для платформы автоматизации развертывания SAP, можно использовать следующий скрипт.

Откройте среду сценариев PowerShell и скопируйте следующий скрипт и обновите параметры, соответствующие вашей среде.

    $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 и выберите проект. Убедитесь, что репозиторий заполнен и созданы конвейеры.

Внимание

Выполните следующие действия на локальной рабочей станции. Кроме того, убедитесь, что у вас установлена последняя версия Azure CLI, выполнив az upgrade команду.

Дополнительные сведения о настройке Azure DevOps для SAP Deployment Automation Framework см. в статье "Настройка Azure DevOps для платформы автоматизации развертывания SAP".

Создание среды службы автоматизации развертывания SAP без Azure DevOps

Платформу автоматизации развертывания SAP можно запустить из виртуальной машины в Azure. Ниже описано, как создать среду.

Внимание

Убедитесь, что виртуальная машина использует удостоверение, назначаемое системой или назначаемое пользователем, с разрешениями на подписку для создания ресурсов.

Убедитесь, что виртуальная машина установлена следующими предварительными условиями:

  • 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

Следующий шаг