Övning – Granska din befintliga Bicep-mall
I vårt scenario sätter du dig ner för att granska mallen med dina kollegor från kvalitetsstyrningsteamet.
När du arbetar tillsammans med mallen börjar dina kollegor ställa en rad frågor om filens struktur och komponenter. De verkar ha viss förvirring. Kanske kan mallen dra nytta av vissa förbättringar för att göra den mer läsbar och lättare att förstå?
Ta en titt på följande mall, som du ser för första gången. Förstår du vad allt i mallen gör? Hur många problem kan du hitta? Vad kan du göra för att förbättra mallen?
param location string = resourceGroup().location
@allowed([
'F1'
'D1'
'B1'
'B2'
'B3'
'S1'
'S2'
'S3'
'P1'
'P2'
'P3'
'P4'
])
param skuName string = 'F1'
@minValue(1)
param skuCapacity int = 1
param sqlAdministratorLogin string
@secure()
param sqlAdministratorLoginPassword string
param managedIdentityName string
param roleDefinitionId string = 'b24988ac-6180-42a0-ab88-20f7382dd24c'
param webSiteName string = 'webSite${uniqueString(resourceGroup().id)}'
param container1Name string = 'productspecs'
param productmanualsName string = 'productmanuals'
var hostingPlanName = 'hostingplan${uniqueString(resourceGroup().id)}'
var sqlserverName = 'toywebsite${uniqueString(resourceGroup().id)}'
var storageAccountName = 'toywebsite${uniqueString(resourceGroup().id)}'
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = {
name: storageAccountName
location: 'eastus'
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
properties: {
accessTier: 'Hot'
}
resource blobServices 'blobServices' existing = {
name: 'default'
}
}
resource container1 'Microsoft.Storage/storageAccounts/blobServices/containers@2023-05-01' = {
parent: storageAccount::blobServices
name: container1Name
}
resource sqlserver 'Microsoft.Sql/servers@2023-08-01-preview' = {
name: sqlserverName
location: location
properties: {
administratorLogin: sqlAdministratorLogin
administratorLoginPassword: sqlAdministratorLoginPassword
version: '12.0'
}
}
var databaseName = 'ToyCompanyWebsite'
resource sqlserverName_databaseName 'Microsoft.Sql/servers/databases@2023-08-01-preview' = {
name: '${sqlserver.name}/${databaseName}'
location: location
sku: {
name: 'Basic'
}
properties: {
collation: 'SQL_Latin1_General_CP1_CI_AS'
maxSizeBytes: 1073741824
}
}
resource sqlserverName_AllowAllAzureIPs 'Microsoft.Sql/servers/firewallRules@2023-08-01-preview' = {
name: '${sqlserver.name}/AllowAllAzureIPs'
properties: {
endIpAddress: '0.0.0.0'
startIpAddress: '0.0.0.0'
}
dependsOn: [
sqlserver
]
}
resource productmanuals 'Microsoft.Storage/storageAccounts/blobServices/containers@2023-05-01' = {
name: '${storageAccount.name}/default/${productmanualsName}'
}
resource hostingPlan 'Microsoft.Web/serverfarms@2023-12-01' = {
name: hostingPlanName
location: location
sku: {
name: skuName
capacity: skuCapacity
}
}
resource webSite 'Microsoft.Web/sites@2023-12-01' = {
name: webSiteName
location: location
properties: {
serverFarmId: hostingPlan.id
siteConfig: {
appSettings: [
{
name: 'APPINSIGHTS_INSTRUMENTATIONKEY'
value: AppInsights_webSiteName.properties.InstrumentationKey
}
{
name: 'StorageAccountConnectionString'
value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccount.name};EndpointSuffix=${environment().suffixes.storage};AccountKey=${listKeys(storageAccount.id, storageAccount.apiVersion).keys[0].value}'
}
]
}
}
identity: {
type: 'UserAssigned'
userAssignedIdentities: {
'${msi.id}': {}
}
}
}
// We don't need this anymore. We use a managed identity to access the database instead.
//resource webSiteConnectionStrings 'Microsoft.Web/sites/config@2020-06-01' = {
// name: '${webSite.name}/connectionstrings'
// properties: {
// DefaultConnection: {
// value: 'Data Source=tcp:${sqlserver.properties.fullyQualifiedDomainName},1433;Initial Catalog=${databaseName};User Id=${sqlAdministratorLogin}@${sqlserver.properties.fullyQualifiedDomainName};Password=${sqlAdministratorLoginPassword};'
// type: 'SQLAzure'
// }
// }
//}
resource msi 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-07-31-preview' = {
name: managedIdentityName
location: location
}
resource roleassignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(roleDefinitionId, resourceGroup().id)
properties: {
principalType: 'ServicePrincipal'
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', roleDefinitionId)
principalId: msi.properties.principalId
}
}
resource AppInsights_webSiteName 'Microsoft.Insights/components@2020-02-02' = {
name: 'AppInsights'
location: location
kind: 'web'
properties: {
Application_Type: 'web'
}
}
Skapa och spara Bicep-filen
I den här modulen gör du ändringar som förbättrar mallen. Du följer metodtipsen för att göra det enklare att läsa och förstå och enklare för dina kollegor att arbeta med.
Först måste du skapa Bicep-filen och spara den lokalt så att du kan arbeta med den.
Öppna Visual Studio Code.
Skapa en ny fil med namnet main.bicep.
Kopiera föregående Bicep-mall och klistra in den i filen.
Spara ändringarna i filen.
Viktigt!
Processen för att förbättra koden genom att omorganisera och byta namn på den kallas refaktorisering. När du omstrukturerar kod är det en bra idé att använda ett versionskontrollsystem som Git. Med versionskontroll kan du göra ändringar i koden, ångra ändringarna eller återgå till en tidigare version.
I den här modulen behöver du inte använda Git för att spåra filen. Det är dock en bra idé att göra det, så betrakta det som ett valfritt extra.