Back to Blog
3 min read

Azure Site Recovery: Disaster Recovery as a Service

Azure Site Recovery (ASR) keeps business apps running during outages. Replicate VMs to Azure or between regions—failover in minutes, not hours.

Replication Scenarios

SourceDestination
Azure VMsAnother Azure region
VMware VMsAzure
Hyper-V VMsAzure
Physical serversAzure
AWS EC2Azure

Azure-to-Azure DR

# Enable replication for Azure VM
az site-recovery replication-protected-item create \
    --resource-group myRG \
    --vault-name my-asr-vault \
    --fabric-name azure-eastus \
    --protection-container eastus-container \
    --name myVM-asr \
    --policy-id /subscriptions/.../replicationPolicies/24-hour-retention \
    --provider-specific-details '{
        "instanceType": "A2A",
        "fabricObjectId": "/subscriptions/.../virtualMachines/myVM",
        "recoveryResourceGroupId": "/subscriptions/.../resourceGroups/dr-rg",
        "recoveryCloudServiceId": null,
        "recoveryAvailabilitySetId": null,
        "recoveryAzureNetworkId": "/subscriptions/.../virtualNetworks/dr-vnet"
    }'

Replication Policy

{
    "name": "24HourRetention",
    "properties": {
        "recoveryPointRetentionInHours": 24,
        "applicationConsistentSnapshotFrequencyInHours": 4,
        "multiVmSyncStatus": "Enabled"
    }
}

Recovery Plans

{
    "name": "FullStackRecovery",
    "properties": {
        "primaryFabricId": "/Subscriptions/.../replicationFabrics/eastus",
        "recoveryFabricId": "/Subscriptions/.../replicationFabrics/westus",
        "failoverDeploymentModel": "ResourceManager",
        "groups": [
            {
                "groupType": "Shutdown",
                "replicationProtectedItems": []
            },
            {
                "groupType": "Boot",
                "replicationProtectedItems": [
                    { "id": "/...db-server-asr" }
                ],
                "startGroupActions": [
                    {
                        "actionName": "WaitForDBReady",
                        "failoverTypes": ["PlannedFailover", "UnplannedFailover"],
                        "failoverDirections": ["PrimaryToRecovery"],
                        "customDetails": {
                            "instanceType": "ScriptActionDetails",
                            "path": "scripts/wait-db.ps1",
                            "timeout": "PT10M"
                        }
                    }
                ]
            },
            {
                "groupType": "Boot",
                "replicationProtectedItems": [
                    { "id": "/...web-server-1-asr" },
                    { "id": "/...web-server-2-asr" }
                ]
            }
        ]
    }
}

Test Failover

# Test failover (non-disruptive)
az site-recovery replication-protected-item test-failover \
    --resource-group myRG \
    --vault-name my-asr-vault \
    --fabric-name azure-eastus \
    --protection-container eastus-container \
    --name myVM-asr \
    --failover-direction PrimaryToRecovery \
    --network-id /subscriptions/.../virtualNetworks/test-vnet

Planned Failover

# Planned failover (with data sync)
az site-recovery replication-protected-item planned-failover \
    --resource-group myRG \
    --vault-name my-asr-vault \
    --fabric-name azure-eastus \
    --protection-container eastus-container \
    --name myVM-asr \
    --failover-direction PrimaryToRecovery

Unplanned Failover

# Emergency failover
az site-recovery replication-protected-item unplanned-failover \
    --resource-group myRG \
    --vault-name my-asr-vault \
    --fabric-name azure-eastus \
    --protection-container eastus-container \
    --name myVM-asr \
    --failover-direction PrimaryToRecovery \
    --source-site-operations NotRequired

Commit and Reprotect

# Commit failover
az site-recovery replication-protected-item commit \
    --resource-group myRG \
    --vault-name my-asr-vault \
    --fabric-name azure-westus \
    --protection-container westus-container \
    --name myVM-asr

# Reprotect (reverse replication)
az site-recovery replication-protected-item reprotect \
    --resource-group myRG \
    --vault-name my-asr-vault \
    --fabric-name azure-westus \
    --protection-container westus-container \
    --name myVM-asr

Monitoring

// ASR events in Log Analytics
AzureDiagnostics
| where Category == "AzureSiteRecoveryReplicatedItems"
| where replicationHealth_s != "Normal"
| project TimeGenerated, Resource, replicationHealth_s, failoverHealth_s
| order by TimeGenerated desc

RTO/RPO

MetricTarget
RPONear-zero (continuous replication)
RTOMinutes (automated failover)

Site Recovery: peace of mind for disaster recovery.

Michael John Peña

Michael John Peña

Senior Data Engineer based in Sydney. Writing about data, cloud, and technology.