Tutorial: integrar o Azure Functions a uma rede virtual do Azure usando pontos de extremidade privados

Este tutorial mostra como usar o Azure Functions para se conectar a recursos em uma rede virtual do Azure usando pontos de extremidade privados. Você cria um aplicativo de funções usando uma nova conta de armazenamento bloqueada atrás de uma rede virtual através do portal do Microsoft Azure. A rede virtual usa um gatilho de fila do Barramento de Serviço.

Neste tutorial, você aprenderá a:

  • Crie um aplicativo de funções no plano Elástico Premium com integração de rede virtual e pontos de extremidade privados.
  • Criar recursos do Azure, como Barramento de Serviço
  • Bloqueie o Barramento de Serviço por meio de um ponto de extremidade privado.
  • Implante um aplicativo de funções que usa o Barramento de Serviço e os gatilhos HTTP.
  • Teste para ver se seu aplicativo de funções está seguro na rede virtual.
  • Limpe os recursos.

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

Você cria um aplicativo de funções C# em um plano Elástico Premium, que suporta recursos de rede, como a integração de rede virtual na criação, juntamente com a escala sem servidor. Este tutorial usa o C# e o Windows. Outros idiomas e o Linux também são suportados.

  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 Básico, use a seguinte tabela para configurar o aplicativo de funções.

    Configuração Valor sugerido Descrição
    Assinatura Sua assinatura A assinatura com a qual esse novo aplicativo de funções será criado.
    Grupo de Recursos myResourceGroup Nome do novo grupo de recursos em que você cria 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 Escolha entre a publicação de arquivos de código ou de um contêiner do Docker.
    Pilha de runtime .NET Este tutorial usa .NET.
    Versão 6 (LTS) Este tutorial usa o .NET 6.0 em execução no mesmo processo que o host do Functions.
    Região Região preferencial Escolha uma região perto de você ou de outros serviços acessados por suas funções.
    Sistema operacional Windows Este tutorial usa Windows, mas também funciona para Linux.
    Plano Functions Premium Plano de hospedagem que define como os recursos são alocados para seu aplicativo de funções. Por padrão, ao selecionar Premium, é criado um novo plano do Serviço de Aplicativo. EP1 representa o SKU e o tamanho padrão, em que EP significa Premium elástico. Para obter mais informações, consulte a lista de SKUs Premium.

    Ao executar funções JavaScript em um plano Premium, você deve escolher uma instância com menos vCPUs. Para obter mais informações, confira Escolher planos Premium de núcleo único.
  4. Selecione A seguir: Armazenamento. Na página Armazenamento, 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. O nome da conta de armazenamento deve ter entre três e 24 caracteres. Ele pode conter apenas números e letras minúsculas. Você também pode usar uma conta existente que não esteja restringida por regras de firewall e atenda aos requisitos de conta de armazenamento. Ao usar o Functions com uma conta de armazenamento bloqueada, é necessária uma conta de armazenamento v2. Essa é a versão de armazenamento padrão criada ao criar um aplicativo de funções com recursos de rede através da folha de criação.
  5. Selecione Avançar: Rede. Na página Rede, insira as seguintes configurações.

    Observação

    Algumas dessas configurações não são visíveis até que outras opções sejam selecionadas.

    Configuração Valor sugerido Descrição
    Permitir o acesso público Desativado Negar acesso à rede pública irá bloquear todo o tráfego de entrada, exceto o proveniente de pontos de extremidade privados.
    Habilitar a injeção de rede Ativado A capacidade de configurar seu aplicativo com a integração da VNet na criação aparece na janela do portal após esta opção ser alterada para Ativado.
    Rede Virtual Criar Novo Selecione o campo Criar. Na tela pop-out, forneça um nome para sua rede virtual e selecione Ok. As opções para restrição do acesso de entrada e saída ao seu aplicativo de funções na criação são exibidas. Você deve habilitar explicitamente a integração da VNet na parte Acesso de Saída da janela para restringir o acesso de saída.

    Insira as seguintes configurações para a seção Acesso de entrada. Esta etapa cria um ponto de extremidade privado no seu aplicativo de funções.

    Dica

    Para continuar interagindo com seu aplicativo de funções do portal, será necessário adicionar seu computador local à rede virtual. Se você não deseja restringir o acesso de entrada, ignore esta etapa.

    Configuração Valor sugerido DESCRIÇÃO
    Habilitar pontos de extremidade privados Ativado A capacidade de configurar seu aplicativo com a integração da VNet na criação aparece no portal após essa opção estar habilitada.
    Nome do ponto de extremidade privado myInboundPrivateEndpointName Nome que identifica seu novo ponto de extremidade privado do aplicativo de funções.
    Sub-rede de entrada Criar Novo Esta opção cria uma sub-rede para seu ponto de extremidade privado de entrada. Vários pontos de extremidade privados podem ser adicionados a uma única sub-rede. Forneça um Nome de Sub-rede. O Bloco de Endereços da Sub-rede pode ser deixado no valor padrão. Selecione OK. Para saber mais sobre o dimensionamento de sub-redes, confira Sub-rede.
    DNS Zona de DNS privado do Azure Esse valor indica qual servidor DNS seu ponto de extremidade privado utiliza. Na maioria dos casos, se você estiver trabalhando no Azure, a Zona DNS Privada do Azure é a zona DNS que você deve usar, pois o uso do Manual para zonas DNS personalizadas aumentou a complexidade.

    Insira as seguintes configurações para a seção Acesso de saída. Esta etapa integra seu aplicativo de funções com uma rede virtual no momento da criação. Ele também expõe as opções para criar pontos de extremidade privados na sua conta de armazenamento e restringir sua conta de armazenamento do acesso à rede ao criar. Quando o aplicativo de funções está integrado à vnet, todo o tráfego de saída, por padrão, passa pela vnet..

    Configuração Valor sugerido DESCRIÇÃO
    Habilitar a integração da VNet Ativado Isso integra seu aplicativo de funções com uma VNet ao criar e direcionar todo o tráfego de saída através da VNet.
    Sub-rede de saída Create new Isso cria uma sub-rede para a integração do seu aplicativo de funções da VNet. Um aplicativo de funções somente pode ser integrado à VNet com uma sub-rede vazia. Forneça um Nome de Sub-rede. O Bloco de Endereços da Sub-rede pode ser deixado no valor padrão. Se desejar configurá-lo, saiba mais sobre o dimensionamento de sub-rede aqui. Selecione OK. A opção para criar pontos de extremidade privados de armazenamento será exibida. Para usar seu aplicativo de funções com redes virtuais, é necessário associá-lo a uma sub-rede.

    Insira as seguintes configurações para a seção Ponto de extremidade privado de armazenamento. Esta etapa cria pontos de extremidade privados para os pontos de extremidade de blob, fila, arquivo e tabela na sua conta de armazenamento ao criar. Isso efetivamente integra sua conta de armazenamento com a VNet.

    Configuração Valor sugerido DESCRIÇÃO
    Adicionar um ponto de extremidade privado de armazenamento Ativado A capacidade de configurar seu aplicativo com a integração da VNet na criação é exibida no portal após essa opção ser habilitada.
    Nome do ponto de extremidade privado myInboundPrivateEndpointName Nome que identifica o ponto de extremidade privado da sua conta de armazenamento.
    Sub-rede de ponto de extremidade privado Criar Novo Isso cria uma sub-rede para seu ponto de extremidade privado de entrada na conta de armazenamento. Vários pontos de extremidade privados podem ser adicionados a uma única sub-rede. Forneça um Nome de Sub-rede. O Bloco de Endereços da Sub-rede pode ser deixado no valor padrão. Se desejar configurá-lo, saiba mais sobre o dimensionamento de sub-rede aqui. Selecione OK.
    DNS Zona de DNS privado do Azure Esse valor indica qual servidor DNS seu ponto de extremidade privado utiliza. Na maioria dos casos, se você estiver trabalhando no Azure, a Zona DNS Privada do Azure é a zona DNS que você deve usar, pois o uso do Manual para zonas DNS personalizadas terá maior complexidade.
  6. Selecione Avançar: Monitoramento. Na página Monitoramento, insira as configurações a seguir.

    Configuração Valor sugerido Descrição
    Application Insights Padrão Crie um recurso do Application Insights com o mesmo nome de aplicativo na região mais próxima com suporte. Expanda essa configuração se você precisar alterar o Nome do novo recurso ou armazenar os dados em um Local diferente de uma Geografia do Azure.
  7. Selecione Examinar + criar para examinar as seleções de configuração do aplicativo.

  8. Na página Revisar + criar, revise suas configurações. Em seguida, selecione Criar para criar e implantar o aplicativo de funções.

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

  10. 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.

Parabéns! Você criou seu aplicativo de funções Premium com sucesso.

Observação

Algumas implantações podem ocasionalmente falhar na criação de pontos de extremidade privados na conta de armazenamento com o erro 'StorageAccountOperationInProgress'. Essa falha ocorre mesmo que o próprio aplicativo de funções tenha sido criado com êxito. Quando encontrar esse erro, exclua o aplicativo de funções e repita a operação. Em vez disso, você pode criar manualmente os pontos de extremidade privados na conta de armazenamento.

Criar um Barramento de Serviço

Em seguida, você criará uma instância do Barramento de Serviço do Azure que será usada para testar a funcionalidade dos recursos de rede do seu aplicativo de funções neste tutorial.

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

  2. Na página Novo, procure o Barramento de Serviço. Em seguida, selecione Criar.

  3. Na guia Básico, use a tabela a seguir para definir as configurações do Barramento de Serviço. Deixe os valores padrão para todas as outras configurações.

    Configuração Valor sugerido Descrição
    Assinatura Sua assinatura A assinatura na qual seus recursos são criados.
    Grupo de recursos myResourceGroup O grupo de recursos que você criou com seu aplicativo de funções.
    Nome do namespace myServiceBus O nome da instância do Barramento de Serviço do Azure para a qual o ponto de extremidade privado está habilitado.
    Local myFunctionRegion A região em que você criou seu aplicativo de funções.
    Tipo de preços Premium Escolha esta camada para usar pontos de extremidade privados com o barramento de serviço do Azure.
  4. Selecione Examinar + criar. Depois da validação, selecione Criar.

Bloquear o Barramento de Serviço

Criar o ponto de extremidade privado para bloquear seu Barramento de Serviço:

  1. Em seu novo Barramento de Serviço, no menu à esquerda, selecione Rede.

  2. Na guia Conexões de pontos de extremidade privados, selecione Ponto de extremidade privado.

    Screenshot of how to go to private endpoints for the Service Bus.

  3. Na guia Básicos, use as configurações de ponto de extremidade privado mostradas na tabela a seguir.

    Configuração Valor sugerido Descrição
    Assinatura Sua assinatura A assinatura na qual seus recursos são criados.
    Grupo de recursos myResourceGroup O grupo de recursos que você criou com seu aplicativo de funções.
    Nome sb-endpoint O nome do ponto de extremidade privado do barramento de serviço.
    Região myFunctionRegion A região em que você criou sua conta de armazenamento.
  4. Na guia Recurso, use as configurações de ponto de extremidade privado mostradas na tabela a seguir.

    Configuração Valor sugerido Descrição
    Assinatura Sua assinatura A assinatura na qual os recursos são criados.
    Tipo de recurso Microsoft.ServiceBus/namespaces O tipo de recurso para o Barramento de Serviço.
    Recurso myServiceBus O Barramento de Serviço que você criou anteriormente no tutorial.
    Sub-recurso de destino namespace O ponto de extremidade privado usado para o namespace do Barramento de Serviço.
  5. Na guia Rede Virtual, para a configuração da Sub-rede, escolha padrão.

  6. Selecione Examinar + criar. Depois da validação, selecione Criar.

  7. Depois que o ponto de extremidade privado for criado, retorne à seção Rede do namespace do Barramento de Serviço do Azure e verifique a guia Acesso Público.

  8. Verifique se as redes selecionadas estão selecionadas.

  9. Selecione + Adicionar rede virtual existente para adicionar a rede virtual criada recentemente.

  10. Na guia Adicionar redes, use as configurações de rede da tabela a seguir:

    Configuração Valor sugerido Descrição
    Assinatura Sua assinatura A assinatura na qual os recursos são criados.
    Redes virtuais myVirtualNet Nome da rede virtual à qual seu aplicativo de funções se conecta.
    Sub-redes funções Nome da sub-rede à qual o aplicativo de funções se conecta.
  11. Selecione Adicionar o endereço IP do cliente para permitir ao IP do cliente atual acesso ao namespace.

    Observação

    É necessário permitir o endereço IP do cliente para habilitar o portal do Azure a publicar mensagens na fila neste tutorial mais adiante.

  12. Selecione Habilitar para habilitar o ponto de extremidade de serviço.

  13. Selecione Adicionar para adicionar a rede virtual e a sub-rede selecionadas às regras de firewall para o Barramento de Serviço.

  14. Selecione Salvar para salvar as regras de firewall atualizadas.

Os recursos na rede virtual agora podem se comunicar com Barramento de Serviço usando o ponto de extremidade privado.

Criar uma fila

Crie a fila em que seu gatilho do Barramento de Serviço do Azure Functions recebe os eventos:

  1. No Barramento de Serviço, no menu à esquerda, selecione Filas.

  2. Selecionar Fila. Para efeitos deste tutorial, forneça o nome da fila como o nome da nova fila.

    Screenshot of how to create a Service Bus queue.

  3. Selecione Criar.

Obter uma cadeia de conexão do Barramento de Serviço

  1. No Barramento de Serviço, no menu à esquerda, selecione Políticas de acesso compartilhado.

  2. Selecione RootManageSharedAccessKey. Copie e salve a Cadeia de conexão primária. Você precisa dessa cadeia de conexão ao definir as configurações do aplicativo.

    Screenshot of how to get a Service Bus connection string.

Configurar o aplicativo de funções

  1. No aplicativo de funções, no menu à esquerda, selecione Configuração.

  2. Para usar seu aplicativo de funções com redes virtuais e barramento de serviços, atualize as configurações do aplicativo mostradas na tabela a seguir. Para adicionar ou editar uma configuração, selecione + Nova configuração de aplicativo ou o ícone Editar na coluna mais à direita da tabela de configurações do aplicativo. Quando terminar, selecione Salvar.

    Configuração Valor sugerido DESCRIÇÃO
    SERVICEBUS_CONNECTION myServiceBusConnectionString Crie essa configuração de aplicativo para a cadeia de conexão do seu Barramento de Serviço. Essa é a cadeia de conexão de armazenamento da seção Obter a cadeia de conexão de um Barramento de Serviço.
    WEBSITE_CONTENTOVERVNET 1 Crie essa configuração de aplicativo. Um valor 1 permite que o aplicativo de funções seja dimensionado para contas de armazenamento restritas a uma rede virtual.
  3. Como você está usando um plano de hospedagem Elástico Premium, na exibição Configuração, selecione a guia Configurações de runtime da função. Defina Monitoramento de Escala de Runtime para em . Em seguida, selecione Salvar. O dimensionamento controlado por tempo de execução permite conectar funções de gatilho não HTTP a serviços executados em sua rede virtual.

    Screenshot of how to enable runtime-driven scaling for Azure Functions.

Observação

A escala de runtime não é necessária para aplicativos de funções hospedados em um plano do Serviço de Aplicativo Dedicado.

Implantar um gatilho do Barramento de Serviço e um gatilho HTTP

Observação

A ativação de pontos de extremidade privados em um aplicativo de funções também torna o site do Gerenciador de Controle de Serviço (SCM) publicamente inacessível. As instruções a seguir fornecem instruções de implantação usando o Centro de Implantações no aplicativo de funções. Como alternativa, use a implantação de zip ou agentes auto-hospedados implantados em uma sub-rede na rede virtual.

  1. No GitHub, acesse o repositório de exemplo a seguir. Ele contém um aplicativo de funções e duas funções, além de um gatilho HTTP e de um gatilho de fila do Barramento de Serviço.

    https://github.com/Azure-Samples/functions-vnet-tutorial

  2. Na parte superior da página, selecione Bifurcar para criar uma bifurcação desse repositório em sua própria conta ou organização do GitHub.

  3. Em seu aplicativo de funções, no menu à esquerda, selecione Centro de implantação. Em seguida, selecione Configurações.

  4. Na guia Configurações, use as configurações de implantação mostradas na tabela a seguir.

    Configuração Valor sugerido Descrição
    Origem GitHub Você criou um repositório GitHub para o código de exemplo na etapa 2.
    Organização myOrganization A organização na qual foi feito o check-in do seu repositório. Em geral, é sua conta.
    Repositório functions-vnet-tutorial O repositório bifurcado de https://github.com/Azure-Samples/functions-vnet-tutorial.
    Branch main A ramificação principal do repositório que você criou.
    Pilha de runtime .NET O código de exemplo está em C#.
    Versão .NET Core 3.1 A versão de runtime.
  5. Selecione Salvar.

    Screenshot of how to deploy Azure Functions code through the portal.

  6. A implantação pode levar alguns minutos. Após a implantação do aplicativo, você verá uma mensagem de status Bem-sucedido (Ativo) na guia Logs. Se necessário, atualize a página.

Parabéns! Você implantou com sucesso o aplicativo de funções de exemplo.

Testar seu aplicativo de funções bloqueado

  1. No aplicativo de funções, no menu à esquerda, selecione Funções.

  2. Selecione ServiceBusQueueTrigger.

  3. No menu à esquerda, selecione Monitor.

Você vê que não pode monitorar seu aplicativo. Seu navegador não tem acesso à rede virtual, portanto, não pode acessar diretamente os recursos dela.

Veja uma maneira alternativa de monitorar sua função com o Application Insights:

  1. No aplicativo de funções, no menu à esquerda, selecione Application insights. Em seguida, selecione Exibir dados do Application Insights.

    Screenshot of how to view application insights for a function app.

  2. No menu à esquerda, selecione Métricas em tempo real.

  3. Abra uma nova guia. No Barramento de Serviço, no menu à esquerda, selecione Filas.

  4. Selecione sua fila.

  5. No menu à esquerda, selecione Explorador do barramento de serviço. Em Enviar, escolha Texto/simples para Tipo de conteúdo. Digite uma mensagem.

  6. Selecione Enviar para enviar a mensagem.

    Screenshot of how to send Service Bus messages by using the portal.

  7. Na guia Métricas em tempo real, observe que o gatilho de fila do Barramento de Serviço foi disparado. Se isso não aconteceu, reenvie a mensagem do Explorador do barramento de serviço.

    Screenshot of how to view messages by using live metrics for function apps.

Parabéns! Você testou com sucesso a configuração do aplicativo de funções com pontos de extremidade privados.

Entender as zonas DNS privadas

Você usou um ponto de extremidade privado para se conectar aos recursos do Azure. Você está se conectando a um endereço IP privado em vez de ao ponto de extremidade público. Os serviços existentes do Azure são configurados a fim de usar um DNS existente para a conexão com o ponto de extremidade público. Você deve substituir a configuração de DNS para se conectar ao ponto de extremidade privado.

Uma zona DNS privada é criada para cada recurso do Azure que foi configurado com um ponto de extremidade privado. Um registro DNS é criado para cada endereço IP privado associado ao ponto de extremidade privado.

As zonas DNS a seguir foram criadas neste tutorial:

  • privatelink.file.core.windows.net
  • privatelink.blob.core.windows.net
  • privatelink.servicebus.windows.net
  • privatelink.azurewebsites.net

Limpar os recursos

Nas etapas anteriores, você criou os recursos do Azure em um grupo de recursos. Se você não espera precisar desses recursos no futuro, poderá excluí-los ao excluir o grupo de recursos.

No menu do portal do Azure ou na Página inicial, selecione Grupos de recursos. Em seguida, na página Grupos de recursos, selecione myResourceGroup.

Na página myResourceGroup, certifique-se de que os recursos listados são aqueles que deseja excluir.

Selecione Excluir grupo de recursos, digite myResourceGroup na caixa de texto para confirmar e selecione Excluir.

Próximas etapas

Neste tutorial, você criou um aplicativo de funções Premium, uma conta de armazenamento e um Barramento de Serviço. Você protegeu todos esses recursos por meio de pontos de extremidade privados.

Use os links a seguir para saber mais sobre as opções de rede e os pontos de extremidade privados do Azure Functions: