Dela via


Kom igång med SAP Deployment Automation Framework

Kom igång snabbt med SAP Deployment Automation Framework.

Förutsättningar

För att komma igång med SAP Deployment Automation Framework behöver du:

  • En Azure-prenumeration Om du inte har någon Azure-prenumeration kan du skapa ett kostnadsfritt konto.
  • Ett SAP-användarkonto med behörighet att ladda ned SAP-programvaran i din Azure-miljö. Mer information om S-User finns i SAP S-User.
  • En Azure CLI-installation .
  • En användartilldelad identitet (MS) eller ett huvudnamn för tjänsten som ska användas för distributionen av kontrollplanet.
  • En användartilldelad identitet (MS) eller ett huvudnamn för tjänsten som ska användas för distributionen av arbetsbelastningszonen.
  • En möjlighet att skapa ett Azure DevOps-projekt om du vill använda Azure DevOps för distribution.

Vissa av förhandskraven kanske redan är installerade i distributionsmiljön. Både Azure Cloud Shell och distribueraren levereras med Terraform och Azure CLI installerat.

Skapa en användartilldelad identitet

Sap Automation-distributionsramverket kan också använda en användartilldelad identitet (MSI) för distributionen. Se till att använda ett konto med behörighet att skapa hanterade identiteter när du kör skriptet som skapar identiteten.

  1. Skapa den hanterade identiteten.

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

    Granska utdata. Till exempel:

       {
         "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. Kopiera utdatainformationen.

    Utdata mappar till följande parametrar. Du använder dessa parametrar i senare steg med automationskommandon.

    Parameterindatanamn Utdatanamn
    app_id appId
    msi_id armId
    msi_objectid objectId
  3. Tilldela rollen Deltagare till identiteten.

    export appId="<appId>"
    
    az role assignment create --assignee $msi_objectid  --role "Contributor"  --scope /subscriptions/$ARM_SUBSCRIPTION_ID
    
  4. Du kan också tilldela rollen Administratör för användaråtkomst till identiteten.

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

Viktigt!

Om du inte tilldelar rollen Administratör för användaråtkomst till den hanterade identiteten kan du inte tilldela behörigheter med hjälp av automationsramverket.

Skapa en programregistrering för webbprogrammet

Sap Automation-distributionsramverket kan använda en Azure App Service för att konfigurera tfvars-parameterfilerna.

  1. Skapa programregistreringen.

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

Skapa ett huvudnamn för tjänsten

Sap Automation-distributionsramverket kan använda tjänstens huvudnamn för distribution.

När du väljer ett namn för tjänstens huvudnamn kontrollerar du att namnet är unikt i din Azure-klientorganisation. Se till att använda ett konto med behörigheter för att skapa tjänstens huvudnamn när du kör skriptet.

  1. Skapa tjänstens huvudnamn med deltagarbehörigheter.

    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"
    

    Granska utdata. Till exempel:

    {
        "appId": "<AppId>",
        "displayName": "<environment>-Deployment-Account ",
        "name": "<AppId>",
        "password": "<AppSecret>",
        "tenant": "<TenantId>"
    }
    
  2. Kopiera utdatainformationen. Spara värdena för appId, passwordoch Tenant.

    Utdata mappar till följande parametrar. Du använder dessa parametrar i senare steg med automationskommandon.

    Parameterindatanamn Utdatanamn
    spn_id appId
    spn_secret password
    tenant_id tenant
  3. Du kan också tilldela rollen Administratör för användaråtkomst till tjänstens huvudnamn.

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

Viktigt!

Om du inte tilldelar rollen Administratör för användaråtkomst till tjänstens huvudnamn kan du inte tilldela behörigheter med hjälp av automationsramverket.

Förhandskontroller

Du kan använda följande skript för att utföra kontroller före flygning. Skriptet utför följande kontroller och tester:

  • Kontrollerar om tjänstens huvudnamn har rätt behörighet att skapa resurser i prenumerationen.
  • Kontrollerar om tjänstens huvudnamn har behörighet som administratör för användaråtkomst.
  • Skapa ett virtuellt Azure-nätverk.
  • Skapa ett virtuellt Azure-nyckelvalv med en privat slutpunkt.
  • Skapa en Azure Files NSF-resurs.
  • Skapa en virtuell Azure-dator med datadisk med Premium Storage v2.
  • Kontrollera åtkomsten till de url:er som krävs med hjälp av den distribuerade virtuella datorn.

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

Använda SAP Deployment Automation Framework från Azure DevOps Services

Användning av Azure DevOps effektiviserar distributionsprocessen. Azure DevOps tillhandahåller pipelines som du kan köra för att utföra infrastrukturdistributionen och konfigurations- och SAP-installationsaktiviteterna.

Du kan använda Azure Repos för att lagra dina konfigurationsfiler. Azure Pipelines tillhandahåller pipelines som kan användas för att distribuera och konfigurera infrastrukturen och SAP-programmet.

Registrera dig för Azure DevOps Services

Om du vill använda Azure DevOps Services behöver du en Azure DevOps-organisation. En organisation används för att ansluta grupper av relaterade projekt. Använd ditt arbets- eller skolkonto för att automatiskt ansluta din organisation till ditt Microsoft Entra-ID. Om du vill skapa ett konto öppnar du Azure DevOps och loggar in eller skapar ett nytt konto.

Skapa SAP Deployment Automation Framework-miljön med Azure DevOps

Du kan använda följande skript för att utföra en grundläggande installation av Azure DevOps Services för SAP Deployment Automation Framework.

Öppna PowerShell ISE och kopiera följande skript och uppdatera parametrarna så att de matchar din miljö.

    $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

Kör skriptet och följ anvisningarna. Skriptet öppnar webbläsarfönster för autentisering och för att utföra uppgifter i Azure DevOps-projektet.

Du kan välja att antingen köra koden direkt från GitHub eller importera en kopia av koden till ditt Azure DevOps-projekt.

Bekräfta att projektet har skapats genom att gå till Azure DevOps-portalen och välja projektet. Kontrollera att lagringsplatsen har fyllts i och att pipelines har skapats.

Viktigt!

Kör följande steg på din lokala arbetsstation. Se också till att du har den senaste Azure CLI installerad genom att az upgrade köra kommandot.

Mer information om hur du konfigurerar Azure DevOps för SAP Deployment Automation Framework finns i Konfigurera Azure DevOps för SAP Deployment Automation Framework.

Skapa SAP Deployment Automation Framework-miljön utan Azure DevOps

Du kan köra SAP Deployment Automation Framework från en virtuell dator i Azure. Följande steg beskriver hur du skapar miljön.

Viktigt!

Kontrollera att den virtuella datorn använder antingen en systemtilldelad eller användartilldelad identitet med behörighet för prenumerationen för att skapa resurser.

Kontrollera att den virtuella datorn har följande förutsättningar installerade:

  • git
  • jq
  • Packa upp
  • virtualenv (om det körs på Ubuntu)

Du kan installera kraven på en virtuell Ubuntu-dator med hjälp av följande kommando:

sudo apt-get install -y git jq unzip virtualenv

Du kan sedan installera distributionskomponenterna med hjälp av följande kommandon:


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

Exempel

Mappen ~/Azure_SAP_Automated_Deployment/samples innehåller en uppsättning exempelkonfigurationsfiler för att börja testa ramverket för distributionsautomatisering. Du kan kopiera dem med hjälp av följande kommandon:

cd ~/Azure_SAP_Automated_Deployment

cp -Rp samples/Terraform/WORKSPACES ~/Azure_SAP_Automated_Deployment

Gå vidare