Microsoft is in the process of transitioning the Microsoft Azure tools over to using the new Azure Resource Manager (ARM) model for managing Azure resources. On the surface this looks to be merely a change in the API’s and tools. While this is mostly true, it’s a shift that offers a more streamlined approach to managing the various resources (Web Apps, Cloud Services, VMs, Storage, etc) in a more automated fashion with the ability to group these different service resources into logical groups called “Resource Groups.” This article is the first in a series that will dive in to what Azure Resource Manager is, how to use ARM Templates and the different Azure tools being made available.
Past – Azure Service Management
To understand where Microsoft is headed with Azure management, it’s good to understand a little about where they’re coming from. The Classic Azure Portal (http://manage.windowsazure.com) is built on top of the Azure Service Management API’s. In addition, the Azure PowerShell SDK and Azure CLI (Command-Line Interface) tools were also originally built using Service Management.
These tools were great for managing any services (Web Apps, Cloud Services, VMs, Storage, Service Bus Namespaces, etc) within Microsoft Azure with the ability to automate management using Azure PowerShell and Azure CLI (aka Xplat-CLI). The only drawback to managing Azure services using this model is that each service instance is its’ own separately managed unit. This required Administrators to keep track of which service instances are used together as part of a large application. This wasn’t originally a problem in the early days of Microsoft Azure for most customers, but as time progressed things started getting more and more difficult to keep track of and manage. There are many more customers using Microsoft Azure today, with tons of really complex applications built on top of the service.
As a result, Microsoft introduced the newer Azure Resource Management API’s that brought with them the ability to logically group Azure service instances into “Resource Groups.” These groups are a logical shell that can be used to define all the service instances, or resources, that are used by a specific application. Along with the addition of Resource Groups came the release of a new Azure Management Portal based on Azure Resource Manager.
Previously the Classic Azure Portal was built on the Service Management model, and the newer, current Azure Portal is now built on top of the Azure Resource Manager APIs.
Future – Azure Resource Manager
One of the features introduced by the Current Azure Portal (http://portal.azure.com) is the concept of “Resource Groups.” Resource Groups allow for multiple Azure resources (Web Apps, VMs, Azure Storage, etc) that are part of a single logical unit, most likely a single application, to be grouped together so they can be Managed, Deployed, and Monitored together. The API the Current Azure Portal and Resource Groups are built on top of is the Azure Resource Management API.
You may manage Azure Resources individually, but each one is almost always part of a bigger application made up of multiple resources. Azure Management is far easier with the support of managing Azure Resources in groups. Resource Management provides a slight paradigm shift in the way Azure resources are managed within the Portal and through the various tools (REST API, PowerShell, Azure CLI, Visual Studio, etc) that is actually a shift towards how businesses really need to have things managed.
Resource Groups are just a single feature that’s been added since the introduction of Azure Resource Manager (ARM) and the new Azure Portal experience. ARM is a foundation that’s been brewing inside Microsoft Azure for quite some time, and now customers are seeing it more and more as it’s exposed through all the different tools being made available by Microsoft. Here’s a list of some of the key benefits that are being realized through Azure Resource Manager:
- All the Azure resources making up an entire solution can be Deployed, Managed and Monitored as an single group instead of individually.
- Tags can be applied to individual Azure resources allowing for further organization of resources within an Azure Subscription.
- Billing is clarified by being able to roll up costs for a single Resource Group so the full solution cost can be understood.
- Access Controls can be administered for all resources in a specific Resource Group, now that Role-Based Access Control (RBAC) is integrated into the platform.
- Azure Resource deployment can now be done using an “Infrastructure as Code” method through the use of ARM Templates; which provide a declarative template for defining deployments.
- ARM Templates allow for resource dependencies to be defined so everything gets deployed in the correct order as required.
- Reliable Deployment of applications / resources can easily be duplicated with everything “scripted out” using ARM Templates allowing for better DevOps and CI/CD integration.
At the heart of Azure Resource Manager and ARM Templates is the goal of easing teams into implementing better DevOps integration along with better Continuous Integration (CI) and Continuous Delivery (CD). This is done mostly through the support of ARM Templates allowing for an “Infrastructure as Code” approach to having all deployment details declaratively defined within a template that can easily be run many times with the exact same result. This results in huge benefits in productivity for both the Development Team as well as any System Administrators involved in delivering solutions to customers / end users.
With more reliable deployments, the entire team can focus on delivering excellence rather than sweating the small details with every single deployment. After all, one of the most problematic parts of every software project has traditionally been the manual deployment process. So many projects get deployed to DEV and TEST/UAT environments repeatedly, but not to Production until the last minute. Consequentially, the Production deployment fails with some manual step getting missed or messed up. Some teams blame the individual, but smart teams blame the process and realize they need to further automate the deployment.
The more that can be automated on a project, the more productive the development, maintenance and support teams can be. So, don’t just automate the deployments, include Continuous Integration (CI) and Continuous Delivery (CD) into the teams processes for increased automation and an even higher productivity boost.
“Automate all the things!”
Resource Manager Tools
The Current Azure Portal isn’t the only tool updated to include support for Azure Resource Manager. The various toolsets distributed have also been updated to include support for the Azure Resource Manager APIs and ARM Templates. Here’s a short list of the available tools that support ARM:
- Azure PowerShell SDK
- Azure CLI – command-line support for Mac, Linux and Windows
- Visual Studio Azure SDK
Among these tools, possibly the most impressive is the Visual Studio Azure SDK support for authoring and managing ARM Templates right within the Visual Studio IDE.
As mentioned in the beginning of this article, this is just the first in a series of articles to come. Now that you’ve been introduced to Azure Resource Manager and what it enables and means for Developers, IT Pros and DevOps teams, the next articles in the series will begin to dive into the specifics of integrating Azure Resource Manager using the tools mentioned above.