Delen via


Hybride omgevingen beheren met PowerShell in Azure Functions en hybride verbindingen App Service

De functie Azure App Service hybride verbindingen biedt toegang tot resources in andere netwerken. Meer informatie over deze mogelijkheid vindt u in de documentatie voor hybride verbindingen . In dit artikel wordt beschreven hoe u deze mogelijkheid gebruikt om PowerShell-functies uit te voeren die zijn gericht op een on-premises server. Deze server kan vervolgens worden gebruikt om alle resources in de on-premises omgeving te beheren vanuit een Azure PowerShell-functie.

Een on-premises server configureren voor externe communicatie met PowerShell

Met het volgende script wordt externe communicatie van PowerShell ingeschakeld en wordt een nieuwe firewallregel en een WinRM https-listener gemaakt. Voor testdoeleinden wordt een zelfondertekend certificaat gebruikt. In een productieomgeving raden we u aan een ondertekend certificaat te gebruiken.

# 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

Een PowerShell-functie-app maken in de portal

De functie App Service Hybride verbindingen is alleen beschikbaar in de prijsplannen Basic, Standard en Isolated. Wanneer u de functie-app maakt met PowerShell, maakt of selecteert u een van deze abonnementen.

  1. Selecteer vanuit het menu van Azure Portal of op de startpagina de optie Een resource maken.

  2. Selecteer op de pagina NieuwReken>functie-app.

  3. Op de pagina Basics gebruikt u de instellingen voor de functie-app zoals in de volgende tabel wordt vermeld.

    Instelling Voorgestelde waarde Beschrijving
    Abonnement Uw abonnement Het abonnement waarmee deze nieuwe functie-app is gemaakt.
    Resourcegroep myResourceGroup Naam voor de nieuwe resourcegroep waarin uw functie-app moet worden gemaakt.
    Naam van de functie-app Wereldwijd unieke naam Naam waarmee uw nieuwe functie-app wordt aangeduid. Geldige tekens zijn a-z (hoofdlettergevoelig), 0-9 en -.
    Publiceren Code Optie voor het publiceren van codebestanden of een Docker-container.
    Runtimestack Voorkeurstaal Kies PowerShell Core.
    Versie Versienummer Kies de versie van uw geïnstalleerde runtime.
    Regio Voorkeursregio Kies een regio in de buurt of in de buurt van andere services die door uw functie worden gebruikt.

    Een functie-app maken - Basisbeginselen.

  4. Selecteer Volgende : Hosting. Voer op de pagina Hosting de volgende instellingen in.

    Instelling Voorgestelde waarde Beschrijving
    Opslagaccount Wereldwijd unieke naam Maak een opslagaccount die wordt gebruikt door uw functie-app. Namen van opslagaccounts moeten tussen 3 en 24 tekens lang zijn en kunnen alleen cijfers en kleine letters bevatten. U kunt ook een bestaand account gebruiken dat voldoet aan de vereisten voor een opslagaccount.
    Besturingssysteem Voorkeurbesturingssysteem Er wordt vooraf een besturingssysteem geselecteerd voor u op basis van de selectie van de runtimestack, maar u kunt de instelling wijzigen, indien nodig.
    Plantype App Service-plan Kies App Service-plan. Wanneer u in een App Service-plan uitvoert, moet u het Schalen van uw functie-app beheren.

    Een functie-app maken - Hosting.

  5. Selecteer Volgende : Bewaking. Voer op de pagina Bewaking de volgende instellingen in.

    Instelling Voorgestelde waarde Beschrijving
    Application Insights Standaard Hiermee maakt u een Application Insights-resource van dezelfde app-naam in de dichtstbijzijnde ondersteunde regio. Door deze instelling uit te vouwen of Nieuwe maken te selecteren, kunt u de naam van Application Insights wijzigen of een andere regio kiezen in een Azure-geografie waar u uw gegevens wilt opslaan.

    Een functie-app maken - Bewaking.

  6. Selecteer Beoordelen + maken om de selecties van appconfiguratie te controleren.

  7. Controleer uw instellingen op de pagina Beoordelen en maken en selecteer vervolgens Maken om de functie-app in te richten en te implementeren.

  8. Selecteer het Meldingspictogram in de rechterbovenhoek van de portal en zoek het bericht Implementatie voltooid.

  9. Selecteer Naar de resource gaan om uw nieuwe functie-app te bekijken. U kunt ook Vastmaken aan dashboard selecteren. Vastmaken maakt het gemakkelijker om terug te gaan naar deze functie-app-resource vanuit uw dashboard.

Een hybride verbinding maken voor de functie-app

Hybride verbindingen worden geconfigureerd vanuit de netwerksectie van de functie-app:

  1. Selecteer onder Instellingen in de functie-app die u zojuist hebt gemaakt de optie Netwerken.

  2. Selecteer Eindpunten voor uw hybride verbindingen configureren.

    Configureer de eindpunten van de hybride verbinding.

  3. Selecteer Hybride verbinding toevoegen.

    Voeg een hybride verbinding toe.

  4. Voer informatie in over de hybride verbinding, zoals wordt weergegeven na de volgende schermafbeelding. Gebruik voor Endpoint Host de hostnaam van de on-premises server waarvoor u het zelfondertekende certificaat hebt gemaakt. Er zijn verbindingsproblemen wanneer de certificaatnaam en de hostnaam van de on-premises server niet overeenkomen. De poort komt overeen met de standaardpoort van de Windows-service voor extern beheer die eerder op de server is gedefinieerd.

    Hybride verbinding toevoegen.

    Instelling Voorgestelde waarde
    Naam van hybride verbinding ContosoHybridOnPremisesServer
    Eindpunthost financiën1
    Eindpuntpoort 5986
    Servicebus-naamruimte Create New
    Locatie Kies een beschikbare locatie
    Naam contosopowershellhybrid
  5. Selecteer OK om de hybride verbinding te maken.

De hybride verbinding downloaden en installeren

  1. Selecteer Verbindingsbeheer downloaden om het .msi-bestand lokaal op uw computer op te slaan.

    Download het installatieprogramma.

  2. Kopieer het .msi-bestand van uw lokale computer naar de on-premises server.

  3. Voer het Hybrid Connection Manager-installatieprogramma uit om de service op de on-premises server te installeren.

    Installeer de hybride verbinding.

  4. Open vanuit de portal de hybride verbinding en kopieer de gateway connection string naar het klembord.

    Kopieer de hybride connection string.

  5. Open de Hybrid Connection Manager ui op de on-premises server.

    Open de gebruikersinterface van de hybride verbinding.

  6. Selecteer Handmatig invoeren en plak de connection string vanaf het klembord.

    Plak de hybride verbinding.

  7. Start de Hybrid Connection Manager opnieuw vanuit PowerShell als deze niet wordt weergegeven als verbonden.

    Restart-Service HybridConnectionManager
    

Een app-instelling maken voor het wachtwoord van een beheerdersaccount

  1. Selecteer onder Instellingen voor uw functie-app de optie Configuratie.

  2. Selecteer + Nieuwe toepassingsinstelling.

    Configureer een wachtwoord voor het beheerdersaccount.

  3. Geef de instelling de naam ContosoUserPassword en voer het wachtwoord in. Selecteer OK.

  4. Selecteer Opslaan om het wachtwoord op te slaan in de functietoepassing.

    Sla het wachtwoord voor het beheerdersaccount op.

Een FUNCTIE-HTTP-trigger maken

  1. Selecteer functies in uw functie-app en selecteer vervolgens + Toevoegen.

    Maak een nieuwe HTTP-trigger.

  2. Selecteer de sjabloon HTTP-trigger .

    Selecteer de sjabloon HTTP-trigger.

  3. Geef de nieuwe functie een naam en selecteer Functie maken.

    Geef de nieuwe HTTP-triggerfunctie een naam en maak deze.

De functie testen

  1. Selecteer code en test in de nieuwe functie. Vervang de PowerShell-code uit de sjabloon door de volgende 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. Selecteer Opslaan.

    Wijzig de PowerShell-code en sla de HTTP-triggerfunctie op.

  3. Selecteer Testen en selecteer vervolgens Uitvoeren om de functie te testen. Bekijk de logboeken om te controleren of de test is geslaagd.

    Test de HTTP-triggerfunctie.

Andere systemen on-premises beheren

U kunt de verbonden on-premises server gebruiken om verbinding te maken met andere servers en beheersystemen in de lokale omgeving. Hiermee kunt u uw datacenterbewerkingen vanuit Azure beheren met behulp van uw PowerShell-functies. Met het volgende script wordt een PowerShell-configuratiesessie geregistreerd die wordt uitgevoerd onder de opgegeven referenties. Deze referenties moeten voor een beheerder op de externe servers zijn. U kunt deze configuratie vervolgens gebruiken voor toegang tot andere eindpunten op de lokale server of het lokale datacenter.

# 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

Vervang de volgende variabelen in dit script door de toepasselijke waarden uit uw omgeving:

  • $HybridEndpoint
  • $RemoteServer

In de twee voorgaande scenario's kunt u uw on-premises omgevingen verbinden en beheren met behulp van PowerShell in Azure Functions en hybride verbindingen. We raden u aan om meer te weten te komen over hybride verbindingen en PowerShell in functies.

U kunt ook virtuele Azure-netwerken gebruiken om verbinding te maken met uw on-premises omgeving via Azure Functions.

Volgende stappen