Zdieľať cez


Vytvorenie databázy SQL pomocou rozhrania REST API pre službu Microsoft Fabric

Vzťahuje sa na:databáza SQL v službe Microsoft Fabric

Rozhranie REST API služby Fabric môžete použiť na nasadenie a spravovanie zdrojov vrátane databáz SQL v službe Fabric.

Tento článok a vzorový skript ukazujú, ako používať prostredie PowerShell na volanie rozhrania REST API služby Fabric na nasadenie databázy SQL služby Fabric.

Požiadavky

Vytvorenie novej databázy SQL cez REST API

Tento príklad skript používa Connect-AzAccountalias , alias na výzvu az login na zadanie poverení. Tieto poverenia používa na získanie prístupového tokenu, ktorý sa používa na volania rozhrania REST API. SQLCMD používa kontext konta , ktoré bolo poskytnuté funkcii Connect-AzAccount.

Skript vytvorí databázu s názvom s aliasom prihláseného používateľa a dátumom. Rozhranie REST API v súčasnosti nevráti stav, takže musíme vytvoriť slučku a skontrolovať, či sa má databáza vytvoriť. Po vytvorení databázy sa funkcia SQLCMD použije na vytvorenie niektorých objektov a následné dotazovanie na ich existenciu. Nakoniec databázu odstránime.

V nasledujúcom skripte nahraďte <your workspace id> svoje ID pracovného priestoru služby Fabric. ID pracovného priestoru nájdete Napríklad 11aa111-a11a-1111-1abc-aa1111aaaa v .https://fabric.microsoft.com/groups/11aa111-a11a-1111-1abc-aa1111aaaa/

Tento skript popisuje:

  1. Načítajte prístupový token pomocou Get-AzAccessToken a ho skonvertujte zo zabezpečeného reťazca. Ak používate prostredie PowerShell 7, možnosť ConvertFrom-SecureString.
  2. Vytvorte novú databázu SQL pomocou položky – vytvoriť rozhranie API položky.
  3. Uviesť zoznam všetkých databáz SQL v pracovnom priestore služby Fabric.
  4. Pripojte sa k databáze pomocou SQLCMD, čím spustíte skript na vytvorenie objektu.
  5. Odstránenie databázy pomocou položiek – odstrániť rozhranie API položky.
Import-Module Az.Accounts

az login

$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 
    );
    insert into test2 values (1);
    insert into test2 values (2);
    insert into test2 values (3);
    select * from test2;' 

    #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)
}