Hantera hybridmiljöer med PowerShell i Azure Functions och App Service hybridanslutningar

Funktionen Azure App Service hybridanslutningar ger åtkomst till resurser i andra nätverk. Du kan läsa mer om den här funktionen i dokumentationen om hybridanslutningar . Den här artikeln beskriver hur du använder den här funktionen för att köra PowerShell-funktioner som är riktade mot en lokal server. Den här servern kan sedan användas för att hantera alla resurser i den lokala miljön från en Azure PowerShell funktion.

Konfigurera en lokal server för PowerShell-fjärrkommunikation

Följande skript aktiverar PowerShell-fjärrkommunikation och skapar en ny brandväggsregel och en WinRM https-lyssnare. I testsyfte används ett självsignerat certifikat. I en produktionsmiljö rekommenderar vi att du använder ett signerat certifikat.

# For configuration of WinRM, see
# https://learn.microsoft.com/windows/win32/winrm/installation-and-configuration-for-windows-remote-management.

# Enable PowerShell remoting.
Enable-PSRemoting -Force

# Create firewall rule for WinRM. The default HTTPS port is 5986.
New-NetFirewallRule -Name "WinRM HTTPS" `
                    -DisplayName "WinRM HTTPS" `
                    -Enabled True `
                    -Profile "Any" `
                    -Action "Allow" `
                    -Direction "Inbound" `
                    -LocalPort 5986 `
                    -Protocol "TCP"

# Create new self-signed-certificate to be used by WinRM.
$Thumbprint = (New-SelfSignedCertificate -DnsName $env:COMPUTERNAME  -CertStoreLocation Cert:\LocalMachine\My).Thumbprint

# Create WinRM HTTPS listener.
$Cmd = "winrm create winrm/config/Listener?Address=*+Transport=HTTPS @{Hostname=""$env:COMPUTERNAME ""; CertificateThumbprint=""$Thumbprint""}"
cmd.exe /C $Cmd

Skapa en PowerShell-funktionsapp i portalen

Funktionen App Service hybridanslutningar är endast tillgänglig i prisplaner för Basic, Standard och Isolerad. När du skapar funktionsappen med PowerShell skapar eller väljer du någon av dessa planer.

  1. I menyn i Azure-portalen eller på sidan Start väljer du Skapa en resurs.

  2. På sidan Nytt väljer du Beräkningsfunktionsapp>.

  3. På sidan Grundläggande använder du inställningarna för funktionsappen som anges i följande tabell.

    Inställning Föreslaget värde Beskrivning
    Prenumeration Din prenumeration Prenumerationen som den nya funktionsappen skapas under.
    Resursgrupp myResourceGroup Namnet på den nya resursgrupp där du vill skapa funktionsappen.
    Funktionsappens namn Globalt unikt namn Namn som identifierar din nya funktionsapp. Giltiga tecken är a-z (skiftlägesokänsligt), 0-9 och -.
    Publicera Kod Alternativ för att publicera kodfiler eller en Docker-container.
    Körningsstack Önskat språk Välj PowerShell Core.
    Version Versionsnummer Välj den version av den installerade körningen.
    Region Önskad region Välj en region nära dig eller nära andra tjänster som dina funktioner har åtkomst till.

    Skapa en funktionsapp – Grunder.

  4. Välj Nästa: Värd. Ange följande inställningar på sidan Värd .

    Inställning Föreslaget värde Beskrivning
    Lagringskonto Globalt unikt namn Skapa ett lagringskonto som används av din funktionsapp. Lagringskontonamn måste vara mellan 3 och 24 tecken långa och får endast innehålla siffror och gemener. Du kan också använda ett befintligt konto som måste uppfylla kraven för lagringskontot.
    Operativsystem Önskat operativsystem Ett operativsystem är förvalt baserat på valet av körningsstack, men du kan ändra inställningen om det behövs.
    Plantyp App Service-plan Välj App Service-plan. När du använder en App Service-plan måste du hantera funktionsappens skalning.

    Skapa en funktionsapp – Värd.

  5. Välj Nästa: Övervakning. Ange följande inställningar på sidan Övervakning .

    Inställning Föreslaget värde Beskrivning
    Application Insights Standardvärde Skapar en Application Insights-resurs med samma appnamn i närmaste region som stöds. Genom att expandera den här inställningen eller välja Skapa ny kan du ändra Application Insights-namnet eller välja en annan region i ett Azure-geografiskt område där du vill lagra dina data.

    Skapa en funktionsapp – Övervakning.

  6. Välj Granska + skapa för att granska appkonfigurationsvalen.

  7. Granska inställningarna på sidan Granska + skapa och välj sedan Skapa för att etablera och distribuera funktionsappen.

  8. Välj ikonen Meddelanden i det övre högra hörnet i portalen och titta efter meddelandet Distributionen lyckades .

  9. Välj Gå till resurs att visa den nya funktionsappen. Du kan också välja Fäst på instrumentpanelen. Genom att fästa blir det enklare att återgå till den här funktionsappresursen från instrumentpanelen.

Skapa en hybridanslutning för funktionsappen

Hybridanslutningar konfigureras från nätverksavsnittet i funktionsappen:

  1. Under Inställningar i funktionsappen som du nyss skapade väljer du Nätverk.

  2. Välj Konfigurera dina hybridanslutningars slutpunkter.

    Konfigurera hybridanslutningsslutpunkterna.

  3. Välj Lägg till hybridanslutning.

    Lägg till en hybridanslutning.

  4. Ange information om hybridanslutningen enligt följande skärmbild. För Slutpunktsvärd använder du värdnamnet för den lokala server som du skapade det självsignerade certifikatet för. Du får anslutningsproblem när certifikatnamnet och värdnamnet för den lokala servern inte matchar. Porten matchar standardporten för Windows fjärrhanteringstjänst som definierades på servern tidigare.

    Lägg till hybridanslutning.

    Inställning Föreslaget värde
    Hybridanslutningsnamn ContosoHybridOnPremisesServer
    Slutpunktsvärd finance1
    Slutpunktsport 5986
    Servicebus-namnområde Skapa Ny
    Plats Välj en tillgänglig plats
    Namn contosopowershellhybrid
  5. Välj OK för att skapa hybridanslutningen.

Ladda ned och installera hybridanslutningen

  1. Välj Ladda ned anslutningshanteraren för att spara .msi filen lokalt på datorn.

    Ladda ned installationsprogrammet.

  2. Kopiera .msi-filen från den lokala datorn till den lokala servern.

  3. Kör Hybridanslutningshanteraren installationsprogrammet för att installera tjänsten på den lokala servern.

    Installera hybridanslutningen.

  4. Öppna hybridanslutningen från portalen och kopiera sedan gatewayanslutningssträngen till Urklipp.

    Kopiera hybridanslutningssträngen.

  5. Öppna Hybridanslutningshanteraren-användargränssnittet på den lokala servern.

    Öppna användargränssnittet för hybridanslutning.

  6. Välj Retur manuellt och klistra in anslutningssträngen från Urklipp.

    Klistra in hybridanslutningen.

  7. Starta om Hybridanslutningshanteraren från PowerShell om den inte visas som ansluten.

    Restart-Service HybridConnectionManager
    

Skapa en appinställning för lösenordet för ett administratörskonto

  1. Under Inställningar för funktionsappen väljer du Konfiguration.

  2. Välj + Ny programinställning.

    Konfigurera ett lösenord för administratörskontot.

  3. Ge inställningen namnet ContosoUserPassword och ange lösenordet. Välj OK.

  4. Välj Spara för att lagra lösenordet i funktionsprogrammet.

    Spara lösenordet för administratörskontot.

Skapa en HTTP-utlösare för funktionen

  1. I funktionsappen väljer du Funktioner och sedan + Lägg till.

    Skapa en ny HTTP-utlösare.

  2. Välj mallen HTTP-utlösare .

    Välj mallen HTTP-utlösare.

  3. Ge den nya funktionen namnet och välj Skapa funktion.

    Namnge och skapa den nya HTTP-utlösarfunktionen.

Testa funktionen

  1. I den nya funktionen väljer du Koda + testa. Ersätt PowerShell-koden från mallen med följande kod:

    # Input bindings are passed in via param block.
    param($Request, $TriggerMetadata)
    
    # Write to the Azure Functions log stream.
    Write-Output "PowerShell HTTP trigger function processed a request."
    
    # Note that ContosoUserPassword is a function app setting, so I can access it as $env:ContosoUserPassword.
    $UserName = "ContosoUser"
    $securedPassword = ConvertTo-SecureString  $Env:ContosoUserPassword -AsPlainText -Force
    $Credential = [System.management.automation.pscredential]::new($UserName, $SecuredPassword)
    
    # This is the name of the hybrid connection Endpoint.
    $HybridEndpoint = "finance1"
    
    $Script = {
        Param(
            [Parameter(Mandatory=$True)]
            [String] $Service
        )
        Get-Service $Service
    }
    
    Write-Output "Scenario 1: Running command via Invoke-Command"
    Invoke-Command -ComputerName $HybridEndpoint `
                   -Credential $Credential `
                   -Port 5986 `
                   -UseSSL `
                   -ScriptBlock $Script `
                   -ArgumentList "*" `
                   -SessionOption (New-PSSessionOption -SkipCACheck)
    
  2. Välj Spara.

    Ändra PowerShell-koden och spara FUNKTIONEN HTTP-utlösare.

  3. Välj Test och sedan Kör för att testa funktionen. Granska loggarna för att kontrollera att testet lyckades.

    Testa FUNKTIONEN HTTP-utlösare.

Hantera andra system lokalt

Du kan använda den anslutna lokala servern för att ansluta till andra servrar och hanteringssystem i den lokala miljön. På så sätt kan du hantera datacenteråtgärder från Azure med hjälp av dina PowerShell-funktioner. Följande skript registrerar en PowerShell-konfigurationssession som körs under de angivna autentiseringsuppgifterna. Dessa autentiseringsuppgifter måste vara för en administratör på fjärrservrarna. Du kan sedan använda den här konfigurationen för att få åtkomst till andra slutpunkter på den lokala servern eller datacentret.

# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)

# Write to the Azure Functions log stream.
Write-Host "PowerShell HTTP trigger function processed a request."

# Note that ContosoUserPassword is a function app setting, so I can access it as $env:ContosoUserPassword.
$UserName = "ContosoUser"
$SecuredPassword = ConvertTo-SecureString  $Env:ContosoUserPassword -AsPlainText -Force
$Credential = [System.management.automation.pscredential]::new($UserName, $SecuredPassword)

# This is the name of the hybrid connection Endpoint.
$HybridEndpoint = "finance1"

# The remote server that will be connected to run remote PowerShell commands on
$RemoteServer = "finance2".

Write-Output "Use hybrid connection server as a jump box to connect to a remote machine"

# We are registering an endpoint that runs under credentials ($Credential) that has access to the remote server.
$SessionName = "HybridSession"
$ScriptCommand = {
    param (
        [Parameter(Mandatory=$True)]
        $SessionName)

    if (-not (Get-PSSessionConfiguration -Name $SessionName -ErrorAction SilentlyContinue))
    {
        Register-PSSessionConfiguration -Name $SessionName -RunAsCredential $Using:Credential
    }
}

Write-Output "Registering session on hybrid connection jumpbox"
Invoke-Command -ComputerName $HybridEndpoint `
               -Credential $Credential `
               -Port 5986 `
               -UseSSL `
               -ScriptBlock $ScriptCommand `
               -ArgumentList $SessionName `
               -SessionOption (New-PSSessionOption -SkipCACheck)

# Script to run on the jump box to run against the second machine.
$RemoteScriptCommand = {
    param (
        [Parameter(Mandatory=$True)]
        $ComputerName)
        # Write out the hostname of the hybrid connection server.
        hostname
        # Write out the hostname of the remote server.
        Invoke-Command -ComputerName $ComputerName -Credential $Using:Credential -ScriptBlock {hostname} `
                        -UseSSL -Port 5986 -SessionOption (New-PSSessionOption -SkipCACheck)
}

Write-Output "Running command against remote machine via jumpbox by connecting to the PowerShell configuration session"
Invoke-Command -ComputerName $HybridEndpoint `
               -Credential $Credential `
               -Port 5986 `
               -UseSSL `
               -ScriptBlock $RemoteScriptCommand `
               -ArgumentList $RemoteServer `
               -SessionOption (New-PSSessionOption -SkipCACheck) `
               -ConfigurationName $SessionName

Ersätt följande variabler i det här skriptet med tillämpliga värden från din miljö:

  • $HybridEndpoint
  • $RemoteServer

I de två föregående scenarierna kan du ansluta och hantera dina lokala miljöer med hjälp av PowerShell i Azure Functions- och hybridanslutningar. Vi rekommenderar att du lär dig mer om hybridanslutningar och PowerShell i funktioner.

Du kan också använda virtuella Azure-nätverk för att ansluta till din lokala miljö via Azure Functions.

Nästa steg