Mastering Azure CLI

Mastering Azure CLI

I grew up with Perl, tcsh, bash, sh, awk, sed, grep, pico, vi, command.com and cmd.exe. Building scripts, batch files and little automation here and there was the norm for me and many others of that era.

I’m especially proud of a set of .BAT files and VBScripts that connected to one of the very first Logitech USB webcams to retrieve a near real-time image of the coffee pot. “Yup, still coffee left I better hurry.” I ran this between 2002 and 2004 until someone dropped the webcam and broke it.

352×288 px should be enough for everyone

We then got a proper GUI with Windows 95. Operating Systems before this, such as IBM’s OS/2, and Microsoft’s Windows 3.1 and 3.11 did have pretty splendid GUIs but Windows 95 brought the thinking together in a cohesive way.

Suddenly it was all about using a mouse. I started missing out on keyboard shortcuts, quick commands and tricks to become more efficient. I still run ncpa.cpl at least once a day.

Fast forward to late 2006 when PowerShell was first released. We got an inkling of hope amidst working with just a mouse. Since then PowerShell has become a norm for IT Pros and even for some developers. Many things have changed and evolved since then and Microsoft Azure has naturally embraced PowerShell since the beginning.

Until someone came up with the idea of a cross-platform command-line tool that is not PowerShell – the Azure CLI.

This short guide is my attempt to help anyone else moving from PowerShell to Azure CLI or anyone just wanting to do things more efficiently from a command prompt.

What is Azure CLI?

Azure CLI is a cross-platform command line tool, that is used to manage and administrate Microsoft Azure. It doesn’t replace PowerShell but provides an alternative to using managing Azure from the command line. You can still continue using PowerShell, the APIs, and the Azure Portal just like before. Azure CLI provides some tangible benefits over these, especially over PowerShell in that it’s very nimble and can be quickly installed on almost any platform.

Installing Azure CLI

Depending on how you plan on using Azure CLI there are multiple ways of running it. The easiest is to run it locally in Windows, macOS, Linux, or in a Docker container. You can also use Windows Subsystem for Linux (WSL) on Windows 10 also.

Install on Windows

To install on Windows, download and run the installer here.

Install on macOS

To install on macOS, run:

brew update && brew install azure-cli

Install on Linux

To install on Linux, depending on your distro and other settings, follow instructions here.

Install on WSL (on Windows 10)

To install Azure CLI on WSL, you’ll need to install WSL first. To do this, download a Linux distro from the App Store first – in this example I’m downloading Ubuntu 18.04 on a Windows 10:

curl.exe -L -o ubuntu-1804.appx https://aka.ms/wsl-ubuntu-1804

Next, enable the Windows Subsystem for Linux using PowerShell:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

Note: You’ll need to reboot after this command has completed.

Finally, execute ubuntu-1804.appx. Once this is finished run the distro from the Start menu. This will initiate the final configuration for WSL.

If you make a typo, WSL will let you know

When WSL is running you can continue with Linux installation based on your distro.

Install on Docker

Once you have Docker running and configured, simply run:

docker run -it microsoft/azure-cli

This pulls down the Docker container for Azure CLI and runs it interactively using a pseudo-TTY to initiate a Bash shell.

Azure CLI in Azure Cloud Shell

Another alternative is to use Azure CLI in Azure Cloud Shell, which runs within the Azure Portal. Simply open https://portal.azure.com and click the Cloud Shell icon in the top toolbar.

Azure CLI even works in a mobile phone (via the Azure App or Azure Cloud Shell)

Azure CLI in Visual Studio Code

You can also run Azure CLI in Visual Studio Code. It’s available as a free extension.

Don’t ignore this recommendation

Visual Studio Code gives Intellisense support and awesome help when writing larger Azure CLI scripts. All you have to do is to name your script files with the .azcli extension for VSCode to pick them up.

Authenticating to Azure

Time to start using Azure CLI! To login, you can simply type

az login

Note: If you’re using Azure Cloud Shell you do not need to login separately.

If you have multiple Azure subscriptions with different (or overlapping) login accounts, use a specific device code:

az login --use-device-code

This allows you to manually perform the authentication in a browser session of your choice. Once completed you can close the browser tab and Azure CLI completes the login.

There are plenty of other options for logging in, especially if you choose to use a Service Principal or prompt for a username and password. To see these options, use:

az login --help

You can verify you’ve logged in successfully by listing your Azure subscriptions:

az account list --all

To set the default subscription for Azure CLI, use:

az account set --subscription "Azure Production"

Using Azure CLI interactively

Finally, regardless of which OS and platform you’re using to run Azure CLI you can install an extension to run Azure CLI interactively. To do this, run:

az interactive

Formatting output data

To format data your commands in Azure CLI produce you can choose between the following formats:

  • json – regular JSON output
  • jsonc – JSON.. but with colors!
  • yaml – output in “YAML Ain’t Markup Language”
  • table – ASCII table because 1985
  • tsv – Tab-separated values

To try any of these out, consider the following command:

az cloud list

This lists all the available Clouds, such as GCC, Azure German Cloud and similar that you can access. To try out the different outputs, simply append –output <type>:

az cloud list --output table

You can also configure one of these output types to be the default. Simply run:

az configure

And select the preferred options.

What can you do with Azure CLI?

So, now what? You’ve successfully logged in to Azure with Azure CLI and it just works. You can, in practice, do anything with Azure CLI you would typically use Azure Portal for.

Most Azure CLI commands follow the same notion of az <command group> <parameters>. You can substitute command group with dozens of options, such as group (for Resource Group), vm (for Virtual Machine), webapp (for Web App) and similar.

To view all available command groups simply type

az

Managing Resource Groups

To list all Resource Groups, use:

az group list

To create a new Resource Group, type:

az group create --name <name> --location <azurelocation>

To destroy a Resource Group, and when you really mean it, use:

az group delete --resource-group foo --yes --no-wait

–yes confirms the deletion, and –no-wait to allow the script to continue without waiting for the command to finish.

Using variables with Azure CLI

When your scripts and provisioning logic start to grow it makes sense to use variables. Depending on your platform you set variables in the usual way. In Windows command prompt, this would be with:

SET VARIABLE=value

In PowerShell, it’s almost the same:

$VARIABLE=value

To use a variable in your Azure CLI script simply reference it according to your platforms notation. In PowerShell this would be:

$LOCATION=westeurope
az group create --name foo --location $LOCATION

Finding commands

Sometimes you might not be sure which command to use for the task at hand. To search for commands use:

az find --search-query <keyword>

Abbreviations

Sometimes you’ll want to shorten your commands. Azure CLI supports plenty of abbreviations that you typically find out when using different commands for the first time. As an example, this command:

az group show --resource-group aci-demo

Could be written in shorter form as:

az group show -g aci-demo

References

I typically find I get by with just using the az command and only occasionally looking up for additional help. For this I use the official Azure CLI reference.

Thanks for reading – and happy scripting with Azure CLI!