Comece com o SAP Deployment Automation Framework

Comece rapidamente com SAP Deployment Automation Framework.

Pré-requisitos

Para começar a trabalhar com o SAP Deployment Automation Framework, é necessário:

  • Uma assinatura do Azure. Caso não tenha uma assinatura do Azure, é possível criar uma conta gratuita.
  • Uma conta de usuário SAP com permissões para baixar o software SAP em seu ambiente do Azure. Para obter mais informações sobre o S-User, consulte SAP S-User.
  • Uma instalação da CLI do Azure.
  • Uma MS (Identidade Atribuída) do usuário ou uma entidade de serviço a ser usada para a implantação do plano de controle.
  • Uma Identidade Atribuída (MS) de usuário ou uma entidade de serviço a ser usada para a implantação da zona de carga de trabalho.
  • Uma capacidade de criar um projeto do Azure DevOps se você quiser usar o Azure DevOps para implantação.

Alguns dos pré-requisitos já podem estar instalados no ambiente de implantação. O Azure Cloud Shell e o implantador vêm com o Terraform e a CLI do Azure instalados.

Criar uma identidade atribuída pelo usuário

O SAP Automation Deployment Framework também pode usar uma MSI (identidade atribuída pelo usuário) para a implantação. Use uma conta com permissões para criar identidades gerenciadas ao executar o script que cria a identidade.

  1. Crie a identidade gerenciada.

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

    Examine a saída. Por exemplo:

       {
         "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. Copie os detalhes de saída.

    A saída é mapeada para os parâmetros a seguir. Use esses parâmetros em etapas posteriores, com comandos de automação.

    Nome de entrada do parâmetro Nome de saída
    app_id appId
    msi_id armId
    msi_objectid objectId
  3. Atribua a função de Colaborador à identidade.

    export appId="<appId>"
    
    az role assignment create --assignee $msi_objectid  --role "Contributor"  --scope /subscriptions/$ARM_SUBSCRIPTION_ID
    
  4. Opcionalmente, atribua a função Administrador de Acesso do Usuário à identidade.

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

Importante

Se você não atribuir a função Administrador de Acesso do Usuário à identidade gerenciada, não poderá atribuir permissões usando a estrutura de automação.

Criar um registro de aplicativo para o aplicativo Web

A estrutura de implantação de automação do SAP pode aproveitar um Serviço de Aplicativo do Azure para configurar os arquivos de parâmetro tfvars.

  1. Criar o registro de aplicativo.

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

Criar uma entidade de serviço

A estrutura de implantação da automação do SAP pode usar entidades de serviço para a implantação.

Quando você escolher um nome para sua entidade de serviço, certifique-se de que o nome seja exclusivo em seu locatário do Azure. Use uma conta com permissões de criação de entidades de serviço ao executar o script.

  1. Crie a entidade de serviço com permissões de Colaborador.

    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"
    

    Examine a saída. Por exemplo:

    {
        "appId": "<AppId>",
        "displayName": "<environment>-Deployment-Account ",
        "name": "<AppId>",
        "password": "<AppSecret>",
        "tenant": "<TenantId>"
    }
    
  2. Copie os detalhes de saída. Certifique-se de salvar os valores para appId, password, e Tenant.

    A saída é mapeada para os parâmetros a seguir. Use esses parâmetros em etapas posteriores, com comandos de automação.

    Nome de entrada do parâmetro Nome de saída
    spn_id appId
    spn_secret password
    tenant_id tenant
  3. Opcionalmente, atribua a função Administrador de acesso do usuário à entidade de serviço.

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

Importante

Se você não atribuir a função administrador de acesso do usuário à entidade de serviço, não poderá atribuir permissões usando a estrutura de automação.

Verificações antes do voo

Você pode usar o script a seguir para executar verificações pré-lançamento. O script executa as seguintes verificações e testes:

  • Verifica se a entidade de serviço tem as permissões corretas para criar recursos na assinatura.
  • Verifica se a entidade de serviço tem permissões de Administrador de acesso do usuário.
  • Crie uma Rede Virtual do Azure.
  • Cria um cofre de chaves virtual do Azure com um ponto de extremidade privado.
  • Cria um compartilhamento NSF de Arquivos do Azure.
  • Cria uma Máquina Virtual do Azure com um disco de dados usando o Armazenamento Premium v2.
  • Verifica o acesso às URLs necessárias usando a máquina virtual implantada.

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

Usar a Estrutura de Automação de Implantação do SAP no Azure DevOps Services

O uso do Azure DevOps simplifica o processo de implantação. O Azure DevOps fornece pipelines que podem ser executados para executar a implantação da infraestrutura e as atividades de configuração e instalação do SAP.

Você pode usar o Azure Repos para armazenar seus arquivos de configuração. O Azure Pipelines fornece pipelines, que podem ser usados para implantar e configurar a infraestrutura e o aplicativo SAP.

Inscreva-se para o Azure DevOps Services

Para usar o Azure DevOps Services, você precisa de uma organização do Azure DevOps. Uma organização é usada para conectar grupos de projetos relacionados. Use sua conta corporativa ou de estudante para conectar automaticamente sua organização ao seu Microsoft Entra ID. Para criar uma conta, abra o Azure DevOps e entre ou crie uma conta.

Criar o ambiente do SAP Deployment Automation Framework com o Azure DevOps

Você pode usar o script a seguir para fazer uma instalação básica do Azure DevOps Services para SAP Deployment Automation Framework.

Abra o ISE do PowerShell, copie o script a seguir e atualize os parâmetros para corresponder ao seu 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

Execute o script e siga as instruções. O script abre janelas do navegador para autenticação e para executar tarefas no projeto do Azure DevOps.

Você pode optar por executar o código diretamente do GitHub ou importar uma cópia do código para o projeto do Azure DevOps.

Para confirmar se o projeto foi criado, acesse o portal do Azure DevOps e selecione o projeto. Verifique se o repositório foi preenchido e se os pipelines foram criados.

Importante

Execute as etapas a seguir em sua estação de trabalho local. Verifique também se você tem a CLI do Azure mais recente instalada, executando o comando az upgrade.

Para obter mais informações sobre como configurar o Azure DevOps para o SAP Deployment Automation Framework, consulte Configure o Azure DevOps para SAP Deployment Automation Framework.

Criar o ambiente do SAP Deployment Automation Framework sem o Azure DevOps

Você pode executar o SAP Deployment Automation Framework em uma máquina virtual no Azure. As etapas a seguir descrevem como criar o ambiente.

Importante

Verifique se a máquina virtual está usando uma identidade atribuída pelo sistema ou atribuída pelo usuário com permissões na assinatura para criar recursos.

Verifique se a máquina virtual tem os seguintes pré-requisitos instalados:

  • Git
  • jq
  • unzip
  • virtualenv (se estiver em execução no Ubuntu)

Você pode instalar os pré-requisitos em uma máquina virtual do Ubuntu usando o seguinte comando:

sudo apt-get install -y git jq unzip virtualenv

Em seguida, você pode instalar os componentes do implantador usando os seguintes comandos:


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

Exemplos

A pasta ~/Azure_SAP_Automated_Deployment/samples contém um conjunto de arquivos de configuração de exemplo para começar a testar a estrutura de automação da implantação. Você pode copiá-los usando os seguintes comandos:

cd ~/Azure_SAP_Automated_Deployment

cp -Rp samples/Terraform/WORKSPACES ~/Azure_SAP_Automated_Deployment

Próxima etapa