As well as Getting Web Services Up and Running on Amazon Web Services (AWS) Using Vagrant and the AWS CLI, we can also use Vagrant to provision machines on other web hosts, such as the Microsoft Azure cloud paltform. In this post, I’ll describe a command line based recipe for doing just that.
To start with, you’ll need to get a Microsoft Azure account.
When you’ve done that, install the Azure command line interface (CLI). On a Mac:
curl -L https://aka.ms/InstallAzureCli | bash
For me, this installed to ~/bin/az
.
With the client installed, login:
~/bin/az login
This requires a token based handshake with a Microsoft authentication website.
List the range of machine images available (if you haven’t set the path to az
, use the full ~/bin/az
):
az vm image list
There was only one that looked suitable to me for my purposes: Canonical:UbuntuServer:16.04-LTS:latest.
To run the provisioner, we need a Subscription ID; this will be used to set the vagrant .subscription_id parameter. These are listed on the Azure Portal.
We also need to create an Active Directory Service Principal:
az ad sp create-for-rbac
This information will be used to configure the Vagrantfile: the appId
sets the vagrant .client_id, the password
the .client_secret, and the tenant
the .tenant_id.
You can also inspect the application in the App Registrations area of the Azure Portal.
Now let’s set up Vagrant. We’ll use the vagrant-azure
plugin:
vagrant plugin install vagrant-azure --plugin-version '2.0.0.pre6'
We need to add a dummy box:
vagrant box add azure https://github.com/azure/vagrant-azure/raw/v2.0/dummy.box
Now let’s set up the Vagrantfile:
config.vm.provider :azure do |azure, override| #The path to your ssh keys override.ssh.private_key_path = '~/.ssh/id_rsa' #The default box we added override.vm.box = 'azure' #Set a territory azure.location="uksouth" #Provide your own group and VM name azure.resource_group_name="tm351azuretest" azure.vm_name="tm351azurevmtest" # Set an appropriate image (the UbuntuServer is actually the current default value) azure.vm_image_urn="Canonical:UbuntuServer:16.04-LTS:latest" #Use a valid subscription ID #https://portal.azure.com/#blade/HubsExtension/MyAccessBlade/resourceId/ azure.subscription_id = ENV['AZURE_SUBSCRIPTION_ID'] # Using details from the Active Directory Service Principal setup azure.tenant_id = ENV['AZURE_TENANT_ID'] azure.client_id = ENV['AZURE_CLIENT_ID'] azure.client_secret = ENV['AZURE_CLIENT_SECRET'] end
With the Vagrantfile parameters in place, we should then be able call the Azure provider using the command:
vagrant up --provider=azure
But we’re still not quite done… If you’re running services on the VM, populated from elsewhere in the Vagranfile, you’ll need to add some security rules to make the ports accessible. I’m running services on ports 80,35180 and 35181 for example:
az network nsg rule create -g tm351azuretest --nsg-name tm351azurevmtest-vagrantNSG --priority 130 --direction Inbound --destination-port-ranges 8888 --access Allow --name port_8888 az network nsg rule create -g tm351azuretest --nsg-name tm351azurevmtest-vagrantNSG --priority 130 --direction Inbound --destination-port-ranges 35181 --access Allow --name port_35181
Now we can lookup the IP address of the server:
az vm list-ip-addresses
and see if our applications are there :-)
One thought on “Getting Web Services Up and Running on MicroSoft Azure Using Vagrant and the Azure CLI”
Comments are closed.