File size: 4,147 Bytes
80db45a fb79ec6 0bf56a7 fb79ec6 80db45a fb79ec6 80db45a 9595e1d fb79ec6 9595e1d fb79ec6 9595e1d 9a1de81 9595e1d fb79ec6 9595e1d 669c0b8 fb79ec6 9595e1d 80db45a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 |
targetScope = 'subscription'
@minLength(1)
@maxLength(64)
@description('Name which is used to generate a short unique hash for each resource')
param name string
@minLength(1)
@description('Primary location for all resources')
param location string
@secure()
@description('PostGreSQL Server administrator username')
param postgresAdminUser string = 'admin${uniqueString(subscription().subscriptionId)}'
@secure()
@description('PostGreSQL Server administrator password')
param postgresAdminPassword string
@description('Id of the user or app to assign application roles')
param principalId string = ''
@secure()
@description('Django SECRET_KEY for cryptographic signing')
param djangoSecretKey string
var resourceToken = toLower(uniqueString(subscription().id, name, location))
var tags = { 'azd-env-name': name }
resource resourceGroup 'Microsoft.Resources/resourceGroups@2021-04-01' = {
name: '${name}-rg'
location: location
tags: tags
}
var prefix = '${name}-${resourceToken}'
var postgresServerName = '${prefix}-postgresql'
var postgresDatabaseName = 'django'
module postgresServer 'core/database/postgresql/flexibleserver.bicep' = {
name: 'postgresql'
scope: resourceGroup
params: {
name: postgresServerName
location: location
tags: tags
sku: {
name: 'Standard_B1ms'
tier: 'Burstable'
}
storage: {
storageSizeGB: 32
}
version: '14'
administratorLogin: postgresAdminUser
administratorLoginPassword: postgresAdminPassword
databaseNames: [postgresDatabaseName]
allowAzureIPsFirewall: true
}
}
module web 'core/host/appservice.bicep' = {
name: 'appservice'
scope: resourceGroup
params: {
name: '${prefix}-appservice'
location: location
tags: union(tags, { 'azd-service-name': 'web' })
appServicePlanId: appServicePlan.outputs.id
runtimeName: 'python'
runtimeVersion: '3.10'
scmDoBuildDuringDeployment: true
ftpsState: 'Disabled'
managedIdentity: true
appCommandLine: 'python manage.py migrate && gunicorn --workers 2 --threads 4 --timeout 60 --access-logfile \'-\' --error-logfile \'-\' --bind=0.0.0.0:8000 --chdir=/home/site/wwwroot quizsite.wsgi'
appSettings: {
DBHOST: postgresServerName
DBNAME: postgresDatabaseName
DBUSER: '@Microsoft.KeyVault(VaultName=${keyVault.outputs.name};SecretName=postgresAdminUser)'
DBPASS: '@Microsoft.KeyVault(VaultName=${keyVault.outputs.name};SecretName=postgresAdminPassword)'
SECRET_KEY: '@Microsoft.KeyVault(VaultName=${keyVault.outputs.name};SecretName=djangoSecretKey)'
}
}
}
module appServicePlan 'core/host/appserviceplan.bicep' = {
name: 'serviceplan'
scope: resourceGroup
params: {
name: '${prefix}-serviceplan'
location: location
tags: tags
sku: {
name: 'B1'
}
reserved: true
}
}
module webKeyVaultAccess 'core/security/keyvault-access.bicep' = {
name: 'web-keyvault-access'
scope: resourceGroup
params: {
keyVaultName: keyVault.outputs.name
principalId: web.outputs.identityPrincipalId
}
}
// Store secrets in a keyvault
module keyVault './core/security/keyvault.bicep' = {
name: 'keyvault'
scope: resourceGroup
params: {
name: '${take(replace(prefix, '-', ''), 17)}-vault'
location: location
tags: tags
principalId: principalId
}
}
var secrets = [
{
name: 'djangoSecretKey'
value: djangoSecretKey
}
{
name: 'postgresAdminUser'
value: postgresAdminUser
}
{
name: 'postgresAdminPassword'
value: postgresAdminPassword
}
]
@batchSize(1)
module keyVaultSecrets './core/security/keyvault-secret.bicep' = [for secret in secrets: {
name: 'keyvault-secret-${secret.name}'
scope: resourceGroup
params: {
keyVaultName: keyVault.outputs.name
name: secret.name
secretValue: secret.value
}
}]
module logAnalyticsWorkspace 'core/monitor/loganalytics.bicep' = {
name: 'loganalytics'
scope: resourceGroup
params: {
name: '${prefix}-loganalytics'
location: location
tags: tags
}
}
output WEB_URI string = 'https://${web.outputs.uri}'
output AZURE_LOCATION string = location
|