Aracılığıyla paylaş


SAP Deployment Automation Framework ile çalışmaya başlama

SAP Deployment Automation Framework ile hızlı bir şekilde çalışmaya başlayın.

Önkoşullar

SAP Deployment Automation Framework ile çalışmaya başlamak için şunları yapmanız gerekir:

  • Azure aboneliği. Azure aboneliğiniz yoksa ücretsiz hesap oluşturabilirsiniz.
  • Sap yazılımını Azure ortamınıza indirme izinlerine sahip bir SAP Kullanıcı hesabı. S-User hakkında daha fazla bilgi için bkz . SAP S-User.
  • Azure CLI yüklemesi.
  • Denetim düzlemi dağıtımı için kullanılacak kullanıcı Tarafından Atanan Kimlik (MS) veya hizmet sorumlusu.
  • İş yükü bölgesi dağıtımı için kullanılacak kullanıcı Tarafından Atanan Kimlik (MS) veya hizmet sorumlusu.
  • Dağıtım için Azure DevOps kullanmak istiyorsanız Azure DevOps projesi oluşturma olanağı.

Önkoşullardan bazıları dağıtım ortamınıza zaten yüklenmiş olabilir. Hem Azure Cloud Shell hem de dağıtıcı Terraform ve Azure CLI yüklü olarak gelir.

Kullanıcı tarafından atanan kimlik oluşturma

SAP otomasyonu dağıtım çerçevesi, dağıtım için kullanıcı tarafından atanan kimliği (MSI) de kullanabilir. Kimliği oluşturan betiği çalıştırırken yönetilen kimlikler oluşturmak için izinlere sahip bir hesap kullandığınızdan emin olun.

  1. Yönetilen kimliği oluşturun.

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

    Çıktıyı gözden geçirin. Örneğin:

       {
         "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. Çıkış ayrıntılarını kopyalayın.

    Çıkış aşağıdaki parametrelerle eşler. Bu parametreleri otomasyon komutlarıyla sonraki adımlarda kullanacaksınız.

    Parametre giriş adı Çıkış adı
    app_id appId
    msi_id armId
    msi_objectid objectId
  3. Kimliğe Katkıda Bulunan rolünü atayın.

    export appId="<appId>"
    
    az role assignment create --assignee $msi_objectid  --role "Contributor"  --scope /subscriptions/$ARM_SUBSCRIPTION_ID
    
  4. İsteğe bağlı olarak, kimliğe Kullanıcı Erişimi Yöneticisi rolünü atayın.

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

Önemli

Yönetilen kimliğe Kullanıcı Erişim Yöneticisi rolünü atamazsanız, otomasyon çerçevesini kullanarak izin atayamazsınız.

Web uygulaması için uygulama kaydı oluşturma

SAP otomasyonu dağıtım çerçevesi, tfvars parametre dosyalarını yapılandırmak için bir Azure Uygulaması Hizmetinden yararlanabilir.

  1. Uygulama kaydını oluşturun.

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

Hizmet sorumlusu oluşturma

SAP otomasyonu dağıtım çerçevesi, dağıtım için hizmet sorumlularını kullanabilir.

Hizmet sorumlunuz için bir ad seçtiğinizde, adın Azure kiracınızda benzersiz olduğundan emin olun. Betiği çalıştırırken hizmet sorumluları oluşturma izinlerine sahip bir hesap kullandığınızdan emin olun.

  1. Katkıda Bulunan izinleriyle hizmet sorumlusunu oluşturun.

    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"
    

    Çıktıyı gözden geçirin. Örneğin:

    {
        "appId": "<AppId>",
        "displayName": "<environment>-Deployment-Account ",
        "name": "<AppId>",
        "password": "<AppSecret>",
        "tenant": "<TenantId>"
    }
    
  2. Çıkış ayrıntılarını kopyalayın. , passwordve Tenantdeğerlerini appIdkaydettiğinizden emin olun.

    Çıkış aşağıdaki parametrelerle eşler. Bu parametreleri otomasyon komutlarıyla sonraki adımlarda kullanacaksınız.

    Parametre giriş adı Çıkış adı
    spn_id appId
    spn_secret password
    tenant_id tenant
  3. İsteğe bağlı olarak, Hizmet sorumlusuna Kullanıcı Erişimi Yöneticisi rolünü atayın.

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

Önemli

Hizmet sorumlusuna Kullanıcı Erişim Yöneticisi rolünü atamazsanız, otomasyon çerçevesini kullanarak izin atayamazsınız.

Uçuş öncesi denetimler

Uçuş öncesi denetimleri gerçekleştirmek için aşağıdaki betiği kullanabilirsiniz. Betik aşağıdaki denetimleri ve testleri gerçekleştirir:

  • Hizmet sorumlusunun abonelikte kaynak oluşturmak için doğru izinlere sahip olup olmadığını denetler.
  • Hizmet sorumlusunun kullanıcı Erişim Yöneticisi izinlerine sahip olup olmadığını denetler.
  • Azure Sanal Ağ oluşturma.
  • Özel uç noktası olan bir Azure Sanal Anahtar Kasası oluşturun.
  • Azure Dosyalar NSF paylaşımı oluşturun.
  • Premium Depolama v2 kullanarak veri diski ile bir Azure Sanal Makinesi oluşturun.
  • Dağıtılan sanal makineyi kullanarak gerekli URL'lere erişimi denetleyin.

$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'dan SAP Deployment Automation Framework kullanma

Azure DevOps'un kullanılması dağıtım işlemini kolaylaştırır. Azure DevOps, altyapı dağıtımını ve yapılandırma ile SAP yükleme etkinliklerini gerçekleştirmek için çalıştırabileceğiniz işlem hatları sağlar.

Yapılandırma dosyalarınızı depolamak için Azure Repos'ı kullanabilirsiniz. Azure Pipelines, altyapıyı ve SAP uygulamasını dağıtmak ve yapılandırmak için kullanılabilen işlem hatları sağlar.

Azure DevOps Services'a kaydolma

Azure DevOps Services'i kullanmak için bir Azure DevOps kuruluşuna ihtiyacınız vardır. Bir kuruluş, ilgili proje gruplarını bağlamak için kullanılır. Kuruluşunuzu Microsoft Entra Id'nize otomatik olarak bağlamak için iş veya okul hesabınızı kullanın. Hesap oluşturmak için Azure DevOps'u açın ve oturum açın veya yeni bir hesap oluşturun.

Azure DevOps ile SAP Deployment Automation Framework ortamı oluşturma

SAP Deployment Automation Framework için Azure DevOps Services'ın temel yüklemesini yapmak için aşağıdaki betiği kullanabilirsiniz.

PowerShell ISE'yi açın ve aşağıdaki betiği kopyalayın ve parametreleri ortamınızla eşleşecek şekilde güncelleştirin.

    $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

Betiği çalıştırın ve yönergeleri izleyin. Betik, kimlik doğrulaması ve Azure DevOps projesinde görevleri gerçekleştirmek için tarayıcı pencerelerini açar.

Kodu doğrudan GitHub'dan çalıştırmayı seçebilir veya kodun bir kopyasını Azure DevOps projenize aktarabilirsiniz.

Projenin oluşturulduğunu onaylamak için Azure DevOps portalına gidin ve projeyi seçin. Deponun dolduruldığından ve işlem hatlarının oluşturulduğundan emin olun.

Önemli

Yerel iş istasyonunuzda aşağıdaki adımları çalıştırın. Ayrıca komutunu çalıştırarak en son Azure CLI'yi yüklediğinizden az upgrade emin olun.

SAP Deployment Automation Framework için Azure DevOps yapılandırma hakkında daha fazla bilgi için bkz . SAP Deployment Automation Framework için Azure DevOps'yi yapılandırma.

Azure DevOps olmadan SAP Deployment Automation Framework ortamı oluşturma

SAP Deployment Automation Framework'u Azure'daki bir sanal makineden çalıştırabilirsiniz. Aşağıdaki adımlarda ortamın nasıl oluşturulacağı açıklanmaktadır.

Önemli

Sanal makinenin kaynak oluşturmak için abonelikte izinleri olan sistem tarafından atanan veya kullanıcı tarafından atanan bir kimlik kullandığından emin olun.

Sanal makinede aşağıdaki önkoşulların yüklü olduğundan emin olun:

  • git
  • jq
  • Unzip
  • virtualenv (Ubuntu üzerinde çalışıyorsa)

Aşağıdaki komutu kullanarak bir Ubuntu sanal makinesine önkoşulları yükleyebilirsiniz:

sudo apt-get install -y git jq unzip virtualenv

Ardından aşağıdaki komutları kullanarak dağıtıcı bileşenlerini yükleyebilirsiniz:


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

Örnekler

klasör, ~/Azure_SAP_Automated_Deployment/samples dağıtım otomasyonu çerçevesini test etmeye başlamak için bir dizi örnek yapılandırma dosyası içerir. Aşağıdaki komutları kullanarak bunları kopyalayabilirsiniz:

cd ~/Azure_SAP_Automated_Deployment

cp -Rp samples/Terraform/WORKSPACES ~/Azure_SAP_Automated_Deployment

Sonraki adım