adaptive.run TECH BLOG

Cloud can be tricky sometimes. Find out what scenarios we've ran into that are worth being mentioned and explained.

Understanding Azure Resource Manager (ARM) Templates: A Step-by-Step Guide

Level: 100
Publishing date: 30-Jan-2024
Author: Catalin Popa


Introduction:

Azure Resource Manager (ARM) templates are a powerful tool in the Azure ecosystem that allows users to define and deploy infrastructure as code (IaC). With ARM templates, you can express your desired Azure resource configuration in a declarative manner, enabling consistent and repeatable deployments. In this article, we will go step by step, analyzing the contents of an ARM template to help you grasp its structure and functionality.

Step 1: Template Structure

Every ARM template begins with a structure that defines the overall organization of your deployment. It includes the schema version, content version, and a list of resources to be deployed. Let's take a look at a basic template structure:

{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [ ]

$schema: Specifies the location of the JSON schema file for the template.

contentVersion: Represents the version of the template (increment as you make changes).

resources: An array where you define the Azure resources to be deployed.

Step 2: Parameters
Parameters allow you to customize your template for different deployments. They act as variables that users can input when deploying the template. Add a "parameters" section within the template:

"parameters": {
"storageAccountType": {
"type": "string",
"allowedValues": ["Standard_LRS", "Standard_GRS"],
"defaultValue": "Standard_LRS",
"metadata": {
"description": "Storage Account type."
}
}

type: Specifies the parameter data type (string, int, bool, etc.).

allowedValues: Defines a list of allowed values for the parameter.

defaultValue: Sets a default value for the parameter.

metadata: Provides a description of the parameter.

Step 3: Variables
Variables help simplify your template by storing intermediate values or expressions. They are defined within the "variables" section:

"variables": {
"storageAccountName": "[concat('mystorage', uniqueString(resourceGroup().id))]"

Here, we concatenate a string with a unique identifier derived from the resource group ID to create a storage account name.

Step 4: Resources

The "resources" section is where you define the Azure resources to be deployed. Let's add a simple storage account resource:

"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2019-06-01",
"name": "[variables('storageAccountName')]",
"location": "[resourceGroup().location]",
"sku": {
"name": "[parameters('storageAccountType')]"
},
"kind": "StorageV2"
}

• type: Specifies the Azure resource provider and resource type.

apiVersion: Indicates the version of the Azure API to use.

name: Defines the name of the resource.

location: Specifies the Azure region for deployment.

sku: Describes the SKU (Standard or Premium) of the storage account.

kind: Specifies the type of storage account (StorageV2 in this case).

Step 5: Outputs

Optionally, you can include an "outputs" section to retrieve information about the deployed resources:

"outputs": {
"storageAccountConnectionString": {
"type": "string",
"value": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), '2019-06-01').keys[0].value)]"
}

Here, we create an output for the storage account connection string.

Conclusion:

ARM templates provide a structured and scalable way to define and deploy Azure resources. By following these steps and understanding the key components of an ARM template, you can take advantage of infrastructure as code principles, ensuring consistency and efficiency in your Azure deployments. Experiment with different resource types, explore additional features, and unleash the full potential of ARM templates for managing your Azure infrastructure.


adaptive.run

Transform your business.
Run adaptive.

Contact

Phone: +40 73 523 0005
Email: hello@adaptive.run

© Copyright  2019-2024 adaptive.run- All Rights Reserved