| name | convert-bicep-to-avm |
| description | Converts 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. |
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
resource declarations 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
module declaration with registry reference
- Update references — Replace
resource.property with module.outputs.property
- Validate — Lint the Bicep template and afterwards run
bicep build to verify syntax
- Fix errors — If build fails, review error, fix mapping, return to step 6
AVM Module Reference Format
module <symbolicName> 'br/public:avm/res/<provider>/<resource>:<version>' = {
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
| 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 resource definition
- Add comment:
// TODO: No AVM module available for <resourceType>
- Check for pattern modules (
avm/ptn/*) as alternatives
Output Transformation
Before:
output keyVaultUri string = keyVault.properties.vaultUri
After:
output keyVaultUri string = keyVaultModule.outputs.uri
Note: AVM output names differ from properties — check module documentation.
Conversion Report Format
## 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