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
ssh://<username>@<fqdn>
- Windows: downloads an
.rdp
file to connect
- Linux: redirects and/or links to
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!
My bookmark:
- Title:
- Url:
https://my-functions.azurewebsites.net/api/StartVirtualMachine?code=<i_was_not_born_last_night>&vm=devbox&username=noel
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
Summary ๐
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?