Skip to content

Commit 26baf84

Browse files
committed
Updated ADF templates to reuse existing SQL Server
1 parent 9e2168e commit 26baf84

File tree

4 files changed

+73
-9
lines changed

4 files changed

+73
-9
lines changed

Deployment/Deploy-Resources.ps1

Lines changed: 40 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -537,6 +537,8 @@ function Set-SQLServerPermissions {
537537
[Parameter(Mandatory = $true)]
538538
[string]$ConnectionString,
539539
[Parameter(Mandatory = $true)]
540+
[string]$ConnectionStringADF,
541+
[Parameter(Mandatory = $true)]
540542
[string]$ComputeResourceGroup,
541543
[Parameter(Mandatory = $true)]
542544
[string]$DataResourceGroup
@@ -587,11 +589,20 @@ function Set-SQLServerPermissions {
587589
$roleCommand.Dispose()
588590
}
589591

592+
$connection.Close()
593+
594+
# ADF Permissions
590595
$dataFactoryName = "$SolutionAbbreviation-data-$EnvironmentAbbreviation-adf"
591596
$dataFactory = Get-AzDataFactoryV2 -ResourceGroupName $DataResourceGroup -Name $dataFactoryName -ErrorAction SilentlyContinue
597+
$functionAppsADF = $functionApps | Where-Object { $_.Name -match "-webapi" -or $_.Name -match "-SqlMembershipObtainer"}
592598

593599
if($null -ne $dataFactory) {
594600

601+
$connectionADF = New-Object System.Data.SqlClient.SqlConnection
602+
$connectionADF.ConnectionString = $ConnectionStringADF
603+
$connectionADF.AccessToken = $sqlToken
604+
$connectionADF.Open()
605+
595606
$dataFactorySqlScript = "IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'$dataFactoryName')
596607
BEGIN
597608
CREATE USER [$dataFactoryName] FROM EXTERNAL PROVIDER
@@ -602,13 +613,30 @@ function Set-SQLServerPermissions {
602613

603614
Write-Host "Granting permissions to SQL database for $dataFactoryName"
604615

605-
$roleCommand = $connection.CreateCommand()
606-
$roleCommand.CommandText = $dataFactorySqlScript
607-
[void]$roleCommand.ExecuteNonQuery()
608-
$roleCommand.Dispose()
609-
}
616+
$roleCommandADF = $connectionADF.CreateCommand()
617+
$roleCommandADF.CommandText = $dataFactorySqlScript
618+
[void]$roleCommandADF.ExecuteNonQuery()
619+
$roleCommandADF.Dispose()
610620

611-
$connection.Close()
621+
foreach ($functionApp in $functionAppsADF) {
622+
623+
$functionSqlScript = "IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'$($functionApp.Name)')
624+
BEGIN
625+
CREATE USER [$($functionApp.Name)] FROM EXTERNAL PROVIDER
626+
ALTER ROLE db_datareader ADD MEMBER [$($functionApp.Name)]
627+
ALTER ROLE db_datawriter ADD MEMBER [$($functionApp.Name)]
628+
END"
629+
630+
Write-Host "Granting permissions to SQL database for $($functionApp.Name)"
631+
632+
$roleCommandADF = $connectionADF.CreateCommand()
633+
$roleCommandADF.CommandText = $functionSqlScript
634+
[void]$roleCommandADF.ExecuteNonQuery()
635+
$roleCommandADF.Dispose()
636+
}
637+
638+
$connectionADF.Close()
639+
}
612640
}
613641

614642
function Set-RBACPermissions {
@@ -1101,8 +1129,14 @@ function Deploy-Resources {
11011129
-Name "sqlDatabaseConnectionString" `
11021130
-AsPlainText
11031131

1132+
$connectionStringADF = Get-AzKeyVaultSecret `
1133+
-VaultName "$SolutionAbbreviation-data-$EnvironmentAbbreviation" `
1134+
-Name "sqlServerBasicConnectionStringADF" `
1135+
-AsPlainText
1136+
11041137
Set-SQLServerPermissions `
11051138
-ConnectionString $connectionString `
1139+
-ConnectionStringADF $connectionStringADF `
11061140
-ComputeResourceGroup $computeResourceGroup `
11071141
-DataResourceGroup $dataResourceGroup
11081142

Infrastructure/adf/pipeline/azureDataFactory.bicep

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ param azureUserReaderFunctionKey string
2525
@secure()
2626
param storageAccountConnectionString string
2727

28-
var sqlServerUrl = 'Server=tcp:${sqlServerName}${environment().suffixes.sqlServerHostname},1433'
28+
var sqlServerUrl = '${sqlServerName}${environment().suffixes.sqlServerHostname}'
2929

3030

3131
resource dataFactory 'Microsoft.DataFactory/factories@2018-06-01' = {
@@ -62,9 +62,13 @@ resource linkedService_DestinationDatabase 'Microsoft.DataFactory/factories/link
6262
name: '${factoryName}/DestinationDatabase'
6363
properties: {
6464
annotations: []
65-
type: 'SqlServer'
65+
type: 'AzureSqlDatabase'
6666
typeProperties: {
67-
connectionString: '${sqlServerUrl};${sqlDataBaseName};Authentication=Active Directory Default;TrustServerCertificate=True;Encrypt=True;Connection Timeout=90;'
67+
server: sqlServerUrl
68+
database: sqlDataBaseName
69+
encrypt: 'mandatory'
70+
trustServerCertificate: false
71+
authenticationType: 'SystemAssignedManagedIdentity'
6872
}
6973
}
7074
dependsOn: [

Infrastructure/adf/sql/sqlServer.bicep

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,13 @@ param sqlServerName string
77
@description('Name of SQL Database')
88
param sqlDatabaseName string
99

10+
@description('Data Key vault name.')
11+
param dataKeyVaultName string
12+
13+
var sqlServerUrl = 'Server=tcp:${sqlServerName}${environment().suffixes.sqlServerHostname},1433;'
14+
var sqlServerDataBaseName = 'Initial Catalog=${sqlDatabaseName};'
15+
var sqlServerAdditionalSettings = 'MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=90;'
16+
1017
resource sqlServer 'Microsoft.Sql/servers@2022-11-01-preview' existing = {
1118
name: sqlServerName
1219
}
@@ -22,3 +29,21 @@ resource sqlDatabase 'Microsoft.Sql/servers/databases@2021-02-01-preview' = {
2229
capacity: 0
2330
}
2431
}
32+
33+
module secureKeyvaultSecrets 'keyVaultSecretsSecure.bicep' = {
34+
name: 'secureKeyvaultSecrets'
35+
params: {
36+
keyVaultName: dataKeyVaultName
37+
keyVaultSecrets: {
38+
secrets: [
39+
{
40+
name: 'sqlServerBasicConnectionStringADF'
41+
value: '${sqlServerUrl}${sqlServerDataBaseName}${sqlServerAdditionalSettings}'
42+
}
43+
]
44+
}
45+
}
46+
dependsOn: [
47+
sqlDatabase
48+
]
49+
}

Infrastructure/adf/sql/template.bicep

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ module sqlServer 'sqlServer.bicep' = {
4343
location: location
4444
sqlServerName: sqlServerName
4545
sqlDatabaseName: sqlDataBaseName
46+
dataKeyVaultName: dataKeyVaultName
4647
}
4748
}
4849

0 commit comments

Comments
 (0)