Let's face facts—in many cases, it is simply much easier to manage Microsoft Azure resources by typing from a command line than by click-click-clicking through the Azure Portal. The good news for us is that Microsoft has given us the Azure Cloud Shell. Let's learn all about it.

Timothy Warner

Timothy Warner is a Microsoft Cloud and Datacenter Management Most Valuable Professional (MVP) who is based in Nashville, TN. Check out his Azure and Windows Server video training at Pluralsight, and feel free to reach out to Tim via Twitter.

Understand the use case ^

Azure administrators have two programmatic interfaces into Azure Resource Manager (ARM):

In my experience as a cloud architect, most of my customers tend to rely on Azure CLI for "quick in, quick out" tasks like checking resource status, stopping virtual machines (VMs), and so forth, and on Azure PowerShell for deployments and scripting automation.

Another point in the Azure CLI's favor is that it is a Python application that runs on Windows, macOS, and Linux. To be sure, PowerShell is also technically cross-platform, but frankly I find the CLI much easier to use in non-Windows environments.

The Azure Cloud Shell renders the cross-platform grumbling moot because it runs directly in your web browser! Microsoft promises that Azure PowerShell will eventually make its way to the Azure Cloud Shell, but at the moment we have Azure CLI v2.0. Today's tutorial covers the Cloud Shell behavior; please check out my other 4sysops articles to get a head start on learning CLI syntax:

Start an Azure Cloud Shell instance by clicking the Cloud Shell button in Azure Portal's top navigation bar as shown in the next screenshot. At first launch, it'll prompt you to allow Azure to create a storage account and a file share to hold the underlying Docker container. (We'll cover what's going on under the hood in the next section of this post.)

Start the Azure Cloud Shell for the first time

Start the Azure Cloud Shell for the first time

The Azure Cloud Shell gives us two great conveniences. Number one, it automatically authenticates you to Azure in the CLI because the Portal already authenticated you to Azure. Number two, your session state and preferences will persist across sessions as long as you allow Azure to deploy the storage account.

Underlying architecture ^

Let's take a closer look at what happens when you start the Azure Cloud Shell for the first time. The next screenshot shows you the prompt to create a storage account:

Prompt to create storage for Cloud Shell

Prompt to create storage for Cloud Shell

I strongly suggest you allow Azure to store your Cloud Shell environment. It's true that you pay for storage costs as usual, but they are quite small because Azure creates a standard storage account with locally redundant storage (LRS) replication.

You heard that correctly—the Cloud Shell runs as an Ubuntu Linux Docker container. Take a look at the following Visio diagram I cooked up to show you exactly what Azure resources the Cloud Shell deploys to your target subscription.

Cloud Shell resource structure

Cloud Shell resource structure

That .img file is a 5-GB disk image that stores your $Home directory contents. Every time you start the Cloud Shell, Azure mounts the image in the following path in the container VM:


Managing the Cloud Console window ^

Let's take a closer look at the Cloud Console interface so we can make sure you're comfortable with how it works. Examine the following annotated screenshot, and then I'll explain each major part:

Azure Cloud Console window

Azure Cloud Console window

  • A: Because this is an Ubuntu (Debian) Linux container, you have the bash shell by default. However, a cloud PowerShell console is currently in private preview.
  • B: Restart the Cloud Shell. The default session timeout is 10 minutes.
  • C: This links to an overview docs article.
  • D: Submit feedback to the Microsoft feature team.
  • E: This links to the Azure CLI v2.0 command reference.
  • F: Drag and drop to resize the Cloud Shell window vertically.
  • G: Maximize works as expected. Minimize makes the session disappear, but you can get it back by clicking the Cloud Shell button. Closing the window actually terminates the underlying container; click the Cloud Shell button to restart it.

Built-in tooling and file share access ^

We can confirm that, at least as of this writing, the Azure Cloud Shell runs an instance of bash from the Ubuntu 16.04.1 long-term support (LTS) "Xenial Xerus" release:

According to Scott Hanselman, the Cloud Shell is indeed a container that Azure Container Services manages under the hood. Not only do we have access to native bash commands and the Azure CLI itself, but Microsoft also gives us plenty of other tools to work with inside the container. Some but not all of these tools include:

  • Git (source code control)
  • Vim, nano (text editors)
  • Docker CLI/Docker Machine
  • MySQL, PostgreSQL clients
  • iPython client

The programming/scripting language support inside the Cloud Shell is impressive as well:

  • .NET Core 1.01
  • Go 1.7
  • Java 1.8
  • js 6.9.4
  • Python 2.7 and 3.5

Now, about the clouddrive directory. As I mentioned earlier, the .img file in your Cloud Shell storage account stores any user data. You can interact with the mount as usual, for example:

Azure automatically updates the stored disk images as you make changes to your environment. You can upload to and download from your Cloud Shell from the Azure Portal itself, as shown next:

Download and upload by combining the Portal with Cloud Shell

This ability to upload files to your Cloud Shell is awesome for, say, running scripts and deploying ARM templates.

If for whatever reason something goes wrong with your Cloud Shell (for instance, you delete the underlying storage account), you can force Azure to recreate a fresh, default environment by running:

Wrap-up ^

The presence of Azure Cloud Shell serves as yet another reminder that we Windows systems administrators need to get on board with administrative scripting or perish in the IT industry. In my view, anybody who works with Azure needs to get up to speed with the following languages:

  • PowerShell
  • Azure CLI
  • Git

We're moving at the speed of cloud! I hope you're enjoying the ride as much as I am.

Win the monthly 4sysops member prize for IT pros


Users who have LIKED this post:

  • avatar

Related Posts


Leave a reply

Your email address will not be published. Required fields are marked *



Please ask IT administration questions in the forum. Any other messages are welcome.

© 4sysops 2006 - 2017

Log in with your credentials


Forgot your details?

Create Account