This commit is contained in:
Toby
2026-01-27 17:35:45 -05:00
commit 2639af6531
176 changed files with 27104 additions and 0 deletions
@@ -0,0 +1,58 @@
---
name: arm-templates
description: Deploy Azure resources with ARM templates and Bicep. Create modular deployments and manage dependencies. Use when deploying Azure-native IaC.
license: MIT
metadata:
author: devops-skills
version: "1.0"
---
# ARM Templates & Bicep
Deploy Azure infrastructure with ARM templates and Bicep.
## Bicep Example
```bicep
param location string = resourceGroup().location
param vmName string
resource vm 'Microsoft.Compute/virtualMachines@2023-03-01' = {
name: vmName
location: location
properties: {
hardwareProfile: {
vmSize: 'Standard_B2s'
}
osProfile: {
computerName: vmName
adminUsername: 'azureuser'
}
}
}
output vmId string = vm.id
```
## Deployment
```bash
# Deploy Bicep
az deployment group create \
--resource-group mygroup \
--template-file main.bicep \
--parameters vmName=myvm
# Deploy ARM
az deployment group create \
--resource-group mygroup \
--template-file template.json \
--parameters @parameters.json
```
## Best Practices
- Use Bicep over JSON ARM
- Implement modules for reusability
- Use parameter files per environment
- Validate before deployment
@@ -0,0 +1,108 @@
# ARM Template Syntax Reference
## Template Structure
```json
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"environment": {
"type": "string",
"allowedValues": ["dev", "staging", "prod"]
}
},
"variables": {
"storageAccountName": "[concat('storage', uniqueString(resourceGroup().id))]"
},
"resources": [],
"outputs": {}
}
```
## Functions
```json
// Concatenation
"[concat('prefix-', parameters('name'), '-suffix')]"
// Unique string
"[uniqueString(resourceGroup().id)]"
// Resource ID
"[resourceId('Microsoft.Storage/storageAccounts', variables('storageName'))]"
// Reference (runtime)
"[reference(resourceId('Microsoft.Storage/storageAccounts', variables('storageName'))).primaryEndpoints.blob]"
// Conditions
"[if(equals(parameters('environment'), 'prod'), 'Standard_GRS', 'Standard_LRS')]"
```
## Resource Example
```json
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-09-01",
"name": "[variables('storageAccountName')]",
"location": "[resourceGroup().location]",
"sku": {
"name": "[variables('storageSku')]"
},
"kind": "StorageV2",
"properties": {
"supportsHttpsTrafficOnly": true,
"minimumTlsVersion": "TLS1_2"
}
}
```
## Dependencies
```json
{
"type": "Microsoft.Web/sites",
"dependsOn": [
"[resourceId('Microsoft.Web/serverfarms', variables('appServicePlanName'))]"
]
}
```
## Deployment
```bash
# Create resource group
az group create --name myRG --location eastus
# Deploy template
az deployment group create \
--resource-group myRG \
--template-file template.json \
--parameters @parameters.json
# What-if (preview changes)
az deployment group what-if \
--resource-group myRG \
--template-file template.json
```
## Bicep (Recommended)
```bicep
param location string = resourceGroup().location
param environment string
var storageAccountName = 'st${uniqueString(resourceGroup().id)}'
resource storageAccount 'Microsoft.Storage/storageAccounts@2021-09-01' = {
name: storageAccountName
location: location
sku: {
name: environment == 'prod' ? 'Standard_GRS' : 'Standard_LRS'
}
kind: 'StorageV2'
}
output storageEndpoint string = storageAccount.properties.primaryEndpoints.blob
```