Thursday, December 23, 2021

How does Azure Development copy SAP systems?

In Azure Development, we regularly test SAP workloads on Azure infrastructure. The intention is not to do quality assurance of SAP products. Instead, we want to ensure that Azure works well with a typical SAP HANA and NetWeaver workload. Therefore, we created complete SAP landscapes in distinct Azure resource groups. For testing new Azure features (new VM SKUs, new Azure OS or drivers, new hardware), we copy the SAP resource group (to a different region, subscription, or tenant), change some Azure resource properties (for example VM size) and start the SAP workload. This is done using the PowerShell script RGCOPY (Resource Group COPY).


RGCOPY has been developed for copying an SAP landscape. Therefore, it supports the most important Azure resources needed for SAP, like virtual machines, managed disks, and Load Balancers. However, you can use RGCOPY also for other workloads. It is used internally at Microsoft but it might be useful for customers, too. Therefore, we released this script as Open Source in GitHub at


RGCOPY is not an SAP deployment tool. It simply copies the most important resources of an Azure resource group (source RG) to a new resource group (target RG). It does not change anything inside the VMs like changing the server name at the OS level or applying SAP license keys.


RGCOPY has been tested on Windows, Linux and in Azure Cloud Shell. RGCOPY can change several resource properties in the target RG:

  • VM size, disk SKU, disk performance tier, disk caching, Write Accelerator, Accelerated Networking
  • Adding, removing, and changing Proximity Placement Groups, Availability Sets, and Availability Zones.
  • Converting disks to NetApp volumes and vice versa (on Linux VMs).
  • Converting Ultra SSD disks to Premium SSD disks and vice versa (on Linux VMs).
  • Merging single VMs into an existing subnet (target RG already exists)
  • Cloning a VM inside a resource group (target RG = source RG)

Here is a simple example of starting the PowerShell script RGCOPY. For details, check the documentation at


$rgcopyParameter = @{
    sourceRG        = 'contoso_source_rg'
    targetRG        = 'contoso_target_rg'
    targetLocation  = 'eastus'
    setVmSize       = 'Standard_E32s_v3'
    setDiskSku      = 'Premium_LRS'
.\rgcopy.ps1 @rgcopyParameter



Posted at