Gerir ambientes híbridos com o PowerShell no Funções do Azure e Serviço de Aplicações Ligações Híbridas

A funcionalidade Ligações Híbridas Serviço de Aplicações do Azure permite o acesso a recursos noutras redes. Pode saber mais sobre esta capacidade na documentação Ligações Híbridas . Este artigo descreve como utilizar esta capacidade para executar funções do PowerShell que visam um servidor no local. Em seguida, este servidor pode ser utilizado para gerir todos os recursos no ambiente no local a partir de uma função Azure PowerShell.

Configurar um servidor no local para a comunicação remota do PowerShell

O script seguinte ativa a comunicação remota do PowerShell e cria uma nova regra de firewall e um serviço de escuta winRM https. Para fins de teste, é utilizado um certificado autoassinado. Num ambiente de produção, recomendamos que utilize 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 uma aplicação de funções do PowerShell no portal

A funcionalidade Ligações Híbridas Serviço de Aplicações só está disponível nos planos de preços Básico, Standard e Isolado. Quando criar a aplicação de funções com o PowerShell, crie ou selecione um destes planos.

  1. A partir do menu do portal do Azure ou a partir da Home page, selecione Criar um recurso.

  2. Na página Novo, selecione >Aplicação de Funções de Computação.

  3. Na página Noções básicas , utilize as definições da aplicação de funções conforme especificado na tabela seguinte.

    Definição Valor sugerido Descrição
    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 Linguagem preferencial Selecione PowerShell Core.
    Versão Número da versão Escolha a versão do runtime instalado.
    Região Região preferencial Escolha uma região perto de si ou perto de outros serviços a que as suas funções acedem.

    Criar uma aplicação de funções – Noções básicas.

  4. Selecione Seguinte: Alojamento. Na página Alojamento , introduza as seguintes definições.

    Definição Valor sugerido Descrição
    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 têm de ter entre 3 e 24 carateres de comprimento e só podem conter números e letras minúsculas. Também pode utilizar uma conta existente, que tem de cumprir os requisitos da conta de armazenamento.
    Sistema operativo Sistema operativo preferencial Um sistema operativo está pré-selecionado para si com base na seleção da pilha de runtime, mas pode alterar a definição, se necessário.
    Tipo de plano Plano do serviço de aplicações Selecione Plano do serviço de aplicações. Quando executa num plano do Serviço de Aplicações, tem de gerir o dimensionamento da sua aplicação de funções.

    Criar uma aplicação de funções - Alojamento.

  5. Selecione Seguinte: Monitorização. Na página Monitorização , introduza as seguintes definições.

    Definição Valor sugerido Descrição
    Application Insights Predefinição Cria um recurso do Application Insights com o mesmo Nome da aplicação na região suportada mais próxima. Ao expandir esta definição ou selecionar Criar novo, pode alterar o nome do Application Insights ou escolher uma região diferente numa geografia do Azure onde pretende armazenar os seus dados.

    Criar uma aplicação de funções – Monitorização.

  6. Selecione Rever + criar para rever as seleções de configuração da aplicação.

  7. Na página Rever + criar , reveja as suas definições e, em seguida, selecione Criar para aprovisionar e implementar a aplicação de funções.

  8. Selecione o ícone Notificações no canto superior direito do portal e veja a mensagem Implementação com êxito .

  9. Selecione Ir para o recurso para ver a sua nova aplicação de funções. Também pode selecionar Afixar ao dashboard. A afixação facilita o regresso a este recurso da aplicação de funções a partir do dashboard.

Criar uma ligação híbrida para a aplicação de funções

As ligações híbridas são configuradas a partir da secção de rede da aplicação de funções:

  1. Em Definições na aplicação de funções que acabou de criar, selecione Rede.

  2. Selecione Configurar os pontos finais de ligações híbridas.

    Configure os pontos finais de ligação híbrida.

  3. Selecione Adicionar ligação híbrida.

    Adicione uma ligação híbrida.

  4. Introduza informações sobre a ligação híbrida, conforme mostrado após a captura de ecrã seguinte. Para o Anfitrião de Ponto Final, utilize o nome do anfitrião do servidor no local para o qual criou o certificado autoassinado. Terá problemas de ligação quando o nome do certificado e o nome do anfitrião do servidor no local não corresponderem. A porta corresponde à porta de serviço de gestão remota predefinida do Windows que foi definida anteriormente no servidor.

    Adicionar ligação híbrida.

    Definição Valor sugerido
    Nome da ligação híbrida ContosoHybridOnPremisesServer
    Anfitrião de Ponto Final finanças1
    Porta de Ponto Final 5986
    Espaço de nomes do Servicebus Criar Novo
    Localização Escolher uma localização disponível
    Nome contosopowershellhybrid
  5. Selecione OK para criar a ligação híbrida.

Transferir e instalar a ligação híbrida

  1. Selecione Transferir gestor de ligações para guardar o ficheiro de.msi localmente no seu computador.

    Transfira o instalador.

  2. Copie o ficheiro .msi do computador local para o servidor no local.

  3. Execute o instalador Gestor de Ligações Híbridas para instalar o serviço no servidor no local.

    Instale a ligação híbrida.

  4. A partir do portal, abra a ligação híbrida e, em seguida, copie a cadeia de ligação do gateway para a área de transferência.

    Copie a cadeia de ligação híbrida.

  5. Abra a IU do Gestor de Ligações Híbridas no servidor no local.

    Abra a IU da Ligação Híbrida.

  6. Selecione Introduzir Manualmente e cole a cadeia de ligação na área de transferência.

    Cole a ligação híbrida.

  7. Reinicie o Gestor de Ligações Híbridas do PowerShell se não for apresentado como ligado.

    Restart-Service HybridConnectionManager
    

Criar uma definição de aplicação para a palavra-passe de uma conta de administrador

  1. Em Definições da aplicação de funções, selecione Configuração.

  2. Selecione + Nova definição da aplicação.

    Configure uma palavra-passe para a conta de administrador.

  3. Atribua um nome à definição ContosoUserPassword e introduza a palavra-passe. Selecione OK.

  4. Selecione Guardar para armazenar a palavra-passe na aplicação de funções.

    Guarde a palavra-passe da conta de administrador.

Criar um acionador HTTP de função

  1. Na sua aplicação de funções, selecione Funções e, em seguida, selecione + Adicionar.

    Crie um novo acionador HTTP.

  2. Selecione o modelo de acionador HTTP .

    Selecione o modelo de acionador HTTP.

  3. Atribua um nome à nova função e selecione Criar Função.

    Dê um nome e crie a nova função de acionador HTTP.

Testar a função

  1. 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)
    
  2. Selecione Guardar.

    Altere o código do PowerShell e guarde a função de acionador HTTP.

  3. Selecione Testar e, em seguida, selecione Executar para testar a função. Reveja os registos para verificar se o teste foi efetuado com êxito.

    Testar a função de acionador HTTP.

Gerir outros sistemas no local

Pode utilizar o servidor no local ligado para ligar a outros servidores e sistemas de gestão no ambiente local. Isto permite-lhe gerir as suas operações de datacenter a partir do Azure com as suas funções do PowerShell. O script seguinte regista uma sessão de configuração do PowerShell que é executada nas credenciais fornecidas. Estas credenciais têm de ser para um administrador nos servidores remotos. Em seguida, pode utilizar esta configuração para aceder a outros pontos finais no servidor ou datacenter local.

# 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, pode ligar e gerir os seus ambientes no local com o PowerShell no Funções do Azure e ligações híbridas. Recomendamos que saiba mais sobre as Ligações Híbridas e o PowerShell em funções.

Também pode utilizar redes virtuais do Azure para ligar ao seu ambiente no local através de Funções do Azure.

Passos seguintes