REST API를 통해 Microsoft Fabric에서 SQL 데이터베이스 만들기
적용 대상:✅Microsoft Fabric의 SQL 데이터베이스
Fabric 플랫폼에는 리소스를 배포하고 관리하는 데 사용할 수 있는 다양한 REST API 집합이 있습니다. 이러한 API를 사용하여 패브릭 SQL 데이터베이스를 배포할 수 있습니다. 이 문서 및 샘플 스크립트는 패브릭 SQL 데이터베이스를 배포하고 데이터를 추가하는 데 사용할 수 있는 기본 PowerShell 스크립트를 보여 줍니다.
필수 조건
- 기존의 Fabric 용량이 필요합니다. 그렇지 않은 경우 Fabric 평가판을 시작합니다.
- 관리 포털 테넌트 설정을 사용하여 Fabric에서 SQL 데이터베이스를 사용하도록 설정해야 합니다.
- 새 작업 영역을 만들거나 기존 패브릭 작업 영역을 사용합니다.
- SQL 데이터베이스를 만들려면 작업 영역에 대한 관리자 또는 멤버 역할의 멤버여야 합니다.
- SQLCMD의 golang 버전을 설치합니다. Windows에서 실행
winget install sqlcmd
하여 설치합니다. 다른 운영 체제는 aka.ms/go-sqlcmd 참조하세요. - Az PowerShell 모듈입니다. PowerShell에서 실행
Install-Module az
하여 설치합니다.
REST API를 통해 새 SQL 데이터베이스 만들기
이 예제 스크립트는 Connect-AzAccount
자격 증명을 묻는 데 사용되는 별칭 az login
입니다. 이러한 자격 증명을 사용하여 REST API 호출에 사용할 액세스 토큰을 가져옵니다. SQLCMD는 에 제공된 계정의 컨텍스트를 Connect-AzAccount
사용합니다.
스크립트는 로그인한 사용자의 별칭과 날짜를 사용하여 명명된 데이터베이스를 만듭니다. 현재 REST API는 상태를 반환하지 않으므로 데이터베이스를 만들고 반복하고 확인해야 합니다. 데이터베이스를 만든 후 SQLCMD를 사용하여 일부 개체를 만든 다음 해당 개체의 존재 여부에 대해 쿼리합니다. 마지막으로 데이터베이스를 삭제합니다.
다음 스크립트에서 패브릭 작업 영역 ID로 바꿉 <your workspace id>
니다. URL에서 작업 영역의 ID를 쉽게 찾을 수 있습니다. 이 ID는 브라우저 창에서 두 /
문자 안에 있는 /groups/
고유한 문자열입니다. 예를 들어 . 11aa111-a11a-1111-1abc-aa1111aaaa
https://fabric.microsoft.com/groups/11aa111-a11a-1111-1abc-aa1111aaaa/
이 스크립트는 다음을 보여 줍니다.
- 보안 문자열에서 액세스 토큰을
Get-AzAccessToken 을 사용하여 검색하고변환합니다. PowerShell 7을 사용하는 경우 ConvertFrom-SecureString 옵션도 있습니다. - 항목을 사용하여 새 SQL 데이터베이스 만들기 - 항목 API만듭니다.
- 패브릭 작업 영역의 모든 SQL 데이터베이스를 나열합니다.
- SQLCMD 사용하여 데이터베이스에 연결하여 개체를 만드는 스크립트를 실행합니다.
- 항목 - 항목 삭제 API사용하여 데이터베이스를 삭제합니다.
Import-Module Az.Accounts
Connect-AzAccount
$workspaceid = '<your workspace id>'
$databaseid = $null
$headers = $null
$responseHeaders = $null
# 1. Get the access token and add it to the headers
$access_token = (Get-AzAccessToken -AsSecureString -ResourceUrl https://api.fabric.microsoft.com)
$ssPtr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($access_token.Token)
try {
$headers = @{
Authorization = $access_token.Type + ' ' + ([System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($ssPtr))
}
$access_token.UserId -match('^[^@]+') | Out-Null
# 2. Create the database and wait for it to be created.
$body = @{
displayName = $matches[0] + (Get-Date -Format "MMddyyyy")
type = "SQLDatabase"
description = "Created using public api"
}
$parameters = @{
Method="Post"
Headers=$headers
ContentType="application/json"
Body=($body | ConvertTo-Json)
Uri = 'https://api.fabric.microsoft.com/v1/workspaces/' + $workspaceid + '/items'
}
Invoke-RestMethod @parameters -ErrorAction Stop
$databases = (Invoke-RestMethod -Headers $headers -Uri https://api.fabric.microsoft.com/v1/workspaces/$($workspaceid)/SqlDatabases).value
$databaseid = $databases.Where({$_.displayName -eq $body.displayName}).id
While($databaseid -eq $null)
{
Write-Host 'Waiting on database create.'
Start-Sleep 30
$databases = (Invoke-RestMethod -Headers $headers -Uri https://api.fabric.microsoft.com/v1/workspaces/$($workspaceid)/SqlDatabases).value
$databaseid = $databases.Where({$_.displayName -eq $body.displayName}).id
}
# 3. List all SQL databases in a Fabric workspace
Write-Host 'Listing databases in workspace.'
Invoke-RestMethod -Headers $headers -Uri https://api.fabric.microsoft.com/v1/workspaces/$($workspaceid)/items?type=SQlDatabase | select -ExpandProperty Value | ft
$databaseProperties = (Invoke-RestMethod -Headers $headers -Uri https://api.fabric.microsoft.com/v1/workspaces/$($workspaceid)/SqlDatabases/$($databaseid) | select -ExpandProperty Properties)
#4. Connnect to the database and create a table
Write-Host 'Attempting to connect to the database.'
sqlcmd.exe -S $databaseProperties.ServerFqdn -d $databaseProperties.DatabaseName -G -Q 'create table test2
(
id int
)'
#5. Delete the database
$parameters = @{
Method="Delete"
Headers=$headers
ContentType="application/json"
Body=($body | ConvertTo-Json)
Uri = 'https://api.fabric.microsoft.com/v1/workspaces/' + $workspaceid + '/items/' + $databaseid
}
Invoke-RestMethod @parameters
Write-Output 'Cleaned up:' $body.displayName
} finally {
# The following lines ensure that sensitive data is not left in memory.
$headers = [System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($ssPtr)
$parameters = [System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($ssPtr)
}