|
param accountName string |
|
param databaseName string |
|
param location string = resourceGroup().location |
|
param tags object = {} |
|
|
|
param containers array = [] |
|
param keyVaultName string |
|
param principalIds array = [] |
|
|
|
module cosmos 'cosmos-sql-account.bicep' = { |
|
name: 'cosmos-sql-account' |
|
params: { |
|
name: accountName |
|
location: location |
|
tags: tags |
|
keyVaultName: keyVaultName |
|
} |
|
} |
|
|
|
resource database 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases@2022-05-15' = { |
|
name: '${accountName}/${databaseName}' |
|
properties: { |
|
resource: { id: databaseName } |
|
} |
|
|
|
resource list 'containers' = [for container in containers: { |
|
name: container.name |
|
properties: { |
|
resource: { |
|
id: container.id |
|
partitionKey: { paths: [ container.partitionKey ] } |
|
} |
|
options: {} |
|
} |
|
}] |
|
|
|
dependsOn: [ |
|
cosmos |
|
] |
|
} |
|
|
|
module roleDefintion 'cosmos-sql-role-def.bicep' = { |
|
name: 'cosmos-sql-role-definition' |
|
params: { |
|
accountName: accountName |
|
} |
|
dependsOn: [ |
|
cosmos |
|
database |
|
] |
|
} |
|
|
|
// We need batchSize(1) here because sql role assignments have to be done sequentially |
|
@batchSize(1) |
|
module userRole 'cosmos-sql-role-assign.bicep' = [for principalId in principalIds: if (!empty(principalId)) { |
|
name: 'cosmos-sql-user-role-${uniqueString(principalId)}' |
|
params: { |
|
accountName: accountName |
|
roleDefinitionId: roleDefintion.outputs.id |
|
principalId: principalId |
|
} |
|
dependsOn: [ |
|
cosmos |
|
database |
|
] |
|
}] |
|
|
|
output accountId string = cosmos.outputs.id |
|
output accountName string = cosmos.outputs.name |
|
output connectionStringKey string = cosmos.outputs.connectionStringKey |
|
output databaseName string = databaseName |
|
output endpoint string = cosmos.outputs.endpoint |
|
output roleDefinitionId string = roleDefintion.outputs.id |
|
|