Verwalten von Hybridumgebungen mit PowerShell in Azure Functions und App Service Hybridverbindungen

Die Funktion Azure App Service Hybridverbindungen ermöglicht den Zugriff auf Ressourcen in anderen Netzwerken. Weitere Informationen zu dieser Funktion finden Sie in der Dokumentation zu Hybrid Connections. In diesem Artikel wird beschrieben, wie Sie diese Funktion zum Ausführen von PowerShell-Funktionen verwenden, die auf einen lokalen Server abzielen. Dieser Server kann dann verwendet werden, um alle Ressourcen in der lokalen Umgebung aus einer Azure PowerShell-Funktion zu verwalten.

Konfigurieren eines lokalen Servers für PowerShell-Remoting

Das folgende Skript ermöglicht PowerShell-Remoting und erstellt eine neue Firewallregel und einen WinRM-HTTPS-Listener. Zu Testzwecken wird ein selbstsigniertes Zertifikat verwendet. In einer Produktionsumgebung wird die Verwendung eines signierten Zertifikats empfohlen.

# 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

Erstellen einer PowerShell-Funktions-App im Portal

Die Funktion App Service Hybridverbindungen ist nur in den Basic-, Standard- und Isolierten-Tarifplänen verfügbar. Wenn Sie die Funktions-App mit PowerShell erstellen, erstellen oder wählen Sie einen dieser Tarife aus.

  1. Wählen Sie im Menü Azure portal oder auf der Seite HomeRessource erstellen aus.

  2. Wählen Sie auf der Seite NeuCompute> und Function App aus.

  3. Verwenden Sie auf der Seite Grundlagen die Funktions-App-Einstellungen, die in der folgenden Tabelle angegeben sind.

    Einstellung Vorgeschlagener Wert BESCHREIBUNG
    Abonnement Ihr Abonnement Das Abonnement, unter dem diese neue Funktions-App erstellt wird.
    Resource Group myResourceGroup Der Name der neuen Ressourcengruppe, in der die Funktions-App erstellt wird.
    Name der Funktions-App Global eindeutiger Name Der Name, der Ihre neue Funktionen-App bezeichnet Gültige Zeichen sind a-z (Groß-/Kleinschreibung nicht beachtet), 0-9 und -.
    Veröffentlichen Code Option zum Veröffentlichen von Codedateien oder eines Docker-Containers.
    Runtime-Stapel Bevorzugte Sprache Wählen Sie die PowerShell Core aus.
    Version Versionsnummer Wählen Sie die Version der installierten Runtime aus.
    Region Bevorzugte Region Wählen Sie eine Region in Ihrer Nähe oder in der Nähe anderer Dienste aus, auf die Ihre Funktionen zugreifen.

    Erstellen einer Funktions-App: Grundlagen.

  4. Wählen Sie Weiter: Hosting aus. Geben Sie auf der Seite Hosting die folgenden Einstellungen ein.

    Einstellung Vorgeschlagener Wert BESCHREIBUNG
    Speicherkonto Global eindeutiger Name Erstellen Sie ein Storage-Konto, das von Ihrer Function-App verwendet wird. Storage Kontonamen müssen zwischen 3 und 24 Zeichen lang sein und dürfen nur Zahlen und Kleinbuchstaben enthalten. Sie können auch ein vorhandenes Konto verwenden, das die Anforderungen an das Speicherkonto erfüllen muss.
    Betriebssystem Bevorzugtes Betriebssystem Ein Betriebssystem ist für Sie basierend auf Ihrer Runtimestapelauswahl vorab ausgewählt, aber Sie können die Einstellung ggf. ändern.
    Plantyp App Service Plan Wählen Sie App service Plan aus. Bei der Ausführung in einem App Service-Plan müssen Sie die Skalierung Ihrer Funktions-App verwalten.

    Erstellen einer Funktions-App: Hosting.

  5. Wählen Sie Weiter: Überwachung aus. Geben Sie auf der Seite Überwachung die folgenden Einstellungen ein.

    Einstellung Vorgeschlagener Wert BESCHREIBUNG
    Application Insights Standard Erstellt eine Application Insights-Ressource mit dem gleichen App-Namen in der nächstgelegenen unterstützten Region. Wenn Sie diese Einstellung erweitern oder Neue auswählen, können Sie den Namen von Application Insights ändern oder einen anderen Bereich in einer Azure Geografie auswählen wo Sie Ihre Daten speichern möchten.

    Erstellen einer Funktions-App: Überwachung.

  6. Wählen Sie Review + create aus, um die app configuration Auswahl zu überprüfen.

  7. Überprüfen Sie auf der Seite Bewerten + erstellen Ihre Einstellungen, und wählen Sie dann Erstellen aus, um die Funktions-App bereitzustellen.

  8. Wählen Sie oben rechts im Portal das Benachrichtigungssymbol aus, und achten Sie auf die Meldung Bereitstellung erfolgreich.

  9. Wählen Sie Zu Ressource wechseln, um Ihre neue Funktionen-App anzuzeigen. Sie können auch die Option An Dashboard anheften auswählen. Wenn Sie die Funktions-App anheften, können Sie einfacher über das Dashboard auf sie zugreifen.

Erstellen einer Hybridverbindung für die Funktions-App

Hybridverbindungen werden im Abschnitt „Netzwerk“ der Funktions-App konfiguriert:

  1. Wählen Sie unter Einstellungen in der soeben erstellten Funktions-App Netzwerk aus.

  2. Wählen Sie die Endpunkte der Hybridverbindung konfigurieren aus.

    Konfigurieren der Endpunkte der Hybridverbindung

  3. Wählen Sie Hybridverbindung hinzufügen aus.

    Hinzufügen einer Hybridverbindung.

  4. Geben Sie Informationen zu der Hybridverbindung ein, wie nach dem Screenshot angegeben. Verwenden Sie für Endpunkthost den Hostnamen des lokalen Servers, für den Sie das selbstsignierte Zertifikat erstellt haben. Es treten Verbindungsprobleme auf, wenn der Zertifikatname und der Hostname des lokalen Servers nicht übereinstimmen. Der Port stimmt mit dem Standardport für den Windows-Remoteverwaltungsdienst überein, der zuvor auf dem Server definiert wurde.

    Hinzufügen einer Hybridverbindung.

    Einstellung Vorgeschlagener Wert
    Hybridverbindungsname ContosoHybridOnPremisesServer
    Endpoint-Host finance1
    Endpunktport 5986
    Servicebus-Namespace Neu erstellen
    Location Wählen Sie einen verfügbaren Standort aus.
    Name contosopowershellhybrid
  5. Wählen Sie OK aus, um die Hybridverbindung zu erstellen.

Herunterladen und Installieren der Hybridverbindung

  1. Wählen Sie Download connection manager aus, um die Datei .msi lokal auf Ihrem Computer zu speichern.

    Herunterladen des Installationsprogramms.

  2. Kopieren Sie die MSI-Datei von Ihrem lokalen Computer auf den lokalen Server.

  3. Führen Sie das Installationsprogramm für hybride Connection Manager aus, um den Dienst auf dem lokalen Server zu installieren.

    Installieren der Hybridverbindung.

  4. Öffnen Sie im Portal die Hybridverbindung und kopieren Sie dann die Gateway-Verbindungszeichenfolge in die Zwischenablage.

    Kopieren Sie die hybride Verbindungszeichenfolge.

  5. Öffnen Sie die Benutzeroberfläche des Hybrid Connection Manager auf dem lokalen Server.

    Öffnen der Benutzeroberfläche der Hybridverbindung.

  6. Wählen Sie Manuell eingeben aus, und fügen Sie die Verbindungszeichenfolge aus der Zwischenablage ein.

    Einfügen der Hybridverbindung.

  7. Starten Sie die Hybrid-Connection Manager über PowerShell neu, wenn sie nicht als verbunden angezeigt wird.

    Restart-Service HybridConnectionManager
    

Erstellen einer App-Einstellung für das Kennwort eines Administratorkontos

  1. Wählen Sie unter Einstellungen für ihre Funktions-App Konfiguration aus.

  2. Wählen Sie + Neue Anwendungseinstellung aus.

    Konfigurieren eines Kennworts für das Administratorkonto.

  3. Geben Sie der Einstellung den Namen ContosoUserPassword, und geben Sie das Kennwort ein. Klicken Sie auf OK.

  4. Wählen Sie Speichern aus, um das Kennwort in der Funktionsanwendung zu speichern.

Erstellen eines HTTP-Funktionstriggers

  1. Wählen Sie in Ihrer Funktions-App Funktionen und dann + Hinzufügen aus.

    Erstellen eines neuen HTTP-Triggers.

  2. Wählen Sie die Vorlage HTTP-Trigger aus, benennen Sie die neue Funktion, und wählen Sie Funktion erstellen aus.

    Benennen und Erstellen der neuen HTTP-Triggerfunktion.

Testen der Funktion

  1. Wählen Sie in der neuen Funktion Programmieren und testen aus. Ersetzen Sie den PowerShell-Code aus der Vorlage durch den folgenden Code:

    # 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. Wählen Sie Speichern aus, um Ihre Änderungen zu speichern, und wählen Sie dann Testen>Ausführen aus, um die Funktion zu testen.

  3. Wählen Sie Protokolle aus, um in den Protokollen zu überprüfen, ob der Test erfolgreich war.

Lokale Verwaltung anderer Systeme

Sie können den verbundenen lokalen Server verwenden, um eine Verbindung mit anderen Servern und Verwaltungssystemen in der lokalen Umgebung herzustellen. Auf diese Weise können Sie Ihre Rechenzentrumsvorgänge über Azure mithilfe Ihrer PowerShell-Funktionen verwalten. Mit dem folgenden Skript wird eine PowerShell-Konfigurationssitzung registriert, die unter den angegebenen Anmeldeinformationen ausgeführt wird. Es muss sich um die Anmeldeinformationen eines Administrators auf den Remoteservern handeln. Anschließend können Sie diese Konfiguration verwenden, um andere Endpunkte auf dem lokalen Server oder Rechenzentrum zu access.

# 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

Ersetzen Sie die folgenden Variablen in diesem Skript durch die entsprechenden Werte in Ihrer Umgebung:

  • $HybridEndpoint
  • $RemoteServer

In den beiden vorherigen Szenarien können Sie mithilfe von PowerShell in Azure Functions- und Hybridverbindungen Ihre lokalen Umgebungen verbinden und verwalten. Weitere Informationen finden Sie unter Hybrid Connections und PowerShell in Functions.

Sie können auch Azure virtual networks verwenden, um über Azure Functions eine Verbindung mit Ihrer lokalen Umgebung herzustellen.

Nächste Schritte