Condividi tramite


Introduzione a SAP Deployment Automation Framework

Introduzione rapidamente a SAP Deployment Automation Framework.

Prerequisiti

Per iniziare a usare SAP Deployment Automation Framework, è necessario:

  • Una sottoscrizione di Azure. Se non hai una sottoscrizione Azure, crea un account gratuito.
  • Un account utente SAP con autorizzazioni per scaricare il software SAP nell'ambiente Azure. Per altre informazioni su S-User, vedere SAP S-User.
  • Installazione dell'interfaccia della riga di comando di Azure.
  • Un'identità assegnata dall'utente (MS) o un'entità servizio da usare per la distribuzione del piano di controllo.
  • Un'identità assegnata dall'utente (MS) o un'entità servizio da usare per la distribuzione della zona del carico di lavoro.
  • Possibilità di creare un progetto Azure DevOps se si vuole usare Azure DevOps per la distribuzione.

Alcuni dei prerequisiti potrebbero essere già installati nell'ambiente di distribuzione. Sia Azure Cloud Shell che il deployer sono dotati di Terraform e dell'interfaccia della riga di comando di Azure installata.

Creare un'identità assegnata dall'utente

Il framework di distribuzione di automazione SAP può anche usare un'identità assegnata dall'utente per la distribuzione. Assicurarsi di usare un account con autorizzazioni per creare identità gestite durante l'esecuzione dello script che crea l'identità.

  1. Creare l'identità gestita.

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

    Esaminare l'output. Ad esempio:

       {
         "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. Copiare i dettagli dell'output.

    L'output esegue il mapping ai parametri seguenti. Questi parametri vengono usati nei passaggi successivi, con i comandi di automazione.

    Nome dell'input del parametro Nome output
    app_id appId
    msi_id armId
    msi_objectid objectId
  3. Assegnare il ruolo Collaboratore all'identità.

    export appId="<appId>"
    
    az role assignment create --assignee $msi_objectid  --role "Contributor"  --scope /subscriptions/$ARM_SUBSCRIPTION_ID
    
  4. Facoltativamente, assegnare il ruolo Amministratore accesso utenti all'identità.

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

Importante

Se non si assegna il ruolo Amministratore accesso utenti all'identità gestita, non è possibile assegnare autorizzazioni usando il framework di automazione.

Creare una registrazione dell'applicazione per l'applicazione Web

Il framework di distribuzione di automazione SAP può sfruttare un servizio di app Azure per configurare i file di parametri tfvars.

  1. Creare la registrazione dell'applicazione.

       $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"
    
    
    

Creare un'entità servizio

Il framework di distribuzione di automazione SAP può usare le entità servizio per la distribuzione.

Quando si sceglie un nome per l'entità servizio, assicurarsi che il nome sia univoco all'interno del tenant di Azure. Assicurarsi di usare un account con autorizzazioni di creazione delle entità servizio durante l'esecuzione dello script.

  1. Creare l'entità servizio con autorizzazioni collaboratore.

    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"
    

    Esaminare l'output. Ad esempio:

    {
        "appId": "<AppId>",
        "displayName": "<environment>-Deployment-Account ",
        "name": "<AppId>",
        "password": "<AppSecret>",
        "tenant": "<TenantId>"
    }
    
  2. Copiare i dettagli dell'output. Assicurarsi di salvare i valori per appId, passworde Tenant.

    L'output esegue il mapping ai parametri seguenti. Questi parametri vengono usati nei passaggi successivi, con i comandi di automazione.

    Nome dell'input del parametro Nome output
    spn_id appId
    spn_secret password
    tenant_id tenant
  3. Facoltativamente, assegnare il ruolo Amministratore accesso utenti all'entità servizio.

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

Importante

Se non si assegna il ruolo Amministratore accesso utenti all'entità servizio, non è possibile assegnare autorizzazioni usando il framework di automazione.

Controlli prima del volo

È possibile usare lo script seguente per eseguire controlli preliminari. Lo script esegue i controlli e i test seguenti:

  • Controlla se l'entità servizio dispone delle autorizzazioni corrette per creare risorse nella sottoscrizione.
  • Controlla se l'entità servizio dispone delle autorizzazioni di amministratore accesso utente.
  • Creare una rete virtuale di Azure.
  • Creare un'istanza di Azure Virtual Key Vault con endpoint privato.
  • Creare una condivisione NSF File di Azure.
  • Creare una macchina virtuale di Azure con disco dati usando Archiviazione Premium v2.
  • Controllare l'accesso agli URL necessari usando la macchina virtuale distribuita.

$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
}

Usare SAP Deployment Automation Framework da Azure DevOps Services

L'uso di Azure DevOps semplifica il processo di distribuzione. Azure DevOps offre pipeline che è possibile eseguire per eseguire la distribuzione dell'infrastruttura e le attività di configurazione e installazione SAP.

È possibile usare Azure Repos per archiviare i file di configurazione. Azure Pipelines fornisce pipeline, che possono essere usate per distribuire e configurare l'infrastruttura e l'applicazione SAP.

Iscriversi ad Azure DevOps Services

Per usare Azure DevOps Services, è necessaria un'organizzazione di Azure DevOps. Un'organizzazione viene usata per connettere gruppi di progetti correlati. Usare l'account aziendale o dell'istituto di istruzione per connettere automaticamente l'organizzazione all'ID Microsoft Entra. Per creare un account, aprire Azure DevOps e accedere o creare un nuovo account.

Creare l'ambiente SAP Deployment Automation Framework con Azure DevOps

È possibile usare lo script seguente per eseguire un'installazione di base di Azure DevOps Services per SAP Deployment Automation Framework.

Aprire PowerShell ISE e copiare lo script seguente e aggiornare i parametri in modo che corrispondano all'ambiente.

    $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

Eseguire lo script e seguire le istruzioni. Lo script apre le finestre del browser per l'autenticazione e per l'esecuzione di attività nel progetto Azure DevOps.

È possibile scegliere di eseguire il codice direttamente da GitHub oppure importare una copia del codice nel progetto Azure DevOps.

Per verificare che il progetto sia stato creato, passare al portale di Azure DevOps e selezionare il progetto. Assicurarsi che il repository sia stato popolato e che le pipeline siano state create.

Importante

Eseguire i passaggi seguenti nella workstation locale. Assicurarsi anche di avere installato l'interfaccia della riga di comando di Azure più recente eseguendo il az upgrade comando .

Per altre informazioni su come configurare Azure DevOps per SAP Deployment Automation Framework, vedere Configurare Azure DevOps per SAP Deployment Automation Framework.

Creare l'ambiente SAP Deployment Automation Framework senza Azure DevOps

È possibile eseguire SAP Deployment Automation Framework da una macchina virtuale in Azure. I passaggi seguenti descrivono come creare l'ambiente.

Importante

Assicurarsi che la macchina virtuale usi un'identità assegnata dal sistema o assegnata dall'utente con autorizzazioni per la sottoscrizione per creare risorse.

Verificare che la macchina virtuale disponga dei prerequisiti seguenti:

  • git
  • jq
  • unzip
  • virtualenv (se in esecuzione in Ubuntu)

È possibile installare i prerequisiti in una macchina virtuale Ubuntu usando il comando seguente:

sudo apt-get install -y git jq unzip virtualenv

È quindi possibile installare i componenti di deployer usando i comandi seguenti:


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

Esempi

La ~/Azure_SAP_Automated_Deployment/samples cartella contiene un set di file di configurazione di esempio per avviare il test del framework di automazione della distribuzione. È possibile copiarli usando i comandi seguenti:

cd ~/Azure_SAP_Automated_Deployment

cp -Rp samples/Terraform/WORKSPACES ~/Azure_SAP_Automated_Deployment

Passaggio successivo