Freigeben über


Verwalten von Hybridumgebungen mit PowerShell in Azure Functions und App Service Hybrid Connections

Die Funktion Azure App Service Hybrid Connections 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 über eine 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 Hybrid Connections ist nur in den Tarifen Basic, Standard und Isolated 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ü des Azure-Portals oder auf der Startseite die Option Ressource erstellen aus.

  2. Wählen Sie auf der Seite Neu die Option Compute>Funktions-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.
    Ressourcengruppe myResourceGroup Der Name der neuen Ressourcengruppe, in der die Funktionen-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.
    Laufzeitstapel 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 von anderen Diensten 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 Speicherkonto, das von Ihrer Funktions-App verwendet wird. Speicherkontonamen 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. Durch Erweitern dieser Einstellung oder Auswählen von Neu erstellen können Sie den Application Insights-Namen ändern oder eine andere Region in einer Azure-Geografie auswählen, in der Sie Ihre Daten speichern möchten.

    Erstellen einer Funktions-App: Überwachung.

  6. Wählen Sie Bewerten + erstellen aus, um die App-Konfigurationsauswahl 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 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
    Endpunkthost finance1
    Endpunktport 5986
    Service Bus-Namespace Create New
    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 Verbindungs-Manager herunterladen aus, um die MSI-Datei 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 den Installer des Hybridverbindungs-Managers aus, um den Dienst auf dem lokalen Server zu installieren.

    Installieren der Hybridverbindung.

  4. Öffnen Sie im Portal die Hybridverbindung, und kopieren Sie die Gatewayverbindungszeichenfolge in die Zwischenablage.

    Kopieren der Hybridverbindungszeichenfolge.

  5. Öffnen Sie die Benutzeroberfläche des Hybrid Connection-Managers 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. Wenn der Hybridverbindungs-Manager nicht als verbunden angezeigt wird, starten Sie ihn mit PowerShell neu.

    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 in Azure mithilfe von PowerShell-Funktionen verwalten. Mit dem folgenden Skript wird eine PowerShell-Konfigurationssitzung registriert, die unter den angegebenen Anmeldeinformationen ausgeführt wird. Dabei muss es sich um die Anmeldeinformationen eines Administrators für die Remoteserver handeln. Anschließend können Sie diese Konfiguration verwenden, um auf andere Endpunkte auf dem lokalen Server oder im Rechenzentrum zuzugreifen.

# 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 Hybrid Connections eine Verbindung mit lokalen Umgebungen herstellen und diese verwalten. Weitere Informationen finden Sie unter Hybrid Connections und PowerShell in Functions.

Sie können auch virtuelle Netzwerke in Azure verwenden, um über Azure Functions eine Verbindung mit der lokalen Umgebung herzustellen.

Nächste Schritte