Convert ARM Template to Bicep and Deploy with Azure DevOps - Part 2 - Migration
This is the second part of the series where an ARM Template is converted to Bicep. In this article, we should continue on Phase 2 - Migration.
Phased Migration
As a reference to Part 1, Microsoft suggests a migration in 5 phases, to convert the ARM Template into Bicep Template.
The comprehensive details provided by Microsoft Docs are available as a reference1
Phase 2 - Migration
On this migration, we should end up with a version that is very close to what we are going to have for Production.
The bicep file azuredeploy.bicep
generated will help us to create a draft version.
It is worth mentioning that we are going to modify the bicep file to more closely match of what we need in Production, and it means that we should identify and fill any missing references that did not come from the ARM Template. Will we need to do that? It depends on the resource. In some cases, the information from the ARM Template isn't a supported resource type for export, and that requires us to tweak the bicep template to get the configuration we need.
The new draft Bicep template looks like this:
@minLength(1)
@maxLength(3)
param environment string
@minLength(3)
param appPlanName string
@description('Describes plan\'s pricing tier and capacity. Check details at https://azure.microsoft.com/en-us/pricing/details/app-service/?WT.mc_id=AZ-MVP-5005172')
@allowed([
'F1'
'D1'
'B1'
'B2'
'B3'
'S1'
'S2'
'S3'
'P1'
'P2'
'P3'
'P4'
])
param appPlanSKU string = 'F1'
param location string = resourceGroup().location
var webSiteName = 'sample-web-${environment}'
resource appPlan 'Microsoft.Web/serverfarms@2021-02-01' = {
name: appPlanName
location: location
sku: {
name: appPlanSKU
}
kind: 'app'
tags: {
displayName: 'HostingPlan'
}
}
resource appWeb 'Microsoft.Web/sites@2020-12-01' = {
name: webSiteName
location: location
kind: 'app'
properties:{
serverFarmId: appPlan.id
}
tags: {
displayName: 'Website'
}
}
resource aiWeb 'Microsoft.Insights/components@2020-02-02' = {
name: webSiteName
location: location
kind: 'web'
properties: {
Application_Type: 'web'
}
tags: {
displayName: 'AppInsightsComponent'
}
dependsOn: [
appWeb
]
}
There were some changes if you compare them with the previous Bicep file. Can you spot the difference?
- Variable names were modified to reflect a better label and meaning.
- Component references were updated from @2015-08-01 to the latest available.
- Some hidden tags were removed.
In Phase 3 we'll refactor this even more.
Full Series
Phase 2 - Migration
- References: Migrate to Bicep↩