Zarządzanie środowiskami hybrydowymi przy użyciu programu PowerShell w Azure Functions i połączeniach hybrydowych App Service

Funkcja połączeń hybrydowych Azure App Service umożliwia dostęp do zasobów w innych sieciach. Więcej informacji na temat tej funkcji można uzyskać w dokumentacji połączeń hybrydowych . W tym artykule opisano sposób używania tej funkcji do uruchamiania funkcji programu PowerShell przeznaczonych dla serwera lokalnego. Ten serwer może następnie służyć do zarządzania wszystkimi zasobami w środowisku lokalnym z funkcji Azure PowerShell.

Konfigurowanie serwera lokalnego na potrzeby komunikacji zdalnej programu PowerShell

Poniższy skrypt umożliwia komunikacja zdalną programu PowerShell i tworzy nową regułę zapory i odbiornik https usługi WinRM. Do celów testowych używany jest certyfikat z podpisem własnym. W środowisku produkcyjnym zalecamy użycie podpisanego certyfikatu.

# 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

Tworzenie aplikacji funkcji programu PowerShell w portalu

Funkcja połączeń hybrydowych App Service jest dostępna tylko w planach cenowych w warstwie Podstawowa, Standardowa i Izolowana. Podczas tworzenia aplikacji funkcji przy użyciu programu PowerShell utwórz lub wybierz jeden z tych planów.

  1. W menu witryny Azure Portal lub na stronie głównej wybierz pozycję Utwórz zasób.

  2. Na stronie Nowy wybierz pozycjęAplikacja funkcjiobliczeniowej>.

  3. Na stronie Podstawy użyj ustawień aplikacji funkcji, jak określono w poniższej tabeli.

    Ustawienie Sugerowana wartość Opis
    Subskrypcja Twoja subskrypcja Subskrypcja, w ramach której jest tworzona ta nowa aplikacja funkcji.
    Grupa zasobów myResourceGroup Nazwa nowej grupy zasobów, w której ma zostać utworzona aplikacja funkcji.
    Nazwa aplikacji funkcji Nazwa unikatowa w skali globalnej Nazwa identyfikująca nową aplikację funkcji. Prawidłowe znaki to a-z (bez uwzględniania wielkości liter), 0-9i -.
    Publikowanie Kod Opcja publikowania plików kodu lub kontenera Docker.
    Stos środowiska uruchomieniowego Preferowany język Wybierz pozycję PowerShell Core.
    Wersja Numer wersji Wybierz wersję zainstalowanego środowiska uruchomieniowego.
    Region Preferowany region Wybierz region w pobliżu Ciebie lub w pobliżu innych usług, do których uzyskujesz dostęp do funkcji.

    Tworzenie aplikacji funkcji — podstawy.

  4. Wybierz pozycję Dalej: Hosting. Na stronie Hosting wprowadź następujące ustawienia.

    Ustawienie Sugerowana wartość Opis
    Konto magazynu Nazwa unikatowa w skali globalnej Utwórz konto magazynu używane przez aplikację funkcji. Nazwy kont magazynu muszą mieć długość od 3 do 24 znaków i mogą zawierać tylko cyfry i małe litery. Możesz również użyć istniejącego konta, które musi spełniać wymagania dotyczące konta magazynu.
    System operacyjny Preferowany system operacyjny System operacyjny jest wstępnie wybrany na podstawie wyboru stosu środowiska uruchomieniowego, ale w razie potrzeby można zmienić ustawienie.
    Typ planu Plan usługi App Service Wybierz pozycję Plan usługi App Service. W przypadku uruchomienia w ramach planu usługi App Service musisz zarządzać skalowaniem aplikacji funkcji.

    Tworzenie aplikacji funkcji — hosting.

  5. Wybierz pozycję Dalej: Monitorowanie. Na stronie Monitorowanie wprowadź następujące ustawienia.

    Ustawienie Sugerowana wartość Opis
    Application Insights Domyślny Tworzy zasób usługi Application Insights o tej samej nazwie aplikacji w najbliższym obsługiwanym regionie. Rozwijając to ustawienie lub wybierając pozycję Utwórz nową, możesz zmienić nazwę usługi Application Insights lub wybrać inny region w lokalizacji geograficznej platformy Azure , w której chcesz przechowywać dane.

    Tworzenie aplikacji funkcji — monitorowanie.

  6. Wybierz pozycję Przejrzyj i utwórz , aby przejrzeć wybrane opcje konfiguracji aplikacji.

  7. Na stronie Przeglądanie i tworzenie przejrzyj ustawienia, a następnie wybierz pozycję Utwórz , aby aprowizować i wdrożyć aplikację funkcji.

  8. Wybierz ikonę Powiadomienia w prawym górnym rogu portalu i poszukaj komunikatu Wdrożenie zakończyło się pomyślnie .

  9. Wybierz pozycję Przejdź do zasobu, aby wyświetlić nową aplikację funkcji. Możesz również wybrać pozycję Przypnij do pulpitu nawigacyjnego. Przypinanie ułatwia powrót do tego zasobu aplikacji funkcji z pulpitu nawigacyjnego.

Tworzenie połączenia hybrydowego dla aplikacji funkcji

Połączenia hybrydowe są konfigurowane w sekcji sieci aplikacji funkcji:

  1. W obszarze Ustawienia w utworzonej aplikacji funkcji wybierz pozycję Sieć.

  2. Wybierz pozycję Konfiguruj punkty końcowe połączeń hybrydowych.

    Skonfiguruj punkty końcowe połączenia hybrydowego.

  3. Wybierz pozycję Dodaj połączenie hybrydowe.

    Dodaj połączenie hybrydowe.

  4. Wprowadź informacje o połączeniu hybrydowym, jak pokazano na poniższym zrzucie ekranu. W polu Host punktu końcowego użyj nazwy hosta serwera lokalnego, dla którego utworzono certyfikat z podpisem własnym. Występują problemy z połączeniem, gdy nazwa certyfikatu i nazwa hosta serwera lokalnego nie są zgodne. Port jest zgodny z domyślnym portem usługi zdalnego zarządzania systemu Windows zdefiniowanym wcześniej na serwerze.

    Dodaj połączenie hybrydowe.

    Ustawienie Sugerowana wartość
    Nazwa połączenia hybrydowego ContosoHybridOnPremisesServer
    Host punktu końcowego finance1
    Port punktu końcowego 5986
    Przestrzeń nazw usługi Servicebus Kliknięcie przycisku Nowe
    Lokalizacja Wybierz dostępną lokalizację
    Nazwa contosopowershellhybrid
  5. Wybierz przycisk OK , aby utworzyć połączenie hybrydowe.

Pobieranie i instalowanie połączenia hybrydowego

  1. Wybierz pozycję Pobierz menedżera połączeń , aby zapisać plik .msi lokalnie na komputerze.

    Pobierz instalatora.

  2. Skopiuj plik .msi z komputera lokalnego do serwera lokalnego.

  3. Uruchom instalatora Menedżer połączeń hybrydowych, aby zainstalować usługę na serwerze lokalnym.

    Zainstaluj połączenie hybrydowe.

  4. W portalu otwórz połączenie hybrydowe, a następnie skopiuj parametry połączenia bramy do schowka.

    Skopiuj parametry połączenia hybrydowego.

  5. Otwórz interfejs użytkownika Menedżer połączeń hybrydowych na serwerze lokalnym.

    Otwórz interfejs użytkownika połączenia hybrydowego.

  6. Wybierz pozycję Wprowadź ręcznie i wklej parametry połączenia ze schowka.

    Wklej połączenie hybrydowe.

  7. Uruchom ponownie Menedżer połączeń hybrydowych z programu PowerShell, jeśli nie jest on wyświetlany jako połączony.

    Restart-Service HybridConnectionManager
    

Tworzenie ustawienia aplikacji dla hasła konta administratora

  1. W obszarze Ustawienia aplikacji funkcji wybierz pozycję Konfiguracja.

  2. Wybierz pozycję + Nowe ustawienie aplikacji.

    Skonfiguruj hasło dla konta administratora.

  3. Nazwij ustawienie ContosoUserPassword i wprowadź hasło. Wybierz przycisk OK.

  4. Wybierz pozycję Zapisz , aby zapisać hasło w aplikacji funkcji.

    Zapisz hasło dla konta administratora.

Tworzenie wyzwalacza HTTP funkcji

  1. W aplikacji funkcji wybierz pozycję Funkcje, a następnie wybierz pozycję + Dodaj.

    Utwórz nowy wyzwalacz HTTP.

  2. Wybierz szablon wyzwalacza HTTP .

    Wybierz szablon wyzwalacza HTTP.

  3. Nadaj nowej funkcji nazwę i wybierz pozycję Utwórz funkcję.

    Nadaj nazwę i utwórz nową funkcję wyzwalacza HTTP.

Testowanie funkcji

  1. W nowej funkcji wybierz pozycję Kod i test. Zastąp kod programu PowerShell z szablonu następującym kodem:

    # 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. Wybierz pozycję Zapisz.

    Zmień kod programu PowerShell i zapisz funkcję wyzwalacza HTTP.

  3. Wybierz pozycję Testuj, a następnie wybierz pozycję Uruchom , aby przetestować funkcję. Przejrzyj dzienniki, aby sprawdzić, czy test zakończył się pomyślnie.

    Testowanie funkcji wyzwalacza HTTP.

Zarządzanie innymi systemami lokalnymi

Za pomocą połączonego serwera lokalnego można nawiązać połączenie z innymi serwerami i systemami zarządzania w środowisku lokalnym. Umożliwia to zarządzanie operacjami centrum danych z platformy Azure przy użyciu funkcji programu PowerShell. Poniższy skrypt rejestruje sesję konfiguracji programu PowerShell uruchamianą w ramach podanych poświadczeń. Te poświadczenia muszą być przeznaczone dla administratora na serwerach zdalnych. Następnie możesz użyć tej konfiguracji, aby uzyskać dostęp do innych punktów końcowych na serwerze lokalnym lub w centrum danych.

# 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

Zastąp następujące zmienne w tym skrypcie odpowiednimi wartościami ze środowiska:

  • $HybridEndpoint
  • $RemoteServer

W dwóch poprzednich scenariuszach możesz łączyć środowiska lokalne i zarządzać nimi przy użyciu programu PowerShell w Azure Functions i połączeniach hybrydowych. Zachęcamy do zapoznania się z informacjami na temat połączeń hybrydowych i programu PowerShell w funkcjach.

Możesz również użyć sieci wirtualnych platformy Azure do nawiązania połączenia ze środowiskiem lokalnym za pośrednictwem Azure Functions.

Następne kroki