Gerenciando ambientes híbridos com o PowerShell no Azure Functions e nas Conexões Híbridas do Serviço de Aplicativo
O recurso Conexões Híbridas do Serviço de Aplicativo do Azure permite o acesso a recursos em outras redes. Você pode saber mais sobre esse recurso na documentação do Hybrid Connections . Este artigo descreve como usar esse recurso para executar funções do PowerShell destinadas a um servidor local. Esse servidor pode ser usado para gerenciar todos os recursos no ambiente local a partir de uma função do Azure PowerShell.
Configurar um servidor local para comunicação remota do PowerShell
O script a seguir habilita a comunicação remota do PowerShell e cria uma nova regra de firewall e um ouvinte https do WinRM. Para fins de teste, um certificado autoassinado é usado. Em um ambiente de produção, recomendamos que você use um certificado assinado.
# 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
Criar um aplicativo de função do PowerShell no portal
O recurso Conexões Híbridas do Serviço de Aplicativo está disponível somente nos planos de preços Básico, Padrão e Isolado. Ao criar o aplicativo de função com o PowerShell, crie ou selecione um desses planos.
A partir do menu do portal do Azure ou a partir da Home page, selecione Criar um recurso.
Na página Novo, selecione Aplicativo de função de computação>.
Na página Noções básicas, use as configurações do aplicativo de função conforme especificado na tabela a seguir.
Definição Valor sugerido Description Subscrição a sua subscrição A subscrição no âmbito da qual esta nova aplicação de funções é criada. Grupo de Recursos myResourceGroup Nome do grupo de recursos novo no qual a aplicação Function App vai ser criada. Nome da Aplicação de Funções Nome globalmente exclusivo Nome que identifica a sua aplicação Function App nova. Os carateres válidos são a-z
(não sensível a maiúsculas e minúsculas),0-9
e-
.Publicar Código Opção para publicar ficheiros de código ou um contentor de Docker. Pilha de runtime Idioma Preferencial Escolha PowerShell Core. Versão Número de versão Escolha a versão do seu tempo de execução instalado. Região Região preferida Escolha uma região perto de si ou de outros serviços aos quais as suas funções acedem. Selecione Next : Hosting. Na página Hospedagem, insira as seguintes configurações.
Definição Valor sugerido Description Conta de armazenamento Nome globalmente exclusivo Crie uma conta de armazenamento para ser utilizada pela sua aplicação de funções. Os nomes das contas de armazenamento devem ter entre 3 e 24 caracteres e podem conter apenas números e letras minúsculas. Você também pode usar uma conta existente, que deve atender aos requisitos da conta de armazenamento. Sistema Operativo Sistema operativo preferido Um sistema operacional é pré-selecionado para você com base na seleção da pilha de tempo de execução, mas você pode alterar a configuração, se necessário. Tipo de plano Plano de serviço de aplicativo Escolha Plano de serviço de aplicativo. Quando executa num plano do Serviço de Aplicações, tem de gerir o dimensionamento da sua aplicação de funções. Selecione Avançar : Monitoramento. Na página Monitoramento, insira as seguintes configurações.
Definição Valor sugerido Description Application Insights Predefinido Cria um recurso do Application Insights com o mesmo nome de aplicativo na região suportada mais próxima. Ao expandir essa configuração ou selecionar Criar novo, você pode alterar o nome do Application Insights ou escolher uma região diferente em uma geografia do Azure onde deseja armazenar seus dados. Selecione Rever + criar para rever as seleções de configuração da aplicação.
Na página Rever + criar, reveja as suas definições e, em seguida, selecione Criar para provisionar e implementar a aplicação funcional.
Selecione o ícone Notificações no canto superior direito do portal e observe a mensagem Implantação bem-sucedida .
Selecione Ir para o recurso para ver a sua nova aplicação de funções. Você também pode selecionar Fixar no painel. A fixação facilita o retorno a esse recurso de aplicativo funcional a partir do seu painel.
Criar uma conexão híbrida para o aplicativo de função
As conexões híbridas são configuradas a partir da seção de rede do aplicativo de função:
Em Configurações no aplicativo de função que você acabou de criar, selecione Rede.
Selecione Configurar seus pontos de extremidade de conexões híbridas.
Selecione Adicionar conexão híbrida.
Insira informações sobre a conexão híbrida, conforme mostrado após a captura de tela a seguir. Para Endpoint Host, use o nome do host do servidor local para o qual você criou o certificado autoassinado. Você terá problemas de conexão quando o nome do certificado e o nome do host do servidor local não coincidirem. A porta corresponde à porta padrão do serviço de gerenciamento remoto do Windows que foi definida no servidor anteriormente.
Definição Valor sugerido Nome da conexão híbrida ContosoHybridOnPremisesServer Host do ponto de extremidade finanças1 Porta do ponto final 5986 Namespace do Servicebus Criar Novo Location Escolha um local disponível Nome contosopowershellhybrid Selecione OK para criar a conexão híbrida.
Baixe e instale a conexão híbrida
Selecione Baixar gerenciador de conexões para salvar o arquivo .msi localmente no seu computador.
Copie o arquivo .msi do computador local para o servidor local.
Execute o instalador do Gerenciador de Conexões Híbridas para instalar o serviço no servidor local.
No portal, abra a conexão híbrida e copie a cadeia de conexão do gateway para a área de transferência.
Abra a interface do usuário do Gerenciador de Conexões Híbridas no servidor local.
Selecione Enter Manually e cole a cadeia de conexão da área de transferência.
Reinicie o Gerenciador de Conexões Híbridas do PowerShell se ele não aparecer como conectado.
Restart-Service HybridConnectionManager
Criar uma configuração de aplicativo para a senha de uma conta de administrador
Em Configurações para seu aplicativo de função, selecione Configuração.
Selecione + Nova configuração do aplicativo.
Nomeie a configuração ContosoUserPassword e digite a senha. Selecione OK.
Selecione Salvar para armazenar a senha no aplicativo de função.
Criar um gatilho HTTP de função
Na sua aplicação de funções, selecione Funções e, em seguida, selecione + Adicionar.
Selecione o modelo de gatilho HTTP, nomeie a nova função e selecione Criar função.
Testar a função
Na nova função, selecione Código + Teste. Substitua o código do PowerShell do modelo pelo seguinte código:
# 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)
Selecione Salvar para salvar as alterações e, em seguida, selecione Executar teste> para testar a função.
Selecione Logs para revisar os logs e verificar se o teste foi bem-sucedido.
Gerenciando outros sistemas no local
Você pode usar o servidor local conectado para se conectar a outros servidores e sistemas de gerenciamento no ambiente local. Isso permite que você gerencie suas operações de datacenter do Azure usando suas funções do PowerShell. O script a seguir registra uma sessão de configuração do PowerShell que é executada sob as credenciais fornecidas. Essas credenciais devem ser para um administrador nos servidores remotos. Em seguida, você pode usar essa configuração para acessar outros pontos de extremidade no servidor local ou no 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
Substitua as seguintes variáveis neste script pelos valores aplicáveis do seu ambiente:
- $HybridEndpoint
- $RemoteServer
Nos dois cenários anteriores, você pode conectar e gerenciar seus ambientes locais usando o PowerShell no Azure Functions e Conexões Híbridas. Recomendamos que você saiba mais sobre Conexões Híbridas e PowerShell em funções.
Você também pode usar as redes virtuais do Azure para se conectar ao seu ambiente local por meio do Azure Functions.