SAP Deployment Automation Framework の概要

SAP Deployment Automation Frameworkをすぐに使い始めます。

前提条件

SAP Deployment Automation Framework の使用を開始するには、次のものが必要です:

  • Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、無料のアカウントを作成できます。
  • Azure 環境で SAP ソフトウェアをダウンロードするアクセス許可が備わった SAP ユーザー アカウント。 S-User の詳細については、SAP S-User に関するページを参照してください。
  • Azure CLI のインストール。
  • コントロール プレーンのデプロイに使用するユーザー割り当て ID (MS) またはサービス プリンシパル。
  • ワークロード ゾーンのデプロイに使用するユーザー割り当て ID (MS) またはサービス プリンシパル。
  • デプロイに Azure DevOps を使用する場合は、Azure DevOps プロジェクトを作成する機能。

前提条件の一部は、デプロイ環境に既にインストールされている可能性があります。 Azure Cloud Shell とデプロイ元の両方に Terraform と Azure CLI がインストールされています。

ユーザー割り当て ID を作成する

SAP デプロイ自動化フレームワークでは、デプロイにユーザー割り当て ID (MSI) を使用することもできます。 ID を作成するスクリプトを実行するときは、マネージド ID を作成するアクセス許可を持つアカウントを使用してください。

  1. マネージド ID を作成します。

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

    出力結果を確認します。 次に例を示します。

       {
         "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. 出力の詳細をコピーします。

    出力は次のパラメーターにマップされます。 これらのパラメーターは、後の手順でオートメーション コマンドと一緒に使用します。

    パラメーターの入力名 出力名
    app_id appId
    msi_id armId
    msi_objectid objectId
  3. ID に共同作成者ロールを割り当てます。

    export appId="<appId>"
    
    az role assignment create --assignee $msi_objectid  --role "Contributor"  --scope /subscriptions/$ARM_SUBSCRIPTION_ID
    
  4. 必要に応じて、ID にユーザー アクセス管理者ロールを割り当てます。

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

重要

マネージド ID にユーザー アクセス管理者ロールを割り当てないと、自動化フレームワークを使用してアクセス許可を割り当てることはできません。

Web アプリケーションのアプリケーションの登録を作成する

SAP オートメーション デプロイ フレームワークでは、tfvars パラメーター ファイルを構成するために Azure App Service を利用できます。

  1. アプリケーションの登録を作成します。

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

サービス プリンシパルの作成

SAP オートメーション デプロイ フレームワークでは、デプロイにサービス プリンシパルを使用できます。

サービス プリンシパルの名前を選択する場合は、その名前が Azure テナント内で一意なものであることを確認してください。 スクリプトを実行するときは、サービス プリンシパルを作成するアクセス許可を持つアカウントを使用してください。

  1. 共同作成者のアクセス許可を持つサービス プリンシパルを作成します。

    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"
    

    出力結果を確認します。 次に例を示します。

    {
        "appId": "<AppId>",
        "displayName": "<environment>-Deployment-Account ",
        "name": "<AppId>",
        "password": "<AppSecret>",
        "tenant": "<TenantId>"
    }
    
  2. 出力の詳細をコピーします。 appIdpasswordTenant の値を必ず保存してください。

    出力は次のパラメーターにマップされます。 これらのパラメーターは、後の手順でオートメーション コマンドと一緒に使用します。

    パラメーターの入力名 出力名
    spn_id appId
    spn_secret password
    tenant_id tenant
  3. 必要に応じて、サービス プリンシパルにユーザー アクセス管理者ロールを割り当てます。

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

重要

サービス プリンシパルにユーザー アクセス管理者ロールを割り当てないと、自動化フレームワークを使用してアクセス許可を割り当てることはできません。

フライト前のチェック

次のスクリプトを使用して、事前の確認を行うことができます。 この検証スクリプトでは、次のチェックとテストが実行されます。

  • サービス プリンシパルに、サブスクリプションにリソースを作成するための適切なアクセス許可があるかどうかを確認する
  • サービス プリンシパルに、ユーザー アクセス管理者のアクセス許可があるかどうかを確認する
  • Azure 仮想ネットワークを作成します。
  • プライベート エンドポイントを使用して Azure Virtual Key Vault を作成する。
  • Azure Files NSF 共有を作成する。
  • Premium Storage v2 を使用して、データ ディスクを含む Azure Virtual Machine を作成する。
  • デプロイされた仮想マシンを使用して、必要な URL へのアクセスを確認する

$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 から SAP デプロイ自動化フレームワークを使用する

Azure DevOps を使用すると、デプロイ プロセスが効率化されます。 Azure DevOps には、インフラストラクチャのデプロイと構成と SAP のインストール アクティビティを実行するために実行できるパイプラインが用意されています。

Azure Repos を使用して、構成ファイルを保存できます。 Azure Pipelines から提供されるパイプラインは、インフラストラクチャと SAP アプリケーションのデプロイと構成に使用できます。

Azure DevOps Services にサインアップする

Azure DevOps Services を使用するには、Azure DevOps 組織が必要です。 組織は、関連するプロジェクトのグループを結合するために使用されます。 職場または学校アカウントを使用して、組織を Microsoft Entra ID に自動的に接続します。 アカウントを作成するには、 Azure DevOps を開き、サインインするか、新しいアカウントを作成します。

Azure DevOps を使用して SAP デプロイ自動化フレームワーク環境を作成する

次のスクリプトを使用して、SAP デプロイ自動化フレームワーク用の Azure DevOps Services の基本的なインストールを行うことができます。

PowerShell ISE を開き、次のスクリプトをコピーし、環境に合わせてパラメーターを更新します。

    $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

スクリプトを実行し、手順に従います。 このスクリプトを実行すると、認証用と Azure DevOps プロジェクトのタスクを実行するためのブラウザー ウィンドウが開きます。

GitHub から直接コードを実行するか、コードのコピーを Azure DevOps プロジェクトにインポートするかを選択できます。

プロジェクトが作成されたことを確認するには、Azure DevOps ポータルに移動し、プロジェクトを選択します。 リポジトリが設定されたこと、およびパイプラインが作成されたことを確認します。

重要

ローカル ワークステーションで次の手順を実行します。 また、az upgrade コマンドを実行して、最新の Azure CLI がインストールされていることも確認します。

SAP デプロイ自動化フレームワーク用に Azure DevOps を構成する方法については、SAP デプロイ自動化フレームワークのための Azure DevOps の構成に関するページを参照してください。

Azure DevOps を使用せずに SAP Deployment Automation Framework 環境を作成する

Azure の仮想マシンから SAP Deployment Automation Framework を実行できます。 次のステップでは、環境を作成する方法について説明します。

重要

仮想マシンが、リソースを作成するためのサブスクリプションに対するアクセス許可を持つシステム割り当て ID またはユーザー割り当て ID を使用していることを確認します。

仮想マシンに次の前提条件がインストールされていることを確認します:

  • git
  • jq
  • unzip
  • virtualenv (Ubuntu で実行されている場合)

次のコマンドを使用して、Ubuntu 仮想マシンに前提条件をインストールできます:

sudo apt-get install -y git jq unzip virtualenv

その後、次のコマンドを使用して、デプロイ元 コンポーネントをインストールできます:


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

サンプル

~/Azure_SAP_Automated_Deployment/samples フォルダーには、デプロイオートメーションフレームワークのテストを開始するための一連のサンプル構成ファイルが含まれています。 次のコマンドを使用してコピーできます:

cd ~/Azure_SAP_Automated_Deployment

cp -Rp samples/Terraform/WORKSPACES ~/Azure_SAP_Automated_Deployment

次のステップ