Condividi tramite


Gestione di ambienti ibridi con PowerShell in Funzioni di Azure e connessioni ibride servizio app

La funzionalità Servizio app di Azure connessioni ibride consente l'accesso alle risorse in altre reti. Per altre informazioni su questa funzionalità, vedere la documentazione sulle connessioni ibride . Questo articolo descrive come usare questa funzionalità per eseguire funzioni di PowerShell destinate a un server locale. Questo server può quindi essere usato per gestire tutte le risorse nell'ambiente locale da una funzione di Azure PowerShell.

Configurare un server locale per la comunicazione remota di PowerShell

Lo script seguente abilita la comunicazione remota di PowerShell e crea una nuova regola del firewall e un listener Https WinRM. A scopo di test, viene usato un certificato autofirmato. In un ambiente di produzione è consigliabile usare un certificato firmato.

# 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

Creare un'app per le funzioni di PowerShell nel portale

La funzionalità connessioni ibride servizio app è disponibile solo nei piani tariffari Basic, Standard e Isolato. Quando si crea l'app per le funzioni con PowerShell, creare o selezionare uno di questi piani.

  1. Nel menu del portale di Azure o dalla pagina Home selezionare Crea una risorsa.

  2. Nella pagina Nuovo, selezionare Calcolo>App per le funzioni.

  3. Nella pagina Informazioni di base usare le impostazioni dell'app per le funzioni specificate nella tabella seguente.

    Impostazione Valore consigliato Descrizione
    Sottoscrizione Sottoscrizione in uso Sottoscrizione in cui viene creata questa nuova app per le funzioni.
    Gruppo di risorse myResourceGroup Nome del nuovo gruppo di risorse in cui creare l'app per le funzioni.
    Nome dell'app per le funzioni Nome univoco a livello globale Nome che identifica la nuova app per le funzioni. I caratteri validi sono a-z (senza distinzione tra maiuscole e minuscole), 0-9 e -.
    Pubblica Codice Opzione per la pubblicazione di file di codice o di un contenitore Docker.
    Stack di runtime Lingua preferita Scegliere PowerShell Core.
    Versione Numero di versione Scegliere la versione del runtime installato.
    Area Area preferita Scegliere un'area nelle vicinanze o vicino ad altri servizi a cui accedono le funzioni.

    Creare un'app per le funzioni - Nozioni di base.

  4. Selezionare Avanti: Hosting. Nella pagina Hosting immettere le impostazioni seguenti.

    Impostazione Valore consigliato Descrizione
    Account di archiviazione Nome globalmente univoco Creare un account di archiviazione usato dall'app per le funzioni. I nomi degli account di archiviazione devono avere una lunghezza compresa tra 3 e 24 caratteri e possono contenere solo numeri e lettere minuscole. È anche possibile usare un account esistente, che deve soddisfare i requisiti dell'account di archiviazione.
    Sistema operativo Sistema operativo preferito Viene preselezionato automaticamente un sistema operativo in base alla selezione dello stack di runtime, ma, se necessario, è possibile modificare l'impostazione.
    Tipo di piano Piano di servizio app Scegliere Piano di servizio app. In caso di esecuzione in un piano di servizio app, è necessario gestire il ridimensionamento dell'app per le funzioni.

    Creare un'app per le funzioni - Hosting.

  5. Selezionare Avanti: Monitoraggio. Nella pagina Monitoraggio immettere le impostazioni seguenti.

    Impostazione Valore consigliato Descrizione
    Application Insights Predefinito Crea una risorsa di Application Insights con lo stesso nome di app nell'area più vicina supportata. Espandendo questa impostazione o selezionando Crea nuovo, è possibile cambiare il nome Application Insights oppure scegliere una regione diversa in un'area geografica di Azure in cui archiviare i dati.

    Creare un'app per le funzioni - Monitoraggio.

  6. Selezionare Rivedi e crea per rivedere le selezioni effettuate per la configurazione dell'app.

  7. Nella pagina Rivedi e crea esaminare le impostazioni e quindi selezionare Crea per effettuare il provisioning e distribuire l'app per le funzioni.

  8. Selezionare l'icona Notifiche nell'angolo superiore destro del portale e attendere che venga visualizzato il messaggio La distribuzione è riuscita.

  9. Selezionare Vai alla risorsa per visualizzare la nuova app per le funzioni. È anche possibile selezionare Aggiungi al dashboard. In questo modo è più facile tornare in questa risorsa di app per le funzioni dal dashboard.

Creare una connessione ibrida per l'app per le funzioni

Le connessioni ibride vengono configurate dalla sezione di rete dell'app per le funzioni:

  1. In Impostazioni nell'app per le funzioni appena creata selezionare Rete.

  2. Selezionare Configura gli endpoint delle connessioni ibride.

    Configurare gli endpoint di connessione ibrida.

  3. Selezionare Aggiungi connessione ibrida.

    Aggiungere una connessione ibrida.

  4. Immettere informazioni sulla connessione ibrida, come illustrato dopo lo screenshot seguente. Per Endpoint Host usare il nome host del server locale per cui è stato creato il certificato autofirmato. Si avranno problemi di connessione quando il nome del certificato e il nome host del server locale non corrispondono. La porta corrisponde alla porta predefinita del servizio di gestione remota Windows definita nel server in precedenza.

    Aggiungere una connessione ibrida.

    Impostazione Valore consigliato
    Nome connessione ibrida ContosoHybridOnPremisesServer
    Endpoint Host finance1
    Porta endpoint 5986
    Spazio dei nomi del bus di servizio Creazione di un nuovo sito
    Posizione Selezionare una posizione disponibile
    Nome contosopowershellhybrid
  5. Selezionare OK per creare la connessione ibrida.

Scaricare e installare la connessione ibrida

  1. Selezionare Scarica gestione connessione per salvare il file .msi localmente nel computer.

    Scaricare il programma di installazione.

  2. Copiare il file .msi dal computer locale al server locale.

  3. Eseguire il programma di installazione di Gestione connessione ibrida per installare il servizio nel server locale.

    Installare la connessione ibrida.

  4. Dal portale aprire la connessione ibrida e quindi copiare la stringa di connessione gateway negli Appunti.

    Copiare la stringa di connessione ibrida.

  5. Aprire l'interfaccia utente Gestione connessione ibrida nel server locale.

    Aprire l'interfaccia utente della connessione ibrida.

  6. Selezionare Invio manualmente e incollare la stringa di connessione dagli Appunti.

    Incollare la connessione ibrida.

  7. Riavviare la Gestione connessione ibrida da PowerShell se non viene visualizzata come connessa.

    Restart-Service HybridConnectionManager
    

Creare un'impostazione dell'app per la password di un account amministratore

  1. In Impostazioni per l'app per le funzioni selezionare Configurazione.

  2. Selezionare + Nuova impostazione dell'applicazione.

    Configurare una password per l'account amministratore.

  3. Assegnare un nome all'impostazione ContosoUserPassword e immettere la password. Selezionare OK.

  4. Selezionare Salva per archiviare la password nell'applicazione per le funzioni.

    Salvare la password per l'account amministratore.

Creare un trigger HTTP per le funzioni

  1. Nell'app per le funzioni selezionare Funzioni e quindi + Aggiungi.

    Creare un nuovo trigger HTTP.

  2. Selezionare il modello di trigger HTTP .

    Selezionare il modello di trigger HTTP.

  3. Assegnare un nome alla nuova funzione e selezionare Crea funzione.

    Nome e creazione della nuova funzione trigger HTTP.

Testare la funzione

  1. Nella nuova funzione selezionare Code + Test. Sostituire il codice di PowerShell dal modello con il codice seguente:

    # 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. Selezionare Salva.

    Modificare il codice di PowerShell e salvare la funzione trigger HTTP.

  3. Selezionare Test e quindi Esegui per testare la funzione. Esaminare i log per verificare che il test sia stato completato.

    Testare la funzione trigger HTTP.

Gestione di altri sistemi locali

È possibile usare il server locale connesso per connettersi ad altri server e sistemi di gestione nell'ambiente locale. In questo modo è possibile gestire le operazioni del data center da Azure usando le funzioni di PowerShell. Lo script seguente registra una sessione di configurazione di PowerShell eseguita con le credenziali specificate. Queste credenziali devono essere per un amministratore nei server remoti. È quindi possibile usare questa configurazione per accedere ad altri endpoint nel server locale o nel data center.

# 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

Sostituire le variabili seguenti in questo script con i valori applicabili dall'ambiente:

  • $HybridEndpoint
  • $RemoteServer

Nei due scenari precedenti è possibile connettersi e gestire gli ambienti locali usando PowerShell in Funzioni di Azure e connessioni ibride. È consigliabile ottenere altre informazioni su Connessioni ibride e PowerShell nelle funzioni.

È anche possibile usare reti virtuali di Azure per connettersi all'ambiente locale tramite Funzioni di Azure.

Passaggi successivi