If you’re looking for a way to snapshot Azure VMs you will probably have established that unlike pureplay virtualisation (such as Hyper-V or ESXi on-premises) there is no simple snapshot option for a Azure VMs.

It’s possible that Microsoft might add this as a native portal option, but for now, the closest you can get to the convenience of a snapshot is to perform a VHD based point in time restore of a VM in it’s entirety. Yes, you read it correctly – in its entirety!

The process is actually pretty simple:

  • Phase 1: Create “snapshot”
    • establish some basics (connect to your subscription, get VM information, etc.)
    • backup the VM disk(s) to a backup container
    • export the VM config to local machine (and keep safe)
      • this step can be performed before you tinker if you’re going to tinker with VM config or after if not
  • Phase 2: Do whatever you want to do that necessitated you performing a snapshot
  • Phase 3: Restore “snapshot” if required
    • blow away the existing VM (yep. BLOW IT AWAY!)
    • blow away the existing VM disk(s)
    • restore the “snapshot” VM disk(s) to the source container
    • re-provision the VM using the previously exported config file
    • wipe your brow

Although slightly long-winded when compared to the simplicity of native virtualisation snapshots this approach is working nicely for me with demo environments that I need to reset to a known state.

Couple of caveats:

  • I’ve broken the functions out across two ps1 files so it’s simpler to view
  • I’ve built in a check to ensure that a VM being exported is stopped but not deallocated, this is for my needs as I use static IP, site-to-site VPNs and cloud services for demo purposes which I want to control and re-add when restoring the “snapshot”
  • You’ll need to change anything relevant to folders, files and subscriptions, of course

As is now the norm, you fan find the goodies over in GitHub at http://github.com/sebmatthews/powershell

Use with caution, and enjoy!

more to follow…