I’m always tinkering with things and trying to automate away common things that become annoying. I’m also on the lookout to be a good steward of my company’s resources. And I certainly don’t want to spend any of my own money! To those ends - I’ve assembled some useful hacks that let me quickly access my Azure VMs on demand. It started out as a fun experiment of what’s possible and turned into something I use on a daily basis across all my computers.
Part 1: Create a VM
I’m going to assume you already know how this works. If not, read this first and come back. I use the burstable B-series VMs for my dev boxes. They’re super cheap and work well for my most common workload - a bunch of shell commands, some vim here & there, and then a less common compilation where I want things to run fast.
# Create a dev box resource group az group create -n devbox -l westus2 # Create a VM that you'd like to use, but you don't want to pay to keep running 24/7 az group create -n devbox -g devbox --image UbuntuLTS --size Standard_B4MS
Part 2: Saving $$$ with auto-shutdown
I don’t use all of my VMs every day, and I’m not usually hacking on a remote VM late at night. Azure has a handy feature called
Auto-shutdown that can turn off VMs on a schedule. That is - deallocate them and stop charging me money. Enable it on the VM resource in the Azure Portal.
This is also a handy reminder to ** stop working ** and spend some time with my family. That’s a post for another day
Part 3: But Noel, now my VM is off
I got this far and felt pretty good. But then I realized I had to login to the Azure portal or launch the Azure CLI to start my VM every time I wanted to use it, which was totally lame. And what if I didn’t immediately remember the DNS name or the IP address of the VM I just turned on? More clicking.
I’m willing to wait for a VM to boot up, but I didn’t like the extra steps. I wanted to just press a button, be prompted for my password, and then be dropped inside a VM of my choice.
Part 4: Azure functions to the rescue
So that’s what I built!
StartVirtualMachine is an Azure Function that
* accepts a VM name, and an optional username.
* uses a Service Principal to find the VM by name & start it
* gives you everything you need to enter a password & login
* Linux: redirects and/or links to
* Windows: downloads an
.rdp file to connect
Part 5: Moving cheese is my favorite
So essentially all I’ve done is replace an Azure portal/CLI login with an Azure function token. Traded one password for another. At least now I’ve got a well-known key and an HTTP trigger.
Wait a minute, that’s something useful. I can create a shortcut & add it to the Chrome bookmarks bar!
Part 6: Y u no ssh?
Opening up the RDP for Windows VMs works great. Remote Desktop Connection comes installed with Windows, and I’ve even tested it out with the Microsoft Remote Desktop Android app on a Chromebook.
SSH is up next. Turns out that the Secure Shell Chrome App will interpret my
ssh:// links and do exactly what I want.
I’ve already got my colors, fonts, and keys just the way I want them. So when I click on my bookmark, the function will start my VM and I’m presented with the following
When I’m done with it, I can either run
az vm deallocate or just wait for auto-shutdown to do its job
Worth it? For me, I think so! I use this thing a lot.
Or maybe I’m this guy
What do you think? Is there anything you would add or remove to make this more useful to you?