Administración de entornos híbridos con PowerShell en Azure Functions y conexiones híbridas de App Service
La característica Conexiones híbridas de Azure App Service permite el acceso a los recursos de otras redes. Para obtener más información sobre esta funcionalidad, consulte la documentación de Conexiones híbridas. En este artículo se describe cómo usar esta funcionalidad para ejecutar funciones de PowerShell dirigidas a un servidor local. Este servidor se puede usar luego para administrar todos los recursos dentro del entorno local con una función de Azure PowerShell.
Configuración de un servidor local para la comunicación remota de PowerShell
El siguiente script habilita la comunicación remota de PowerShell y crea una regla de firewall y un cliente de escucha https de WinRM. Con fines de prueba, se usa un certificado autofirmado. En un entorno de producción, se recomienda usar un certificado firmado.
# 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
Creación de una aplicación de función de PowerShell en el portal
La característica Conexiones híbridas de App Service solo está disponible en los planes de tarifa Básico, Estándar y Aislado. Al crear la aplicación de funciones con PowerShell, cree o seleccione uno de estos planes.
En el menú de Azure Portal o en la página Principal, seleccione Crear un recurso.
En la página Nuevo, seleccione Compute>Function App.
En la página Básico, utilice la configuración de la aplicación de funciones que se especifica en la tabla siguiente.
Configuración Valor sugerido Descripción Suscripción Su suscripción Suscripción en la que se creará esta nueva aplicación de función. Grupo de recursos myResourceGroup Nombre para el nuevo grupo de recursos en el que se va a crear la Function App. Nombre de la aplicación de función Nombre único globalmente Nombre que identifica la nueva Function App. Los caracteres válidos son a-z
(no distingue mayúsculas de minúsculas),0-9
y-
.Publicar Código Opción para publicar archivos de código o un contenedor Docker. Pila en tiempo de ejecución Lenguaje preferido Elija PowerShell Core. Versión Número de la versión Elija la versión del entorno de ejecución instalado. Región Región preferida Elija una región cerca de usted o cerca de otros servicios a los que tendrán acceso las funciones. Seleccione Siguiente: Hospedaje. En la página Hospedaje, escriba la siguiente configuración.
Configuración Valor sugerido Descripción Cuenta de almacenamiento Nombre único globalmente Cree una cuenta de almacenamiento que use la aplicación de función. Los nombres de las cuentas de almacenamiento deben tener entre 3 y 24 caracteres y solo pueden incluir números y letras en minúscula. También puede usar una cuenta existente que debe cumplir los requisitos de la cuenta de almacenamiento. Sistema operativo Sistema operativo preferido Se preselecciona un sistema operativo en función de la selección de pila en tiempo de ejecución, pero puede cambiar esta configuración si es necesario. Tipo de plan Plan de App Service Elija Plan de App Service. Si ejecuta un plan de App Service, debe administrar el escalado de la aplicación de función. Seleccione Siguiente: Supervisión. En la página Supervisión, escriba la siguiente configuración.
Configuración Valor sugerido Descripción Application Insights Valor predeterminado Crea un recurso de Application Insights con el mismo nombre de aplicación en la región más cercana que lo admita. Si expande esta configuración o selecciona Crear nuevo puede cambiar el nombre de Application Insights o elegir otra región de una geografía de Azure en la que quiera almacenar los datos. Seleccione Revisar y crear para revisar las selecciones de configuración de la aplicación.
En la página Revisar y crear, revise la configuración y, a continuación, seleccione Crear para aprovisionar e implementar la aplicación de función.
Seleccione el icono Notificaciones de la esquina superior derecha del portal y observe el mensaje Implementación correcta.
Seleccione Ir al recurso para ver la nueva aplicación de función. También puede seleccionar Anclar al panel. Dicho anclaje facilita la vuelta a este recurso de aplicación de función desde el panel.
Creación de una conexión híbrida para la aplicación de función
Las conexiones híbridas se configuran en la sección de redes de la aplicación de funciones:
En configuración en la aplicación de funciones que acaba de crear, seleccione Redes.
Seleccione Configure your hybrid connections endpoints (Configurar los puntos de conexión híbridos).
Seleccione Agregar conexión híbrida.
Escriba la información sobre la conexión híbrida, tal como se muestra justo después de la siguiente captura de pantalla. En Host de punto de conexión, use el nombre de host del servidor local para el que creó el certificado autofirmado. Tendrá problemas de conexión cuando el nombre del certificado y el nombre de host del servidor local no coincidan. El puerto coincide con el puerto del servicio de administración remota de Windows predeterminado definido en el servidor anterior.
Configuración Valor sugerido Nombre de la conexión híbrida ContosoHybridOnPremisesServer Host del punto de conexión finance1 Puerto de punto de conexión 5986 Espacio de nombres de ServiceBus Crear nuevo Ubicación Seleccione una ubicación disponible Nombre contosopowershellhybrid Haga clic en Aceptar para crear la conexión híbrida.
Descarga e instalación de la conexión híbrida
Seleccione Descargar administrador de conexión para guardar el archivo .msi localmente en el equipo.
Copie el archivo .msi del equipo local en el servidor local.
Ejecute el instalador del Administrador de conexiones híbridas para instalar el servicio en el servidor local.
En el portal, abra la conexión híbrida y copie la cadena de conexión de puerta de enlace en el Portapapeles.
Abra la interfaz de usuario del Administrador de conexiones híbridas en el servidor local.
Seleccione Indicar manualmente y pegue la cadena de conexión del portapapeles.
Reinicie el Administrador de conexiones híbridas desde PowerShell si no aparece como conectado.
Restart-Service HybridConnectionManager
Creación de una configuración de aplicación para la contraseña de una cuenta de administrador
En Configuración de la aplicación de funciones, seleccione Configuración.
Seleccione + Nueva configuración de la aplicación.
Asigne a la configuración el nombre ContosoUserPassword y escriba la contraseña. Seleccione Aceptar.
Seleccione Guardar para almacenar la contraseña en la aplicación de funciones.
Creación de un desencadenador HTTP de función
En la aplicación de funciones, seleccione Funciones y, a continuación, seleccione + Agregar.
Seleccione la plantilla del desencadenador HTTP.
Asigne un nombre a la nueva función y seleccione Crear función.
Prueba de la función
En la nueva función, seleccione Código y prueba. Reemplace el código de PowerShell de la plantilla por el código siguiente:
# 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)
Seleccione Guardar.
Seleccione Prueba y, a continuación, seleccione Ejecutar para probar la función. Revise los registros para comprobar que la prueba se realizó correctamente.
Administración de otros sistemas locales
Puede usar el servidor local conectado para conectarse a otros servidores y sistemas de administración del entorno local. Esto permite administrar las operaciones del centro de datos desde Azure mediante las funciones de PowerShell. El script siguiente registra una sesión de configuración de PowerShell que se ejecuta con las credenciales proporcionadas. Estas credenciales deben ser de administrador en los servidores remotos. Luego, puede usar esta configuración para acceder a otros puntos de conexión en el servidor local o el centro de datos.
# 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
Reemplace las siguientes variables de este script con los valores aplicables de su entorno:
- $HybridEndpoint
- $RemoteServer
En los dos escenarios anteriores, puede conectarse a sus entornos locales y administrarlos con PowerShell en Azure Functions y Conexiones híbridas. Le recomendamos que obtenga más información sobre Conexiones híbridas y PowerShell en Functions.
También puede usar las redes virtuales de Azure para conectarse a su entorno local mediante Azure Functions.