Delen via


Een taak automatisch onderbreken met behulp van PowerShell en Azure Functions of Azure Automation

Voor sommige toepassingen is een benadering voor het verwerken van stromen vereist (zoals via Azure Stream Analytics), maar hoeft deze niet continu te worden uitgevoerd. De volgende redenen zijn:

  • Invoergegevens die volgens een schema binnenkomen (bijvoorbeeld bovenaan het uur)
  • Een schaars of laag volume binnenkomende gegevens (weinig records per minuut)
  • Bedrijfsprocessen die profiteren van time-windowing-mogelijkheden, maar die per essentie in batch worden uitgevoerd (bijvoorbeeld financiën of HR)
  • Demonstraties, prototypen of tests waarbij langlopende taken op lage schaal worden uitgevoerd

Het voordeel van het niet continu uitvoeren van deze taken is kostenbesparingen, omdat Stream Analytics-taken in de loop van de tijd per streaming-eenheid worden gefactureerd .

In dit artikel wordt uitgelegd hoe u automatische onderbreking instelt voor een Azure Stream Analytics-taak. Je configureert een taak die een opdracht automatisch onderbreekt en hervat volgens een planning. De term onderbrekenbetekent dat de taakstatusis gestopt om facturering te voorkomen.

In dit artikel worden het algemene ontwerp, de vereiste onderdelen en enkele implementatiedetails besproken.

Notitie

Er zijn nadelen om een taak automatisch te onderbreken. De belangrijkste nadelen zijn het verlies van mogelijkheden met lage latentie/realtime en de potentiële risico's van het toestaan van de achterstand van invoergebeurtenissen om te groeien zonder supervisie terwijl een taak wordt onderbroken. Organisaties moeten niet overwegen om automatisch te onderbreken voor de meeste productiescenario's die op schaal worden uitgevoerd.

Ontwerpen

Voor het voorbeeld in dit artikel wilt u dat uw taak N minuten wordt uitgevoerd voordat u deze M minuten onderbreekt. Wanneer de taak is onderbroken, worden de invoergegevens niet verbruikt en worden ze upstream verzameld. Nadat de taak is gestart, wordt die achterstand ingehaald en worden de gegevens verwerkt voordat deze opnieuw wordt uitgeschakeld.

Diagram dat het gedrag van een automatisch onderbroken taak in de loop van de tijd illustreert.

Wanneer de taak wordt uitgevoerd, moet de taak niet stoppen totdat de metrische gegevens in orde zijn. De metrische gegevens van belang zijn de achterstand van invoer en het watermerk. U controleert of beide ten minste N minuten op hun basisniveau zijn. Dit gedrag wordt omgezet in twee acties:

  • Na M minuten wordt een gestopte taak opnieuw gestart.
  • Een lopende taak wordt enige tijd na N minuten gestopt zodra de metrische gegevens over achterstand en watermerk in orde zijn.

Diagram met de mogelijke statussen van een taak.

Denk bijvoorbeeld aan N = 5 minuten en M = 10 minuten. Met deze instellingen heeft een taak ten minste 5 minuten om alle gegevens te verwerken die in 15 minuten zijn ontvangen. Potentiële kostenbesparingen zijn tot 66%.

Als u de taak opnieuw wilt starten, gebruikt u de startoptie Wanneer voor het laatst gestopt. Deze optie geeft Stream Analytics de opdracht om alle gebeurtenissen te verwerken die zich stroomopwaarts hebben opgehoopt sinds de taakuitvoering werd gestopt.

Er zijn twee kanttekeningen in deze situatie. Ten eerste kan de taak niet langer worden gestopt dan de retentieperiode van de invoerstroom. Als u de taak slechts eenmaal per dag uitvoert, moet u ervoor zorgen dat de bewaarperiode voor gebeurtenissen meer dan één dag is. Ten tweede moet de taak ten minste één keer zijn gestart voordat de modus Wanneer laatste gestopt is geaccepteerd (anders is deze nog nooit eerder gestopt). De eerste uitvoering van een taak moet dus handmatig zijn of u moet het script uitbreiden om dit geval te behandelen.

De laatste overweging is om deze acties idempotent te maken. U kunt ze vervolgens herhalen zonder bijwerkingen, voor zowel gebruiksgemak als tolerantie.

Onderdelen

API-aanroepen

In dit artikel wordt de behoefte voorzien om te interageren met Stream Analytics op de volgende aspecten:

  • De huidige taakstatus ophalen (Stream Analytics-resourcebeheer):
    • Als de taak wordt uitgevoerd:
      • De tijd ophalen sinds de taak is gestart (logboeken).
      • De huidige metrische waarden (metrische gegevens) ophalen.
      • Stop de taak, indien van toepassing (Stream Analytics-resourcebeheer).
    • Als de taak is gestopt:
      • De tijd ophalen sinds de taak is gestopt (logboeken).
      • Start, indien van toepassing, de taak (Stream Analytics-resourcebeheer).

Voor Stream Analytics-resourcebeheer kunt u de REST API, de .NET SDK of een van de CLI-bibliotheken (Azure CLI of PowerShell) gebruiken.

Voor metrische gegevens en logboeken wordt alles in Azure gecentraliseerd onder Azure Monitor, met een vergelijkbare keuze aan API-oppervlakken. Logboeken en metrische gegevens liggen altijd 1 tot 3 minuten achter wanneer u query's uitvoert op de API's. Als u N instelt op 5, betekent dit meestal dat de taak in werkelijkheid 6 tot 8 minuten wordt uitgevoerd.

Een andere overweging is dat metrische gegevens altijd worden verzonden. Wanneer de taak is gestopt, retourneert de API lege records. U moet de uitvoer van uw API-aanroepen opschonen om u te concentreren op relevante waarden.

Scripttaal

In dit artikel wordt automatische onderbreking in PowerShell geïmplementeerd. De eerste reden voor deze keuze is dat PowerShell nu platformoverschrijdend is. Het kan worden uitgevoerd op elk besturingssysteem, waardoor implementaties eenvoudiger worden. De tweede reden is dat het objecten accepteert en retourneert in plaats van tekenreeksen. Objecten maken parseren en verwerken eenvoudiger voor automatiseringstaken.

Gebruik in PowerShell de Az PowerShell-module (waarmee Az.Monitor en Az.StreamAnalytics worden gestart) voor alles wat u nodig hebt:

Hostingservice

Als u uw PowerShell-taak wilt hosten, hebt u een service nodig die geplande uitvoeringen biedt. Er zijn veel opties, maar hier zijn twee serverloze opties:

  • Azure Functions, een rekenengine die vrijwel elk stukje code kan uitvoeren. Het biedt een timertrigger die maximaal elke seconde kan worden uitgevoerd.
  • Azure Automation, een beheerde service voor het uitvoeren van cloudworkloads en -resources. Het doel is passend, maar het minimale planningsinterval is 1 uur (korter met tijdelijke oplossingen).

Als u de tijdelijke oplossingen niet erg vindt, is Azure Automation de eenvoudigere manier om de taak te implementeren. Maar in dit artikel schrijft u eerst een lokaal script, zodat u deze kunt vergelijken. Nadat u een functionerend script hebt, implementeert u het script zowel in Functions als in een Automation-account.

Hulpmiddelen voor ontwikkelaars

We raden u ten zeerste aan om lokale ontwikkeling via Visual Studio Code te gebruiken voor zowel Functions als Stream Analytics. Met behulp van een lokale ontwikkelomgeving kunt u broncodebeheer gebruiken en kunt u eenvoudig implementaties herhalen. Maar omwille van de beknoptheid illustreert dit artikel het proces in Azure Portal.

Het PowerShell-script lokaal schrijven

De beste manier om het script te ontwikkelen, is lokaal. Omdat PowerShell platformoverschrijdend is, kunt u het script schrijven en testen op elk besturingssysteem. In Windows kunt u Windows Terminal gebruiken met PowerShell 7 en Azure PowerShell.

Het laatste script dat in dit artikel wordt gebruikt, is beschikbaar voor Azure Functions en Azure Automation. Het is anders dan het volgende script omdat het is bekabeld naar de hostingomgeving (Functions of Automation). In dit artikel wordt dat aspect later besproken. Eerst doorloopt u een versie van het script dat alleen lokaal wordt uitgevoerd.

Dit script is opzettelijk geschreven in een eenvoudige vorm, zodat iedereen het kan begrijpen.

Bovenaan stelt u de vereiste parameters in en controleert u de status van de initiële taak:


# Setting variables
$restartThresholdMinute = 10 # This is M
$stopThresholdMinute = 5 # This is N

$maxInputBacklog = 0 # The amount of backlog you tolerate when stopping the job (in event count, 0 is a good starting point)
$maxWatermark = 10 # The amount of watermark you tolerate when stopping the job (in seconds, 10 is a good starting point at low Streaming Units)

$subscriptionId = "<Replace with your Subscription Id - not the name>"
$resourceGroupName = "<Replace with your Resource Group Name>"
$asaJobName = "<Replace with your Stream Analytics job name>"

$resourceId = "/subscriptions/$($subscriptionId )/resourceGroups/$($resourceGroupName )/providers/Microsoft.StreamAnalytics/streamingjobs/$($asaJobName)"

# If not already logged, uncomment and run the two following commands:
# Connect-AzAccount
# Set-AzContext -SubscriptionId $subscriptionId

# Check current Stream Analytics job status
$currentJobState = Get-AzStreamAnalyticsJob  -ResourceGroupName $resourceGroupName -Name $asaJobName | Foreach-Object {$_.JobState}
Write-Output "asaRobotPause - Job $($asaJobName) is $($currentJobState)."

Als de taak wordt uitgevoerd, controleert u of de taak ten minste N minuten wordt uitgevoerd. Je controleert ook de werkachterstand en het watermerk.


# Switch state
if ($currentJobState -eq "Running")
{
    # First, look up the job start time with Get-AzActivityLog
    ## Get-AzActivityLog issues warnings about deprecation coming in future releases. Here you ignore them via -WarningAction Ignore.
    ## You check in 1,000 records of history, to make sure you're not missing what you're looking for. It might need adjustment for a job that has a lot of logging happening.
    ## There's a bug in Get-AzActivityLog that triggers an error when Select-Object First is in the same pipeline (on the same line). So you move it down.
    $startTimeStamp = Get-AzActivityLog -ResourceId $resourceId -MaxRecord 1000 -WarningAction Ignore | Where-Object {$_.EventName.Value -like "Start Job*"}
    $startTimeStamp = $startTimeStamp | Select-Object -First 1 | Foreach-Object {$_.EventTimeStamp}

    # Then gather the current metric values
    ## Get-AzMetric issues warnings about deprecation coming in future releases. Here you ignore them via -WarningAction Ignore.
    $currentBacklog = Get-AzMetric -ResourceId $resourceId -TimeGrain 00:01:00 -MetricName "InputEventsSourcesBacklogged" -DetailedOutput -WarningAction Ignore
    $currentWatermark = Get-AzMetric -ResourceId $resourceId -TimeGrain 00:01:00 -MetricName "OutputWatermarkDelaySeconds" -DetailedOutput -WarningAction Ignore

    # Metrics are always lagging 1-3 minutes behind, so grabbing the last N minutes actually means checking N+3. This might be overly safe and can be fine-tuned down per job.
    $Backlog =  $currentBacklog.Data |
                    Where-Object {$_.Maximum -ge 0} | # Remove the empty records (when the job is stopped or starting)
                    Sort-Object -Property Timestamp -Descending |
                    Where-Object {$_.Timestamp -ge $startTimeStamp} | # Keep only the records of the latest run
                    Select-Object -First $stopThresholdMinute | # Take the last N records
                    Measure-Object -Sum Maximum # Sum over those N records
    $BacklogSum = $Backlog.Sum

    $Watermark = $currentWatermark.Data |
                    Where-Object {$_.Maximum -ge 0} |
                    Sort-Object -Property Timestamp -Descending |
                    Where-Object {$_.Timestamp -ge $startTimeStamp} |
                    Select-Object -First $stopThresholdMinute |
                    Measure-Object -Average Maximum # Here you average
    $WatermarkAvg = [int]$Watermark.Average # Rounding the decimal value and casting it to integer

    # Because you called Get-AzMetric with a TimeGrain of a minute, counting the number of records gives you the duration in minutes
    Write-Output "asaRobotPause - Job $($asaJobName) is running since $($startTimeStamp) with a sum of $($BacklogSum) backlogged events, and an average watermark of $($WatermarkAvg) sec, for $($Watermark.Count) minutes."

    # -le for lesser or equal, -ge for greater or equal
    if (
        ($BacklogSum -ge 0) -and ($BacklogSum -le $maxInputBacklog) -and ` # is not null and is under the threshold
        ($WatermarkAvg -ge 0) -and ($WatermarkAvg -le $maxWatermark) -and ` # is not null and is under the threshold
        ($Watermark.Count -ge $stopThresholdMinute) # at least N values
        )
    {
        Write-Output "asaRobotPause - Job $($asaJobName) is stopping..."
        Stop-AzStreamAnalyticsJob -ResourceGroupName $resourceGroupName -Name $asaJobName
    }
    else {
        Write-Output "asaRobotPause - Job $($asaJobName) is not stopping yet, it needs to have less than $($maxInputBacklog) backlogged events and under $($maxWatermark) sec watermark for at least $($stopThresholdMinute) minutes."
    }
}

Als de taak is gestopt, controleert u het logboek om te vinden wanneer de laatste Stop Job actie is uitgevoerd:


elseif ($currentJobState -eq "Stopped")
{
    # First, look up the job start time with Get-AzActivityLog
    ## Get-AzActivityLog issues warnings about deprecation coming in future releases. Here you ignore them via -WarningAction Ignore.
    ## You check in 1,000 records of history, to make sure you're not missing what you're looking for. It might need adjustment for a job that has a lot of logging happening.
    ## There's a bug in Get-AzActivityLog that triggers an error when Select-Object First is in the same pipeline (on the same line). So you move it down.
    $stopTimeStamp = Get-AzActivityLog -ResourceId $resourceId -MaxRecord 1000 -WarningAction Ignore | Where-Object {$_.EventName.Value -like "Stop Job*"}
    $stopTimeStamp = $stopTimeStamp | Select-Object -First 1 | Foreach-Object {$_.EventTimeStamp}

    # Get-Date returns a local time. You project it to the same time zone (universal) as the result of Get-AzActivityLog that you extracted earlier.
    $minutesSinceStopped = ((Get-Date).ToUniversalTime()- $stopTimeStamp).TotalMinutes

    # -ge for greater or equal
    if ($minutesSinceStopped -ge $restartThresholdMinute)
    {
        Write-Output "asaRobotPause - Job $($jobName) was paused $([int]$minutesSinceStopped) minutes ago, set interval is $($restartThresholdMinute), it is now starting..."
        Start-AzStreamAnalyticsJob -ResourceGroupName $resourceGroupName -Name $asaJobName -OutputStartMode LastOutputEventTime
    }
    else{
        Write-Output "asaRobotPause - Job $($jobName) was paused $([int]$minutesSinceStopped) minutes ago, set interval is $($restartThresholdMinute), it will not be restarted yet."
    }
}
else {
    Write-Output "asaRobotPause - Job $($jobName) is not in a state I can manage: $($currentJobState). Let's wait a bit, but consider helping is that doesn't go away!"
}

Meld aan het einde de taakvoltooiing in:


# Final Stream Analytics job status check
$newJobState = Get-AzStreamAnalyticsJob  -ResourceGroupName $resourceGroupName -Name $asaJobName | Foreach-Object {$_.JobState}
Write-Output "asaRobotPause - Job $($asaJobName) was $($currentJobState), is now $($newJobState). Job completed."

Optie 1: De taak hosten in Azure Functions

Ter referentie onderhoudt het Azure Functions-team een uitgebreide Handleiding voor PowerShell-ontwikkelaars.

Eerst hebt u een nieuwe functie-app nodig. Een functie-app is vergelijkbaar met een oplossing die meerdere functies kan hosten.

U kunt de volledige procedure ophalen, maar het is de bedoeling om in Azure Portal een nieuwe functie-app te maken met:

  • Publiceren: code
  • Runtime: PowerShell Core
  • Versie: 7+

Nadat u de functie-app hebt ingericht, begint u met de algehele configuratie.

Beheerde identiteit voor Azure Functions

De functie heeft machtigingen nodig om de Stream Analytics-taak te starten en te stoppen. U wijst deze machtigingen toe met behulp van een beheerde identiteit.

De eerste stap is het inschakelen van een door het systeem toegewezen beheerde identiteit voor de functie door deze procedure te volgen.

U kunt nu de juiste machtigingen verlenen voor die identiteit in de Stream Analytics-taak die u automatisch wilt onderbreken. Voor deze taak voegt u in het portalgebied voor de Stream Analytics-taak (niet de functie) in Toegangsbeheer (IAM) een roltoewijzing toe aan de rolbijdragervoor een lid van het type Beheerde identiteit. Selecteer de naam van de functie van eerder.

Schermopname van de instellingen voor toegangsbeheer voor een Stream Analytics-taak.

In het PowerShell-script kunt u een controle toevoegen om ervoor te zorgen dat de beheerde identiteit correct is ingesteld. (Het laatste script is beschikbaar op GitHub.)


# Check if a managed identity has been enabled and granted access to a subscription, resource group, or resource
$AzContext = Get-AzContext -ErrorAction SilentlyContinue
if (-not $AzContext.Subscription.Id)
{
    Throw ("Managed identity is not enabled for this app or it has not been granted access to any Azure resources. Please see /azure/app-service/overview-managed-identity for additional details.")
}

Voeg enkele logboekgegevens toe om ervoor te zorgen dat de functie wordt geactiveerd:


$currentUTCtime = (Get-Date).ToUniversalTime()

# Write an information log with the current time.
Write-Host "asaRobotPause - PowerShell timer trigger function is starting at time: $currentUTCtime"

Parameters voor Azure Functions

De beste manier om uw parameters door te geven aan het script in Functions is door de toepassingsinstellingen van de functie-app als omgevingsvariabelen te gebruiken.

De eerste stap is het volgen van de procedure voor het definiëren van uw parameters als app-instellingen op de pagina voor de functie-app. U hebt het volgende nodig:

Naam Waarde
maxInputBacklog De hoeveelheid achterstand die u tolereert bij het stoppen van de taak. Bij de telling van gebeurtenissen is 0 een goed uitgangspunt.
maxWatermark De hoeveelheid watermerk die u tolereert bij het stoppen van de bewerking. Binnen enkele seconden is 10 een goed startpunt bij lage streaming-eenheden.
restartThresholdMinute M: De tijd (in minuten) totdat een gestopte taak opnieuw wordt gestart.
stopThresholdMinute N: De tijd (in minuten) van de afkoelperiode totdat een lopende taak wordt gestopt. De invoerachterstand moet gedurende die tijd op 0 blijven.
subscriptionId De abonnements-id (niet de naam) van de Stream Analytics-taak die automatisch wordt onderbroken.
resourceGroupName De naam van de resourcegroep van de Stream Analytics-job die automatisch wordt gepauzeerd.
asaJobName De naam van de Stream Analytics-taak die automatisch wordt onderbroken.

Werk vervolgens uw PowerShell-script bij om de variabelen dienovereenkomstig te laden:

$maxInputBacklog = $env:maxInputBacklog
$maxWatermark = $env:maxWatermark

$restartThresholdMinute = $env:restartThresholdMinute
$stopThresholdMinute = $env:stopThresholdMinute

$subscriptionId = $env:subscriptionId
$resourceGroupName = $env:resourceGroupName
$asaJobName = $env:asaJobName

PowerShell-modulevereisten

Op dezelfde manier als u Azure PowerShell lokaal moest installeren om de Stream Analytics-opdrachten (zoals Start-AzStreamAnalyticsJob) te gebruiken, moet u deze toevoegen aan de host van de functie-app:

  1. Selecteer op de pagina voor de functie-app, onder Functions, App-bestanden en selecteer vervolgens requirements.psd1.
  2. Verwijder opmerkingen bij de regel 'Az' = '6.*'.
  3. Start de app opnieuw om deze wijziging door te voeren.

Schermopname van de app-bestandeninstellingen voor de functie-app.

De functie maken

Nadat u alle configuratie hebt voltooid, kunt u de specifieke functie in de functie-app maken om het script uit te voeren.

Ontwikkel in de portal een functie die wordt geactiveerd op een timer. Zorg ervoor dat de functie elke minuut wordt geactiveerd met 0 */1 * * * *, en dat deze 'op seconde 0 van elke 1 minuut' wordt gelezen .

Schermopname van het maken van een nieuwe timertriggerfunctie in een functie-app.

Indien nodig kunt u de timerwaarde in Integratie wijzigen door het schema bij te werken.

Schermopname van de integratie-instellingen van een functie.

Vervolgens kunt u in Code + Test uw script kopiëren in run.ps1 en het testen. U kunt het volledige script ook kopiëren vanuit GitHub. De bedrijfslogica is verplaatst naar een try/catch-instructie om juiste fouten te genereren als er iets mislukt tijdens de verwerking.

Schermopname van het deelvenster Code+Test voor de functie.

U kunt controleren of alles goed wordt uitgevoerd door Testen/Uitvoeren te selecteren in het deelvenster Code en test. U kunt ook het Monitor-paneel bekijken, maar het loopt altijd een paar uitvoeringen achter.

Schermopname van de uitvoer van een geslaagde run.

Een waarschuwing instellen voor de uitvoering van de functie

Ten slotte wilt u een melding ontvangen via een waarschuwing als de functie niet goed wordt uitgevoerd. Waarschuwingen hebben een kleine kosten, maar kunnen duurdere situaties voorkomen.

Voer op de pagina voor de functie-app, onder Logboeken, de volgende query uit. Het retourneert alle mislukte uitvoeringen in de afgelopen 5 minuten.

requests
| where success == false
| where timestamp > ago(5min)
| summarize failedCount=sum(itemCount) by operation_Name
| order by failedCount desc

Selecteer nieuwe waarschuwingsregel in de queryeditor. Definieer in het deelvenster dat wordt geopend de meting als:

  • Meting: failedCount
  • Aggregatietype: Totaal
  • Aggregatiegranulariteit: 5 minuten

Stel vervolgens waarschuwingslogica als volgt in:

  • Operator: Groter dan
  • Drempelwaarde: 0
  • Frequentie van evaluatie: 5 minuten

Hier kunt u een nieuwe actiegroep opnieuw gebruiken of maken. Voltooi vervolgens de configuratie.

Als u wilt controleren of u de waarschuwing correct hebt ingesteld, kunt u overal in het PowerShell-script toevoegen throw "Testing the alert" en vervolgens vijf minuten wachten om een e-mailbericht te ontvangen.

Optie 2: De taak hosten in Azure Automation

Eerst hebt u een nieuw Automation-account nodig. Een Automation-account is vergelijkbaar met een oplossing die meerdere runbooks kan hosten.

Zie voor de procedure de quickstart Een Automation-account maken met behulp van de Azure Portal. U kunt ervoor kiezen om rechtstreeks op het tabblad Geavanceerd een door het systeem toegewezen beheerde identiteit te gebruiken.

Ter referentie heeft het Automation-team een zelfstudie voor het aan de slag gaan met PowerShell-runbooks.

Parameters voor Azure Automation

Met een runbook kunt u de klassieke parametersyntaxis van PowerShell gebruiken om argumenten door te geven:

Param(
    [string]$subscriptionId,
    [string]$resourceGroupName,
    [string]$asaJobName,

    [int]$restartThresholdMinute,
    [int]$stopThresholdMinute,

    [int]$maxInputBacklog,
    [int]$maxWatermark
)

Beheerde identiteit voor Azure Automation

Het Automation-account moet een beheerde identiteit hebben ontvangen tijdens het inrichten. Maar indien nodig kunt u een beheerde identiteit inschakelen met behulp van deze procedure.

Net als voor de functie moet u de juiste machtigingen verlenen voor de Stream Analytics-taak die u automatisch wilt onderbreken.

Als u de machtigingen wilt verlenen, voegt u in het portalgebied voor de Stream Analytics-taak (niet de pagina Automation) in Toegangsbeheer (IAM) een roltoewijzing toe aan de rolbijdragervoor een lid van het type Beheerde identiteit. Selecteer de naam van het Automation-account van eerder.

Schermopname van de instellingen voor toegangsbeheer voor een Stream Analytics-taak.

In het PowerShell-script kunt u een controle toevoegen om ervoor te zorgen dat de beheerde identiteit correct is ingesteld. (Het laatste script is beschikbaar op GitHub.)

# Ensure that you don't inherit an AzContext in your runbook
Disable-AzContextAutosave -Scope Process | Out-Null

# Connect by using a managed service identity
try {
        $AzureContext = (Connect-AzAccount -Identity).context
    }
catch{
        Write-Output "There is no system-assigned user identity. Aborting.";
        exit
    }

Het runbook maken

Nadat u de configuratie hebt voltooid, kunt u het specifieke runbook in het Automation-account maken om uw script uit te voeren. Hier hoeft u Azure PowerShell niet als vereiste toe te voegen. Het is al ingebouwd.

Selecteer Runbooks in de portal onder Procesautomatisering. Selecteer vervolgens Een runbook maken, selecteer PowerShell als runbooktype en kies een versie hoger dan 7 als versie (op dit moment 7.1 (preview)).

U kunt uw script nu plakken en testen. U kunt het volledige script kopiëren vanuit GitHub. De bedrijfslogica is verplaatst naar een try/catch-instructie om juiste fouten te genereren als er iets mislukt tijdens de verwerking.

Schermopname van de runbookscripteditor in Azure Automation.

U kunt controleren of alles goed is aangesloten in het testvenster.

Daarna moet u de taak publiceren (door Publiceren te selecteren), zodat u het runbook aan een planning kunt koppelen. Het maken en koppelen van de planning is een eenvoudig proces. Het is nu een goed moment om te onthouden dat er tijdelijke oplossingen zijn om planningsintervallen van minder dan 1 uur te bereiken.

Ten slotte kunt u een waarschuwing instellen. De eerste stap is het inschakelen van logboeken met behulp van de diagnostische instellingen van het Automation-account. De tweede stap is het vastleggen van fouten met behulp van een query zoals u voor Functions hebt gedaan.

Resultaat

In uw Stream Analytics-taak kunt u controleren of alles op twee plaatsen wordt uitgevoerd zoals verwacht.

Dit is het activiteitenlogboek:

Schermopname van de logboeken van de Stream Analytics-taak.

En dit zijn de metrische gegevens:

Schermopname van de metrische gegevens van de Stream Analytics-taak.

Nadat u het script hebt begrepen, is het opnieuw bewerken om het bereik ervan uit te breiden een eenvoudige taak. U kunt het script eenvoudig bijwerken om gericht op een lijst met taken te zijn in plaats van op één. U kunt grotere bereiken definiëren en verwerken met behulp van tags, resourcegroepen of zelfs hele abonnementen.

Ondersteuning krijgen

Probeer de Microsoft Q&A-pagina voor Azure Stream Analytics voor meer hulp.

Volgende stappen

U hebt de basisbeginselen geleerd van het gebruik van PowerShell om het beheer van Azure Stream Analytics-taken te automatiseren. Zie de volgende artikelen voor meer informatie: