mq-quiz / infra /resources.bicep
Pamela Fox
More azd fixes
f28be2b
raw
history blame
4.84 kB
param name string
param location string
param resourceToken string
@secure()
param databasePassword string
param tags object
var prefix = '${name}-${resourceToken}'
var pgServerName = '${prefix}-postgres-server'
var databaseSubnetName = 'database-subnet'
var webappSubnetName = 'webapp-subnet'
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2019-11-01' = {
name: '${prefix}-vnet'
location: location
tags: tags
properties: {
addressSpace: {
addressPrefixes: [
'10.0.0.0/16'
]
}
subnets: [
{
name: databaseSubnetName
properties: {
addressPrefix: '10.0.0.0/24'
delegations: [
{
name: '${prefix}-subnet-delegation'
properties: {
serviceName: 'Microsoft.DBforPostgreSQL/flexibleServers'
}
}
]
}
}
{
name: webappSubnetName
properties: {
addressPrefix: '10.0.1.0/24'
delegations: [
{
name: '${prefix}-subnet-delegation-web'
properties: {
serviceName: 'Microsoft.Web/serverFarms'
}
}
]
}
}
]
}
resource databaseSubnet 'subnets' existing = {
name: databaseSubnetName
}
resource webappSubnet 'subnets' existing = {
name: webappSubnetName
}
}
resource privateDnsZone 'Microsoft.Network/privateDnsZones@2020-06-01' = {
name: '${pgServerName}.private.postgres.database.azure.com'
location: 'global'
tags: tags
dependsOn: [
virtualNetwork
]
}
resource privateDnsZoneLink 'Microsoft.Network/privateDnsZones/virtualNetworkLinks@2020-06-01' = {
parent: privateDnsZone
name: '${pgServerName}-link'
location: 'global'
properties: {
registrationEnabled: false
virtualNetwork: {
id: virtualNetwork.id
}
}
}
resource web 'Microsoft.Web/sites@2022-03-01' = {
name: '${prefix}-app-service'
location: location
tags: union(tags, { 'azd-service-name': 'web' })
kind: 'app,linux'
properties: {
serverFarmId: appServicePlan.id
siteConfig: {
alwaysOn: true
linuxFxVersion: 'PYTHON|3.10'
ftpsState: 'Disabled'
appCommandLine: 'python manage.py migrate'
}
httpsOnly: true
}
identity: {
type: 'SystemAssigned'
}
resource appSettings 'config' = {
name: 'appsettings'
properties: {
DBHOST: postgresServer.name
DBNAME: djangoDatabase.name
DBUSER: postgresServer.properties.administratorLogin
DBPASS: databasePassword
SCM_DO_BUILD_DURING_DEPLOYMENT: 'true'
}
}
resource logs 'config' = {
name: 'logs'
properties: {
applicationLogs: {
fileSystem: {
level: 'Verbose'
}
}
detailedErrorMessages: {
enabled: true
}
failedRequestsTracing: {
enabled: true
}
httpLogs: {
fileSystem: {
enabled: true
retentionInDays: 1
retentionInMb: 35
}
}
}
}
resource webappVnetConfig 'networkConfig' = {
name: 'virtualNetwork'
properties: {
subnetResourceId: virtualNetwork::webappSubnet.id
}
}
dependsOn: [virtualNetwork]
}
resource appServicePlan 'Microsoft.Web/serverfarms@2021-03-01' = {
name: '${prefix}-service-plan'
location: location
tags: tags
sku: {
name: 'B1'
}
properties: {
reserved: true
}
}
resource logAnalyticsWorkspace 'Microsoft.OperationalInsights/workspaces@2020-03-01-preview' = {
name: '${prefix}-workspace'
location: location
tags: tags
properties: any({
retentionInDays: 30
features: {
searchVersion: 1
}
sku: {
name: 'PerGB2018'
}
})
}
resource postgresServer 'Microsoft.DBforPostgreSQL/flexibleServers@2022-01-20-preview' = {
location: location
tags: tags
name: pgServerName
sku: {
name: 'Standard_D2ds_v4'
tier: 'GeneralPurpose'
}
properties: {
version: '13'
administratorLogin: 'django'
administratorLoginPassword: databasePassword
availabilityZone: '1'
storage: {
storageSizeGB: 128
}
backup: {
backupRetentionDays: 7
geoRedundantBackup: 'Disabled'
}
network: {
delegatedSubnetResourceId: virtualNetwork::databaseSubnet.id
privateDnsZoneArmResourceId: privateDnsZone.id
}
highAvailability: {
mode: 'Disabled'
}
maintenanceWindow: {
customWindow: 'Disabled'
dayOfWeek: 0
startHour: 0
startMinute: 0
}
}
dependsOn: [
privateDnsZoneLink
]
}
resource djangoDatabase 'Microsoft.DBforPostgreSQL/flexibleServers/databases@2022-01-20-preview' = {
parent: postgresServer
name: 'django'
}
output WEB_URI string = 'https://${web.properties.defaultHostName}'