Gestion des environnements hybrides avec PowerShell dans Azure Functions et Connections hybrides App Service

La fonctionnalité Connexions hybrides d'Azure App Service permet d'accéder aux ressources d'autres réseaux. Pour en savoir plus sur cette fonctionnalité, consultez la documentation Connexions hybrides. Cet article décrit l'utilisation de cette fonctionnalité qui permet d'exécuter des fonctions PowerShell ciblant un serveur local. Ce serveur peut ensuite être utilisé pour gérer toutes les ressources de l'environnement local à partir d'une fonction Azure PowerShell.

Configurer un serveur local pour la communication à distance PowerShell

Le script suivant active la communication à distance PowerShell, et crée une règle de pare-feu et un écouteur https WinRM. À des fins de test, un certificat auto-signé est utilisé. Dans un environnement de production, nous vous recommandons d'utiliser un certificat signé.

# 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

Créer une application de fonction PowerShell dans le portail

La fonctionnalité Connexions hybrides d'App Service est uniquement disponible avec les plans tarifaires De base, Standard et Isolé. Lors de la création de l'application de fonction avec PowerShell, créez ou sélectionnez l'un de ces plans.

  1. Dans le menu du portail Azure ou dans la page Accueil, sélectionnez Créer une ressource.

  2. Dans la page Nouveau, sélectionnez Calcul>Application de fonction.

  3. Dans la page De base, utilisez les paramètres d’application de fonction comme indiqué dans le tableau ci-dessous.

    Paramètre Valeur suggérée Description
    Abonnement Votre abonnement Abonnement sous lequel est créée cette nouvelle application de fonction.
    Groupe de ressources myResourceGroup Nom du nouveau groupe de ressources dans lequel créer votre Function App.
    Nom de l’application de fonction Nom globalement unique Nom qui identifie votre nouvelle Function App. Les caractères valides sont a-z (insensible à la casse), 0-9et -.
    Publier Code Option de publication de fichiers de code ou d'un conteneur Docker.
    Pile d’exécution Langage préféré Choisissez PowerShell Core.
    Version Numéro de version Choisissez la version de votre runtime installé.
    Région Région recommandée Choisissez une région près de chez vous ou près d’autres services auxquels ont accès vos fonctions.

    Create a function app - Basics.

  4. Sélectionnez Suivant : Hébergement. Dans la page Hébergement, entrez les paramètres suivants.

    Paramètre Valeur suggérée Description
    Compte de stockage Nom globalement unique Créez un compte de stockage utilisé par votre application de fonction. Les noms des comptes de stockage doivent comporter entre 3 et 24 caractères, uniquement des lettres minuscules et des chiffres. Vous pouvez également utiliser un compte existant qui doit répondre aux exigences relatives aux comptes de stockage.
    Système d’exploitation Système d’exploitation préféré Un système d’exploitation est présélectionné pour vous en fonction de la sélection de votre pile d’exécution, mais vous pouvez modifier le paramètre si nécessaire.
    Type de plan Plan App service Sélectionnez App Service plan (Plan App Service). Si vous exécutez dans un plan App Service, vous devez gérer la mise à l’échelle de votre application de fonction.

    Create a function app - Hosting.

  5. Sélectionnez Suivant : Supervision. Dans la page Supervision, entrez les paramètres suivants.

    Paramètre Valeur suggérée Description
    Application Insights Default Crée une ressource Application Insights avec le même nom de l’application dans la région prise en charge la plus proche. En développant ce paramètre ou en sélectionnant Créer nouveau, vous pouvez modifier le nom Application Insights ou choisir une autre région dans une zone géographique Azure où vous souhaitez stocker vos données.

    Create a function app - Monitoring.

  6. Sélectionnez Vérifier + créer pour passer en revue les sélections de configuration d’application.

  7. Dans la page Vérifier + créer, vérifiez vos paramètres, puis sélectionnez Créer pour provisionner et déployer l’application de fonction.

  8. Cliquez sur l’icône Notifications en haut à droite du portail pour voir le message Le déploiement a été effectué.

  9. Sélectionnez Accéder à la ressource pour afficher votre nouvelle application de fonction. Vous pouvez également sélectionner Épingler au tableau de bord. L’épinglage permet de revenir plus facilement à cette ressource d’application de fonction à partir de votre tableau de bord.

Créer une connexion hybride pour l’application de fonction

Les connexions hybrides sont configurées à partir de la section de mise en réseau de l'application de fonction :

  1. Sous Settings (Paramètres) dans l’application de fonction que vous venez de créer, sélectionnez Networking (Réseau).

  2. Sélectionnez Configurer vos points de terminaison de connexion hybride.

    Configure the hybrid connection endpoints.

  3. Sélectionnez Ajouter une connexion hybride.

    Add a hybrid connection.

  4. Entrez les informations relatives à la connexion hybride, comme indiqué après la capture d'écran suivante. Pour Hôte de point de terminaison, utilisez le nom d’hôte du serveur local pour lequel vous avez créé le certificat auto-signé. Vous rencontrez des problèmes de connexion lorsque le nom du certificat et le nom d’hôte du serveur local ne correspondent pas. Le port correspond au port par défaut du service de gestion à distance Windows qui a précédemment été défini sur le serveur.

    Add hybrid connection.

    Paramètre Valeur suggérée
    Nom de la connexion hybride ContosoHybridOnPremisesServer
    Hôte du point de terminaison finance1
    Port du point de terminaison 5986
    Espace de noms Service Bus Création
    Lieu Sélectionnez un emplacement disponible.
    Nom contosopowershellhybrid
  5. Sélectionnez OK pour créer la connexion hybride.

Télécharger et installer la connexion hybride

  1. Sélectionnez Télécharger le gestionnaire de connexions pour enregistrer le fichier .msi localement sur votre ordinateur.

    Download the installer.

  2. Copiez le fichier .msi de votre ordinateur local vers le serveur local.

  3. Exécutez le programme d'installation d'Hybrid Connection Manager pour installer le service sur le serveur local.

    Install the hybrid connection.

  4. À partir du portail, ouvrez la connexion hybride, puis copiez la chaîne de connexion de la passerelle dans le Presse-papiers.

    Copy the hybrid connection string.

  5. Ouvrez l’interface utilisateur de Hybrid Connection Manager sur le serveur local.

    Open the Hybrid Connection UI.

  6. Sélectionnez Entrer manuellement et collez la chaîne de connexion à partir du Presse-papiers.

    Paste the hybrid connection.

  7. Redémarrez Hybrid Connection Manager à partir de PowerShell s'il ne s'affiche pas comme connecté.

    Restart-Service HybridConnectionManager
    

Créer un paramètre d’application pour le mot de passe d’un compte d’administrateur

  1. Sous Settings (Paramètres) dans votre application de fonction, sélectionnez Configuration.

  2. Sélectionnez + New application setting (+ Nouveau paramètre d’application).

    Configure a password for the administrator account.

  3. Nommez le paramètre ContosoUserPassword et entrez le mot de passe. Sélectionnez OK.

  4. Sélectionnez Enregistrer pour stocker le mot de passe dans l'application de fonction.

    Save the password for the administrator account.

Créer un déclencheur HTTP de fonction

  1. Dans votre application de fonction, sélectionnez Functions (Fonctions), puis + Add (+ Ajouter).

    Create new HTTP trigger.

  2. Sélectionnez le modèle Déclencheur HTTP .

    Select the HTTP trigger template.

  3. Nommez la nouvelle fonction, puis sélectionnez Fonction.

    Name and create the new HTTP trigger function.

Tester la fonction

  1. Dans la nouvelle fonction, sélectionnez Code + Test (Coder et tester). Remplacez le code PowerShell du modèle par le code suivant :

    # 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. Sélectionnez Enregistrer.

    Change the PowerShell code and save the HTTP trigger function.

  3. Sélectionnez Test, puis Run (Exécuter) pour tester la fonction. Examinez les journaux pour vérifier que le test a réussi.

    Test HTTP trigger function.

Gestion d’autres systèmes en local

Vous pouvez utiliser le serveur local connecté pour vous connecter à d’autres serveurs et systèmes de gestion dans l’environnement local. Cela vous permet de gérer vos opérations de centre de données à partir d'Azure en utilisant vos fonctions PowerShell. Le script suivant inscrit une session de configuration PowerShell qui s'exécute sous les informations d'identification fournies. Ces informations d'identification doivent être destinées à un administrateur sur les serveurs distants. Vous pouvez ensuite utiliser cette configuration pour accéder à d'autres points de terminaison du serveur local ou du centre de données.

# 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

Remplacez les variables suivantes de ce script par les valeurs applicables de votre environnement :

  • $HybridEndpoint
  • $RemoteServer

Dans les deux scénarios précédents, vous pouvez vous connecter à vos environnements locaux et les gérer à l'aide de PowerShell dans Azure Functions et Connexions hybrides. Nous vous encourageons à en apprendre plus sur les Connexions hybrides et PowerShell dans les fonctions.

Vous pouvez également utiliser les réseaux virtuels Azure pour vous connecter à votre environnement local via Azure Functions.

Étapes suivantes