|
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}' |
|
|