Azure CLI and the Azure PowerShell module have built-in Bicep support.
az login
az account show
az account list
# Developer Subscription
az account set --subscription cd06616d-f6ea-49dd-af03-14b9d4928e1
# Create a resource-group in current subscription
az deployment sub create --location eastus --template-file main-rg.bicep
# Call Bicep with parameter
az deployment group create --resource-group phyrum-tea --template-file main.bicep -p environment='dev' dbUsername='ptea' dbPassword='Password!123456'
Decompile ARM file:
az bicep decompile --file ./main.json
param location string = resourceGroup().location
resource storageAccount 'Microsoft.Storage/storageAccounts@2021-09-01' = {
name: 'mystorageaccount'
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
properties: {
accessTier: 'Hot'
supportsHttpsTrafficOnly: true
}
}
output storageAccountId string = storageAccount.id
param location string = resourceGroup().location
resource appServicePlan 'Microsoft.Web/serverFarms@2021-03-01' = {
name: 'toy-product-launch-plan'
location: location
sku: {
name: 'F1'
}
kind: 'windows'
}
param customer string = 'tea'
param environment string = 'dev'
resource sqlServer 'Microsoft.Sql/servers@2022-02-01-preview' = {
name: sqlServerName
location: location
properties: {
administratorLogin: administratorLogin
administratorLoginPassword: administratorLoginPassword
}
}
resource sqlServerAllowAllWindowsAzureIps 'Microsoft.Sql/servers/firewallRules@2022-02-01-preview' = {
parent: sqlServer
name: 'AllowAllWindowsAzureIps'
properties: {
startIpAddress: '0.0.0.0'
endIpAddress: '0.0.0.0'
}
}
resource sqlServerAllowIps 'Microsoft.Sql/servers/firewallRules@2022-02-01-preview' = {
parent: sqlServer
name: 'Allowed_IPs'
properties: {
startIpAddress: '201.202.204.55'
endIpAddress: '201.202.204.55'
}
}
resource sqlDb 'Microsoft.Sql/servers/databases@2022-02-01-preview' = {
parent: sqlServer
name: sqlDbName
location: location
properties: {
collation: 'SQL_Latin1_General_CP1_CI_AS'
maxSizeBytes: 268435456000
catalogCollation: 'SQL_Latin1_General_CP1_CI_AS'
}
}
var logWsName = 'log-${customer}-app-${environment}'
resource logWs 'Microsoft.OperationalInsights/workspaces@2021-12-01-preview' = {
name: logWsName
location: location
properties: {
sku: {
name: 'pergb2018'
}
retentionInDays: 30
features: {
enableLogAccessUsingOnlyResourcePermissions: true
}
workspaceCapping: {
dailyQuotaGb: -1
}
publicNetworkAccessForIngestion: 'Enabled'
publicNetworkAccessForQuery: 'Enabled'
}
}
resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = {
name: 'toy-product-launch-1'
location: location
properties: {
serverFarmId: appServicePlan.id
httpsOnly: true
}
}
resource appSettings 'Microsoft.Web/sites/config@2022-03-01' = {
parent: appServiceApp
name: 'appsettings'
kind: 'string'
properties: {
APPINSIGHTS_INSTRUMENTATIONKEY: appInsights.properties.InstrumentationKey
APPLICATIONINSIGHTS_CONNECTION_STRING: appInsights.properties.ConnectionString
ApplicationInsightsAgent_EXTENSION_VERSION: '~2'
XDT_MicrosoftApplicationInsights_Mode: 'default'
}
}
resource connectionString 'Microsoft.Web/sites/config@2022-03-01' = {
parent: appServiceApp
name: 'connectionstrings'
kind: 'string'
properties: {
WebDatabaseConnection: {
value: 'Server=tcp:${sqlServerName}.database.windows.net,1433;Initial Catalog=${sqlDbName};Persist Security Info=False;User ID=admin;Password=Secure%Password;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;'
type: 'SQLAzure'
}
}
}
resource appInsights 'microsoft.insights/components@2020-02-02' = {
name: 'app-${appName}-${customer}-${environment}'
location: location
kind: 'web'
properties: {
Application_Type: 'web'
Flow_Type: 'Redfield'
Request_Source: 'IbizaAIExtensionEnablementBlade'
RetentionInDays: 90
WorkspaceResourceId: logWs.id
IngestionMode: 'LogAnalytics'
publicNetworkAccessForIngestion: 'Enabled'
publicNetworkAccessForQuery: 'Enabled'
}
}
Links
Azure Quickstart Templates https://azure.microsoft.com/en-us/resources/templates/