Tutorial: Controlar o IP de saída do Azure Functions com um gateway da NAT da Rede Virtual do Azure

A NAT (conversão de endereços de rede) de rede virtual simplifica a conectividade com a Internet somente de saída para redes virtuais. Quando configurado em uma sub-rede, toda a conectividade de saída usa seus endereços IP públicos estáticos especificados. Uma NAT pode ser útil para aplicativos que precisam consumir um serviço de terceiros que usa uma lista de permitidos de endereço IP como medida de segurança. Para saber mais, confira O que é o Gateway da NAT do Azure?.

Este tutorial mostra como usar as gateways de NAT para rotear o tráfego de saída de uma função disparada por HTTP. Essa função permite que você verifique um endereço IP de saída próprio. Durante este tutorial, você vai:

  • Criar uma rede virtual
  • Criar um aplicativo de funções em um plano Premium
  • Criar um endereço IP público
  • Criar um gateway da NAT
  • Configurar o aplicativo de funções para rotear o tráfego de saída pelo gateway da NAT

Topologia

O seguinte diagrama mostra a arquitetura da solução que você criará:

UI for NAT gateway integration

As funções em execução no plano Premium têm as mesmas funcionalidades de hospedagem dos aplicativos Web no Serviço de Aplicativo do Azure, que inclui o recurso de Integração VNET. Para saber mais sobre a Integração VNET, incluindo a solução de problemas e a configuração avançada, confira Integrar seu aplicativo a uma rede virtual do Azure.

Pré-requisitos

Para este tutorial, é importante que você tenha noções básicas do endereçamento IP e das sub-redes. Você pode começar com este artigo que aborda os conceitos básicos de endereçamento e sub-redes. Muitos outros artigos e vídeos estão disponíveis online.

Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.

Se você já tiver concluído o tutorial Integrar o Functions a uma rede virtual do Azure, prossiga para Criar uma função de gatilho HTTP.

Criar uma rede virtual

  1. No menu do portal do Azure, selecione Criar um recurso. No Azure Marketplace, selecione rede>rede virtual.

  2. Em Criar rede virtual, insira ou selecione as configurações especificadas, conforme mostrado na seguinte tabela:

    Configuração Valor
    Subscription Selecione sua assinatura.
    Resource group Selecione Criar novo e insira myResourceGroup, depois selecione OK.
    Nome Insira myResourceGroup-vnet.
    Location Selecione Leste dos EUA.
  3. Selecione Avançar: Endereços IP e, em Espaço de endereços IPv4, insira 10.10.0.0/16.

  4. Escolha Adicionar sub-rede e insira Tutorial-Net para Nome da sub-rede e 10.10.1.0/24 para Intervalo de endereços de sub-rede.

    IP Addresses tab for creating a vnet

  5. Selecione Adicionar e, em seguida, Examinar + criar. Deixe o restante com os valores padrão e selecione Criar.

  6. Em Criar rede virtual, selecione Criar.

Em seguida, você criará um aplicativo de funções no plano Premium. Este plano fornece escala sem servidor, dando suporte à integração de rede virtual.

Criar um aplicativo de funções em um plano Premium

Este tutorial mostra como criar seu aplicativo de funções em um plano Premium. A mesma funcionalidade também está disponível quando um plano Dedicado (Serviço de Aplicativo) é usado.

Observação

Para obter a melhor experiência neste tutorial, escolha .NET como a pilha de runtime e Windows como o sistema operacional. Além disso, crie o aplicativo de funções na mesma região que a rede virtual.

  1. No menu do portal do Azure ou na Página inicial, selecione Criar um recurso.

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

  3. Na página Informações básicas, use as configurações do aplicativo de funções conforme especificado na seguinte tabela:

    Configuração Valor sugerido Descrição
    Assinatura Sua assinatura A assinatura na qual este novo aplicativo de funções será criado.
    Grupo de Recursos myResourceGroup Nome do novo grupo de recursos no qual criar o seu aplicativo de funções.
    Nome do aplicativo de funções Nome globalmente exclusivo Nome que identifica seu novo aplicativo de funções. Os caracteres válidos são a-z (não diferencia maiúsculas de minúsculas), 0-9 e -.
    Publicar Código Opção para publicar arquivos de código ou um contêiner do Docker.
    Pilha de runtime Linguagem preferencial Escolha um runtime compatível com sua linguagem de programação de funções favorita. Atualmente, não há suporte para edição no portal para desenvolvimento do Python.
    Região Região preferencial Escolha uma região perto de você ou perto de outros serviços que suas funções acessam.
  4. Selecione Avançar: Hospedagem. Na página Hospedagem, insira as seguintes configurações:

    Configuração Valor sugerido Descrição
    Conta de armazenamento Nome globalmente exclusivo Crie uma conta de armazenamento usada pelo seu aplicativo de funções. Os nomes da conta de armazenamento devem ter entre 3 e 24 caracteres e podem conter apenas números e letras minúsculas. Use também uma conta existente, que precisará atender aos requisitos da conta de armazenamento.
    Sistema operacional Sistema operacional preferencial Um sistema operacional é pré-selecionado para você com base na seleção da pilha de runtime, mas você pode alterar a configuração, se necessário. O Python só tem suporte no Linux. Só há suporte para edição no portal no Windows.
    Plano Premium Plano de hospedagem que define como os recursos são alocados para seu aplicativo de funções. Selecione Premium. Por padrão, um plano do Serviço de Aplicativo é criado. O SKU e o tamanho padrão é EP1, em que EP significa elástico premium. Para saber mais, confira a lista de SKUs Premium.
    Ao executar funções JavaScript em um plano Premium, você deve escolher uma instância que tem menos vCPUs. Para obter mais informações, confira Escolher planos Premium de núcleo único.
  5. Selecione Avançar: Monitoramento. Na página Monitoramento, insira as seguintes configurações:

    Configuração Valor sugerido Descrição
    Application Insights Padrão Cria um recurso do Application Insights do mesmo nome do aplicativo na região com suporte mais próxima. Expandindo essa configuração, você pode alterar o Novo nome do recurso ou escolher um Local diferente em uma geografia do Azure para armazenar seus dados.
  6. Selecione Examinar + criar para examinar as seleções de configuração do aplicativo.

  7. Na página Examinar + criar, examine as configurações e, em seguida, selecione Criar para provisionar e implantar o aplicativo de funções.

  8. Selecione o ícone Notificações no canto superior direito do portal e veja se a mensagem Implantação concluída com êxito é exibida.

  9. Selecione Ir para recursos para exibir o novo aplicativo de funções. Você também pode selecionar Fixar no painel. A fixação torna mais fácil retornar a esse recurso de aplicativo de função no seu painel.

    Deployment notification

Conectar seu aplicativo de funções à rede virtual

Agora você pode conectar seu aplicativo de funções à rede virtual.

  1. No aplicativo de funções, selecione Rede no menu à esquerda e, em Integração VNET, escolha Clique aqui para configurar.

    Choose networking in the function app

  2. Na página Integração VNET, selecione Adicionar VNet.

  3. Em Status do Recurso de Rede, use as configurações da tabela abaixo da imagem:

    Define the function app virtual network

    Configuração Valor sugerido Descrição
    Rede Virtual MyResourceGroup-vnet Essa rede virtual é aquela que você criou anteriormente.
    Sub-rede Criar uma sub-rede Crie uma sub-rede na rede virtual para uso do seu aplicativo de funções. A Integração VNET precisa ser configurada para usar uma sub-rede vazia.
    Nome da sub-rede Function-Net Nome da nova sub-rede.
    Bloco de endereço da rede virtual 10.10.0.0/16 Você deve ter apenas um bloco de endereço definido.
    Bloco de endereço da sub-rede 10.10.2.0/24 O tamanho da sub-rede restringe o número total de instâncias para as quais seu aplicativo de funções do plano Premium pode ser expandido. Este exemplo usa uma sub-rede /24 com 254 endereços de host disponíveis. Essa sub-rede está superprovisionada, mas é fácil de ser calculada.
  4. Selecione OK para adicionar a sub-rede. Feche as páginas Integração VNET e Status do Recurso de Rede para voltar à página do aplicativo de funções.

Agora, o aplicativo de funções pode acessar a rede virtual. Quando a conectividade está habilitada, a configuração do site vnetrouteallenabled é definida como 1. É necessário ter esta configuração de site ou a configuração de aplicativo WEBSITE_VNET_ROUTE_ALL herdado definida como 1.

Em seguida, você adicionará uma função disparada por HTTP ao aplicativo de funções.

Criar uma função de gatilho HTTP

  1. No menu esquerdo da janela Funções, selecione Funções e depois selecione Adicionar no menu superior.

  2. Na janela Nova Função, selecione Gatilho HTTP e aceite o nome padrão para Nova Função ou insira um novo nome.

  3. Em Código + Teste, substitua o código do script C# gerado pelo modelo (.csx) pelo seguinte código:

    #r "Newtonsoft.Json"
    
    using System.Net;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Primitives;
    using Newtonsoft.Json;
    
    public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
    {
        log.LogInformation("C# HTTP trigger function processed a request.");
    
        var client = new HttpClient();
        var response = await client.GetAsync(@"https://ifconfig.me");
        var responseMessage = await response.Content.ReadAsStringAsync();
    
        return new OkObjectResult(responseMessage);
    }
    

    Esse código chama um site externo que retorna o endereço IP do chamador que, nesse caso, é essa função. Esse método permite que você determine com facilidade o endereço IP de saída que está sendo usado pelo aplicativo de funções.

Agora você está pronto para executar a função e verificar os IPs de saída atuais.

Verificar os IPs de saída atuais

Agora, você pode executar a função. Mas, primeiro, confira o portal e veja quais IPs de saída estão sendo usadas pelo aplicativo de funções.

  1. No aplicativo de funções, selecione Propriedades e examine o campo Endereços IP de Saída.

    View function app outbound IP addresses

  2. Agora, retorne à função de gatilho HTTP, selecione Código + Teste e Testar/Executar.

    Test function

  3. Selecione Executar para executar a função e alterne para a Saída.

    Test function output

  4. Verifique se o endereço IP no corpo da resposta HTTP é um dos valores dos endereços IP de saída exibidos anteriormente.

Agora, você pode criar um IP público e usar um gateway da NAT para modificar esse endereço IP de saída.

Criar um IP público

  1. No grupo de recursos, selecione Adicionar, procure Endereço IP público no Azure Marketplace e escolha Criar. Use as configurações da tabela abaixo da imagem:

    Create Public IP Address

    Configuração Valor sugerido
    Versão IP IPv4
    SKU Standard
    Camada Regional
    Nome Outbound-IP
    Assinatura Verifique se a sua assinatura é exibida
    Grupo de recursos myResourceGroup (ou o nome atribuído ao grupo de recursos)
    Localidade Leste dos EUA (ou a localização que você atribuiu aos outros recursos)
    Zona de Disponibilidade Nenhuma Zona
  2. Selecione Criar para enviar a implantação.

  3. Depois que a implantação for concluída, acesse o recurso de endereço IP público recém-criado e veja o endereço IP na Visão geral.

    View Public IP Address

Criar gateway NAT

Agora, vamos criar o gateway da NAT. Quando você começa com o tutorial anterior da rede virtual, Function-Net é o nome sugerido de sub-rede e MyResourceGroup-vnet é o nome sugerido de rede virtual nesse tutorial.

  1. No grupo de recursos, selecione Adicionar, procure Gateway da NAT no Azure Marketplace e escolha Criar. Use as configurações da tabela abaixo da imagem para preencher a guia Informações Básicas:

    Create NAT gateway

    Configuração Valor sugerido
    Assinatura Sua assinatura
    Grupo de recursos myResourceGroup (ou o nome atribuído ao grupo de recursos)
    Nome do gateway da NAT myNatGateway
    Região Leste dos EUA (ou a localização que você atribuiu aos outros recursos)
    Zona de Disponibilidade Nenhum
  2. Selecione Avançar: IP de saída. No campo Endereços IP públicos, selecione o endereço IP público criado anteriormente. Mantenha a opção Prefixos IP Públicos desmarcada.

  3. Selecione Avançar: Sub-rede. Escolha o recurso myResourceGroup-vnet no campo Rede virtual e na sub-rede Function-Net.

    Select subnet

  4. Selecione Examinar + Criar e Criar para enviar a implantação.

Depois que a implantação for concluída, o gateway da NAT estará pronto para rotear o tráfego da sub-rede do aplicativo de funções para a Internet.

Verificar novos IPs de saída

Repita as etapas anteriores para executar a função novamente. Agora, você verá o endereço IP de saída configurado na NAT mostrada na saída da função.

Limpar recursos

Você criou recursos para concluir este módulo. Esses recursos serão cobrados, dependendo do status da sua conta e do preço do serviço. Para evitar gerar custos extras, exclua os recursos quando não precisar mais deles.

  1. No portal do Azure, vá até a página Grupo de recursos.

    Para acessar essa página por meio da página de aplicativo de funções, selecione a guia Visão geral e o link em Grupo de recursos.

    Screenshot that shows select the resource group to delete from the function app page.

    Para acessar essa página no painel, selecione Grupos de recursos, depois o grupo de recursos usado para este artigo.

  2. Na página Grupo de recursos, examine a lista de recursos incluídos e verifique se eles são aqueles que deseja excluir.

  3. Selecione Excluir grupo de recursos e siga as instruções.

    A exclusão pode levar alguns minutos. Ao ser concluída, uma notificação será exibida por alguns segundos. Também é possível selecionar o ícone de sino na parte superior da página para exibir a notificação.

Próximas etapas