Agent skill
converting-bicep-to-avm
Converts raw Bicep resource definitions to Azure Verified Modules (AVM). Use when user asks to convert to AVM, replace resources with modules, use verified modules, or modernize bicep templates.
Stars
163
Forks
31
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/development/converting-bicep-to-avm
SKILL.md
Converting Bicep to AVM Skill
Before Converting
Call Bicep:list_avm_metadata MCP tool to get available Azure Verified Modules and their versions.
Conversion Workflow
- Identify resources — List all
resourcedeclarations in the template - Find AVM matches — Call
Bicep:list_avm_metadata, match by resource type - Map properties — Translate resource properties to AVM parameters
- Generate module — Create
moduledeclaration with registry reference - Update references — Replace
resource.propertywithmodule.outputs.property - Validate — Lint the Bicep template and afterwards run
bicep buildto verify syntax - Fix errors — If build fails, review error, fix mapping, return to step 6
AVM Module Reference Format
bicep
module <symbolicName> 'br/public:avm/res/<provider>/<resource>:<version>' = {
name: '<deploymentName>'
params: {
name: <resourceName>
location: <location>
// AVM-specific parameters
}
}
Common Resource Type Mappings
| Resource Type | AVM Module Path |
|---|---|
Microsoft.KeyVault/vaults |
avm/res/key-vault/vault |
Microsoft.Storage/storageAccounts |
avm/res/storage/storage-account |
Microsoft.Web/sites |
avm/res/web/site |
Microsoft.Compute/virtualMachines |
avm/res/compute/virtual-machine |
Microsoft.Network/virtualNetworks |
avm/res/network/virtual-network |
Microsoft.ContainerRegistry/registries |
avm/res/container-registry/registry |
Microsoft.Sql/servers |
avm/res/sql/server |
⚠️ Always call Bicep:list_avm_metadata for current modules and versions. This table is for reference only and may be outdated.
Property Mapping Guidelines
Common Patterns
| Raw Resource | AVM Parameter |
|---|---|
properties.sku.name |
skuName |
properties.sku.tier |
Often bundled in skuName |
tags |
tags (same) |
location |
location (same) |
name |
name (same) |
properties.accessPolicies |
accessPolicies (flattened) |
AVM Adds Common Features
AVM modules often include built-in support for:
- Diagnostic settings (
diagnosticSettings) - Role assignments (
roleAssignments) - Private endpoints (
privateEndpoints) - Locks (
lock) - Tags (
tags)
Handling No AVM Match
If no AVM module exists:
- Keep the raw resource definition
- Add comment:
// TODO: No AVM module available for <resourceType> - Check for pattern modules (
avm/ptn/*) as alternatives
Output Transformation
Before:
bicep
output keyVaultUri string = keyVault.properties.vaultUri
After:
bicep
output keyVaultUri string = keyVaultModule.outputs.uri
Note: AVM output names differ from raw properties — check module documentation.
Conversion Report Format
markdown
## AVM Conversion: [filename]
### Converted
| Resource | AVM Module | Version |
|----------|------------|---------|
| keyVault | avm/res/key-vault/vault | 0.11.0 |
### Not Converted
| Resource | Reason |
|----------|--------|
| customResource | No AVM module available |
### Manual Review Required
- [ ] Verify parameter mappings
- [ ] Update output references
- [ ] Test deployment
Didn't find tool you were looking for?