Freigeben über


Starten Sie schnell mit dem SAP Deployment Automation Framework

Starten Sie schnell mit dem SAP Deployment Automation Framework

Voraussetzungen

Starten Sie schnell mit dem SAP Deployment Automation Framework:

  • Ein Azure-Abonnement. Falls Sie über kein Azure-Abonnement verfügen, können Sie ein kostenloses Konto erstellen.
  • Ein SAP-Benutzerkonto mit Berechtigungen zum Herunterladen der SAP-Software in Ihrer Azure-Umgebung. Weitere Informationen zum S-User finden Sie unter SAP S-User.
  • Eine Azure CLI-Installation
  • Eine vom Benutzer zugewiesene Identität (Assigned Identity, MS) oder ein Dienstprinzipal, der für die Bereitstellung der Steuerungsebene verwendet werden soll.
  • Eine vom Benutzer zugewiesene Identität (MS) oder ein Dienstprinzipal, der für die Bereitstellung der Workloadzone verwendet werden soll
  • Eine Möglichkeit zum Erstellen eines Azure DevOps-Projekts, wenn Sie Azure DevOps für die Bereitstellung verwenden möchten.

Einige der Voraussetzungen sind möglicherweise bereits in Ihrer Bereitstellungsumgebung installiert. Sowohl Azure Cloud Shell als auch der Deployer verfügen über Terraform und die installierte Azure CLI.

Erstellen Sie eine benutzerseitig zugewiesene Identität

Das SAP-Automatisierungsbereitstellungsframework kann auch eine vom Benutzer zugewiesene Identität (MSI) für die Bereitstellung verwenden. Stellen Sie sicher, dass Sie ein Konto mit Berechtigungen zum Erstellen von verwalteten Identitäten verwenden, wenn Sie das Skript ausführen, das die Identität erstellt.

  1. Erstellen der verwalteten Identität

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

    Überprüfen Sie die Ausgabe. Zum Beispiel:

       {
         "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. Kopieren Sie die Ausgabedetails.

    Die Ausgabe wird mit den folgenden Parametern angezeigt. Sie verwenden diese Parameter in späteren Schritten mit Automatisierungsbefehlen.

    Parameter-Eingabename Ausgabename
    app_id appId
    msi_id armId
    msi_objectid objectId
  3. Weisen Sie der Identität die Rolle "Mitwirkender" zu.

    export appId="<appId>"
    
    az role assignment create --assignee $msi_objectid  --role "Contributor"  --scope /subscriptions/$ARM_SUBSCRIPTION_ID
    
  4. Weisen Sie optional dem Dienstprinzipal die Rolle Benutzerzugriffsadministrator zu.

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

Wichtig

Wenn Sie der verwalteten Identität nicht die Rolle "Benutzerzugriffsadministrator" zuweisen, können Sie keine Berechtigungen mithilfe des Automatisierungsframeworks zuweisen.

Erstellen einer Anwendungsregistrierung für die Webanwendung

Das SAP-Automatisierungs-Bereitstellungsframework kann einen Azure App Service zum Konfigurieren der TFVARS-Parameterdateien nutzen.

  1. Erstellen Sie die Anwendungsregistrierung.

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

Erstellen eines Dienstprinzipals

Das SAP-Automatisierungs-Bereitstellungsframework kann Dienstprinzipale für die Bereitstellung verwenden.

Wenn Sie den Namen für Ihren Dienstprinzipal auswählen, stellen Sie sicher, dass der Name innerhalb Ihres Azure-Mandanten eindeutig ist. Stellen Sie sicher, dass Sie beim Ausführen des Skripts ein Konto mit Dienstprinzipalerstellungsberechtigungen verwenden.

  1. Erstellen Sie den Dienstprinzipal mit Mitwirkendenberechtigungen.

    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"
    

    Überprüfen Sie die Ausgabe. Zum Beispiel:

    {
        "appId": "<AppId>",
        "displayName": "<environment>-Deployment-Account ",
        "name": "<AppId>",
        "password": "<AppSecret>",
        "tenant": "<TenantId>"
    }
    
  2. Kopieren Sie die Ausgabedetails. Speichern Sie die Werte für appId, password, und Tenant.

    Die Ausgabe wird mit den folgenden Parametern angezeigt. Sie verwenden diese Parameter in späteren Schritten mit Automatisierungsbefehlen.

    Parameter-Eingabename Ausgabename
    spn_id appId
    spn_secret password
    tenant_id tenant
  3. Weisen Sie optional dem Dienstprinzipal die Rolle Benutzerzugriffsadministrator zu.

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

Wichtig

Wenn Sie dem Dienstprinzipal nicht die Rolle Benutzerzugriffsadministrator zuweisen, können Sie keine Berechtigungen mithilfe der Automatisierung zuweisen.

Preflight-Überprüfungen

Sie können das folgende Skript verwenden, um Vorab-Flight-Prüfungen durchzuführen. Das Skript führt die folgenden Prüfungen und Tests durch:

  • Überprüft, ob der Dienstprinzipal über die richtigen Berechtigungen zum Erstellen von Ressourcen im Abonnement verfügt.
  • Überprüft, ob der Dienstprinzipal über Berechtigungen als Benutzerzugriffsadministrator verfügt.
  • Erstellen Sie ein virtuelles Azure-Netzwerk.
  • Erstellen Sie eine virtuelle Azure Key Vault-Instanz mit privatem Endpunkt.
  • Erstellen Sie eine Azure Files-NSF-Freigabe.
  • Erstellen Sie eine Azure-VM mit einem Datenträger mit Storage Premium v2.
  • Überprüfen Sie den Zugriff auf die erforderlichen URLs mithilfe der bereitgestellten VM.

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

Verwenden des SAP-Frameworks zur Automatisierung der Bereitstellung auf Azure über Azure DevOps Services

Die Verwendung von Azure DevOps optimiert den Bereitstellungsprozess. Azure DevOps stellt Pipelines bereit, die Sie ausführen können, um die Infrastrukturbereitstellung sowie die Konfigurations- und SAP-Installationsaktivitäten durchzuführen.

Sie können Azure Repos verwenden, um Ihre Konfigurationsdateien zu speichern. Azure Pipelines stellt Pipelines bereit, die zum Bereitstellen und Konfigurieren der Infrastruktur und der SAP-Anwendung verwendet werden können.

Registrieren für Azure DevOps Services

Sie benötigen eine Azure DevOps-Organisation, um Azure DevOps Services verwenden zu können. Eine Organisation wird verwendet, um Gruppen verwandter Projekte zu verbinden. Verwenden Sie Ihr Geschäfts-, Schul- oder Unikonto, um Ihre Organisation automatisch mit Ihrer Microsoft Entra-ID zu verbinden. Um ein Konto zu erstellen, öffnen Sie Azure DevOps und melden sich an oder erstellen ein neues Konto.

Erstellen der SAP Deployment Automation Framework-Umgebung mit Azure DevOps

Sie können das folgende Skript verwenden, um eine Basisinstallation von Azure Devops Services für das SAP-Framework zur Automatisierung der Bereitstellung auszuführen.

Öffnen Sie PowerShell ISE, kopieren Sie das folgende Skript, und aktualisieren Sie die Parameter entsprechend Ihrer Umgebung.

    $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

Führen Sie das Skript aus, und folgen Sie den Anweisungen. Das Skript öffnet Browserfenster für die Authentifizierung und zur Erledigung von Aufgaben im Azure DevOps-Projekt.

Sie können den Code entweder direkt über GitHub ausführen oder eine Kopie des Codes in Ihr Azure DevOps-Projekt importieren.

Um zu bestätigen, dass das Projekt erstellt wurde, wechseln Sie zum Azure DevOps-Portal und wählen Sie das Projekt aus. Stellen Sie sicher, dass das Repository aufgefüllt wurde und dass die Pipelines erstellt wurden.

Wichtig

Führen Sie die folgenden Schritte auf Ihrer lokalen Arbeitsstation aus. Stellen Sie außerdem sicher, dass Sie die neueste Azure CLI installiert haben, indem Sie den Befehl „az upgrade“ ausführen.

Weitere Informationen zum Konfigurieren von Azure DevOps für SAP Deployment Automation Framework finden Sie unter Configure Azure DevOps for SAP Deployment Automation Framework.

Erstellen der SAP Deployment Automation Framework-Umgebung ohne Azure DevOps

Sie können SAP Deployment Automation Framework von einem virtuellen Computer in Azure aus ausführen. In den folgenden Schritten wird beschrieben, wie Sie die Umgebung erstellen.

Wichtig

Stellen Sie sicher, dass der virtuelle Computer entweder eine vom System zugewiesene oder vom Benutzer zugewiesene Identität mit Berechtigungen für das Abonnement verwendet, um Ressourcen zu erstellen.

Stellen Sie sicher, dass der virtuelle Computer die folgenden Voraussetzungen installiert hat:

  • Git
  • jq
  • unzip
  • virtualenv (wenn auf Ubuntu ausgeführt)

Sie können die erforderlichen Komponenten auf einem virtuellen Ubuntu-Computer mit dem folgenden Befehl installieren:

sudo apt-get install -y git jq unzip virtualenv

Anschließend können Sie die Bereitstellungskomponenten mithilfe der folgenden Befehle installieren:


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

Beispiele

Der Ordner ~/Azure_SAP_Automated_Deployment/samples enthält einen Satz Beispielkonfigurationsdateien, um mit dem Testen des Frameworks für die Bereitstellungsautomatisierung zu beginnen. Sie können sie mit den folgenden Befehlen kopieren:

cd ~/Azure_SAP_Automated_Deployment

cp -Rp samples/Terraform/WORKSPACES ~/Azure_SAP_Automated_Deployment

Nächster Schritt