我通过 Azure devOps Pipelines 使用 Terraform 脚本来创建底层 Azure 资源。
不需要在 Synapse 下创建“Lake Database / Serverless Database”。
我查看了 Terraform 文档。但看不到任何执行此操作的 TF 命令 - 我很可能遗漏了一些东西。
Synapse 下有没有创建“Lake Database / Serverless Database”的 TF 命令?
或
另一种可以自动化的方法 - 也许是 Azure CLI 命令 - 我又找不到任何东西......?
根据this,Terraform 不支持创建无服务器数据库或湖数据库,并且没有可用于此目的的 CLI 脚本。您可以使用下面的 SQL 脚本创建无服务器 SQL 数据库:
CREATE DATABASE db
此脚本将成功创建Serverless SQL数据库,如下图:
手动创建湖数据库是唯一的选择,如下所示:
resource "null_resource" "synapse_create_db" {
provisioner "local-exec" {
command = <<EOT
az login --service-principal -u ${var.deploymentSpAzureDevOps_Sec} -p ${var.deploymentSpAzureDevOps_EA_Client_Id} --tenant ${var.tenant_id}
$accessToken = az account get-access-token --resource "https://database.windows.net/" | ConvertFrom-Json | select-object -ExpandProperty accessToken
$ServerInstance = '${var.sqlOnDemand}'
$Database = "master"
function SqlQuery($ServerInstance, $Database, $AccessToken, $query)
{
$connection = New-Object System.Data.SqlClient.SqlConnection
$connection.ConnectionString = "Server=$ServerInstance;Database=$database;"
$connection.AccessToken = $AccessToken
$connection.Open()
$command = $connection.CreateCommand()
$command.CommandText = $query
$result = $command.ExecuteReader()
$table = new-object “System.Data.DataTable”
$table.Load($result)
$connection.Close()
return $table
}
$SQLQuery = @"
IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = '${local.databasename}')
CREATE DATABASE [${local.databasename}];
"@
SqlQuery -ServerInstance $ServerInstance -Database $Database -AccessToken $AccessToken -query $SQLQuery
EOT
interpreter = ["pwsh", "-Command"]
}
triggers = {
trigger_each_run = uuid()
}
}