Azure Resource Manager

Traditionally, all infrastructure related tasks for product development & hosting were handled through dedicated Infrastructure team, which comprises of different expertise to set infra resources in a proper way following protocols/rules. They spent time documenting on what they did and how a particular system is set, so that the similar setup can be replicated again when required. This dedication is also due to the nature of their job & responsibility.

But with the move towards cloud based hosting/provisioning resources, these are no more a responsibility for those experts. It is now directly handed over to product developers, whose primary focus is on coding rather than setting up required infrastructures. So, they often don't remember critical configurations or try to record the settings they did once to make a system tick. Further, when a new developer tries to do so., It adds up to the problem. So, there should be a unified process for developers to maintain the infrastructure and application code in a similar way.

Microsoft Azure Cloud platform offers different services & resources that a developer can provision on cloud within a minute. But think about the complexity, if he wants to spin up an exact same system (group of resources) somewhere else, Is that feasible for regular developers ?

Azure Resource Manager (ARM) templates offers developers with a way to convert entire infrastructure setup/requirements as code, which can be maintained in their project along with their application code. This makes it feasible to

  1. Automate the infrastructure changes along with code deployments
  2. Keep track on history of changes that has gone through in their azure resource
  3. Never miss-out any configuration, when a new teammate tries to setup(spin-up) similar system

ARM Templates uses JSON format to define infrastructure configuration & requirements. It follows a declarative syntax to define what to deploy without need for writing a code to create & configure a resource.

ARM templates has following advantages

  1. It uses an easy declarative syntax to create and manage resources
  2. It allows you to repeatedly create the same setup/configurations for any number of times without any hassle.
  3. It handles the dependency & order of resource creation based on the mentioned dependsOn attribute. You need not map what comes first, next and next so on.,
  4. It runs built-in validations before starting with the real deployments, thus safe guards from unexpected errors in between deployments.
  5. The template can be broken into multiple smaller, reusable templates. These modular templates can then be nested or linked from another dependent template.
  6. It can be used templatized any azure resource and it setup quickly
  7. Deployments through ARM templates are tracked in Azure portal with their input template & parameters used for deployment.
  8. CI/CD integration: You can integrate the Azure resource updates through release pipelines. Changing a resource parameters would help you to provision a new resource and deploy everything to it in a jiff.
  9. Extensive IDE support is available for authoring ARM templates.

If you haven't so far, tried using ARM templates for managing the resources during deployments. Then you are actually missing a lot of goodies from Azure. So better buckle up and take ARM for a ride, you will love it for its simplicity and effectiveness.