다음을 통해 공유


REST API를 통해 Microsoft Fabric에서 SQL 데이터베이스 만들기

적용 대상:Microsoft Fabric의 SQL 데이터베이스

Fabric 플랫폼에는 리소스를 배포하고 관리하는 데 사용할 수 있는 다양한 REST API 집합이 있습니다. 이러한 API를 사용하여 패브릭 SQL 데이터베이스를 배포할 수 있습니다. 이 문서 및 샘플 스크립트는 패브릭 SQL 데이터베이스를 배포하고 데이터를 추가하는 데 사용할 수 있는 기본 PowerShell 스크립트를 보여 줍니다.

필수 조건

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-aa1111aaaahttps://fabric.microsoft.com/groups/11aa111-a11a-1111-1abc-aa1111aaaa/

이 스크립트는 다음을 보여 줍니다.

  1. 보안 문자열에서 액세스 토큰을 Get-AzAccessToken을 사용하여 검색하고 변환합니다. PowerShell 7을 사용하는 경우 ConvertFrom-SecureString 옵션도 있습니다.
  2. 항목을 사용하여 새 SQL 데이터베이스 만들기 - 항목 API만듭니다.
  3. 패브릭 작업 영역의 모든 SQL 데이터베이스를 나열합니다.
  4. SQLCMD 사용하여 데이터베이스에 연결하여 개체를 만드는 스크립트를 실행합니다.
  5. 항목 - 항목 삭제 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)
}