Compartilhar via


Executar funções por meio de um arquivo de pacote no Azure

No Azure, você pode executar suas funções diretamente de um arquivo de pacote de implantação no aplicativo de funções. A outra opção é implantar os arquivos no diretório c:\home\site\wwwroot (Windows) ou /home/site/wwwroot (Linux) do aplicativo de funções.

Este artigo descreve os benefícios de executar suas funções de um pacote. Ele também mostra como habilitar essa funcionalidade em seu aplicativo de funções.

Benefícios da execução de um arquivo de pacote

Há vários benefícios para executar funções de um arquivo de pacote:

  • Reduz o risco de problemas de bloqueio de cópia de arquivo.
  • Pode ser implantado em um aplicativo de produção (com reinicialização).
  • Verifica os arquivos que estão em execução em seu aplicativo.
  • Melhora o desempenho das implantações do Azure Resource Manager.
  • Reduz os tempos de inicialização a frio, particularmente para as funções de JavaScript com árvores de pacote npm grandes.

Para saber mais, veja este comunicado.

Habilitar funções para execução por meio de um pacote

Os aplicativos de função no plano de hospedagem Consumo Flex são executados a partir de um pacote por padrão. Nenhuma configuração especial precisa ser feita.

Para permitir que seu aplicativo de função seja executado a partir de um pacote nos planos de hospedagem Consumption, Elastic Premium e Dedicated (Serviço de Aplicativo do Azure), adicione uma WEBSITE_RUN_FROM_PACKAGE configuração de aplicativo ao seu aplicativo de função. A configuração de aplicativo WEBSITE_RUN_FROM_PACKAGE pode ter um dos seguintes valores:

Valor Descrição
1 Indica que o aplicativo de funções é executado de um arquivo de pacote local implantado na pasta c:\home\data\SitePackages (Windows) ou /home/data/SitePackages (Linux) do aplicativo de funções.
<URL> Define uma URL que é a localização remota do arquivo de pacote específico que você deseja executar. Necessária para aplicativos de funções em execução no Linux em um plano de Consumo.

A seguinte tabela indica os valores WEBSITE_RUN_FROM_PACKAGE recomendados para implantação em um sistema operacional e um plano de hospedagem específicos:

Plano de hospedagem Windows Linux
Consumo 1 é altamente recomendado. Apenas <URL> tem suporte.
Premium O1 é recomendado. O1 é recomendado.
Dedicado O1 é recomendado. O1 é recomendado.

Considerações gerais

  • Não adicione a configuração de aplicativo WEBSITE_RUN_FROM_PACKAGE aos aplicativos no plano Flex Consumption .
  • O arquivo de pacote precisa ser formatado em .zip. Não há suporte para formatos TAR e GZIP.
  • A implantação do zip é recomendada.
  • Ao implantar seu aplicativo de funções no Windows, você deve definir WEBSITE_RUN_FROM_PACKAGE como 1 e publicar com a implantação de zip.
  • Quando você executa a partir de um pacote, a pasta wwwroot é somente leitura e você recebe um erro se você escreve arquivos neste diretório. Os arquivos também são somente leitura no portal do Azure.
  • O tamanho máximo de um arquivo de pacote de implantação é de 1 GB.
  • Não é possível usar o cache local durante a execução por meio de um pacote de implantação.
  • Se o projeto precisar usar o build remoto, não use a configuração de aplicativo WEBSITE_RUN_FROM_PACKAGE. Em vez disso, adicione a configuração de aplicativo de personalização da implantação SCM_DO_BUILD_DURING_DEPLOYMENT=true. No Linux, adicione também a configuração ENABLE_ORYX_BUILD=true. Para obter mais informações, consulte Compilação Remota.

Observação

A configuração do aplicativo WEBSITE_RUN_FROM_PACKAGE não funciona com MSDeploy, conforme descrito em MSDeploy VS. ZipDeploy. Você receberá um erro durante a implantação, como ARM-MSDeploy Deploy Failed. Para resolver esse erro, altere /MSDeploy para /ZipDeploy.

Adicione a configuração WEBSITE_RUN_FROM_PACKAGE

Há várias maneiras de adicionar, atualizar e excluir configurações do aplicativo de funções:

As alterações nas configurações do aplicativo de funções exigem que o seu aplicativo de funções seja reiniciado.

Criação do arquivador zip

O arquivador zip implantado deve conter todos os arquivos necessários para executar seu aplicativo de funções. Você pode criar manualmente um arquivador zip com base no conteúdo de uma pasta de projeto do Functions usando a funcionalidade de compactação .zip interna ou ferramentas de terceiros.

O arquivador deve incluir o arquivo host.json na raiz da pasta extraída. A pilha de idiomas selecionada para o aplicativo de funções cria requisitos adicionais:

Importante

Para linguagens que geram saída compilada para implantação, certifique-se de compactar o conteúdo da pasta de saída que você planeja publicar e não de toda a pasta do projeto. Quando o Functions extrai o conteúdo do arquivo zip, o arquivo host.json deve existir na raiz do pacote.

Use WEBSITE_RUN_FROM_PACKAGE = 1

Esta seção fornece informações sobre como executar seu aplicativo de funções por meio de um arquivo de pacote local.

Considerações sobre a implantação por meio de um pacote local

  • Usar um pacote local é a opção recomendada para execução a partir do pacote de implantação, exceto quando executado no Linux hospedado em um plano de Consumo.
  • A implantação do zip é a maneira recomendada de carregar um pacote de implantação no seu site.
  • Quando você não estiver usando a implantação do zip, verifique se a pasta c:\home\data\SitePackages (Windows) ou /home/data/SitePackages (Linux) tem um arquivo chamado packagename.txt. Esse arquivo contém apenas o nome, sem nenhum espaço em branco, do arquivo de pacote na pasta que está em execução no momento.

Integração com a implantação do zip

Implantação do zip é um recurso do Serviço de Aplicativo do Azure que permite que você implante seu projeto de aplicativo de funções no diretório wwwroot. O projeto é empacotado como um arquivo de implantação .zip. As mesmas APIs podem ser usadas para implantar seu pacote na pasta c:\home\data\SitePackages (Windows) ou /home/data/SitePackages (Linux).

Quando você define o valor de configuração de aplicativo WEBSITE_RUN_FROM_PACKAGE igual a 1, as APIs de implantação do zip copiam seu pacote para a pasta c:\home\data\SitePackages (Windows) ou /home/data/SitePackages (Linux) em vez de extrair os arquivos para c:\home\site\wwwroot (Windows) ou /home/site/wwwroot (Linux). Ele também cria o arquivo packagename.txt. Depois que o aplicativo de funções for reiniciado automaticamente, o pacote será montado para wwwroot como um sistema de arquivos somente leitura. Para obter mais informações sobre a implantação do zip, consulte Implantação de zip para o Azure Functions.

Observação

Quando ocorre uma implantação, uma reinicialização do aplicativo de funções é disparada. As execuções de função em execução durante a implantação são encerradas. Para obter informações sobre como escrever funções sem estado e defensivas, defina Gravar funções para serem sem estado .

Use WEBSITE_RUN_FROM_PACKAGE = URL

Esta seção fornece informações sobre como executar seu aplicativo de funções por meio de um pacote implantado em um ponto de extremidade de URL. Essa opção é a única com suporte para execução de um pacote hospedado no Linux com um plano de Consumo. Essa opção não é suportada no plano Flex Consumption.

Considerações sobre a implantação por meio de uma URL

  • Não defina WEBSITE_RUN_FROM_PACKAGE = <URL> em aplicativos no plano Consumo Flex. Não há suporte para essa opção.
  • Os aplicativos de funções em execução no Windows experimentam um pequeno aumento na hora de inicialização a frio quando o pacote de aplicativos é implantado em um ponto de extremidade de URL por meio de WEBSITE_RUN_FROM_PACKAGE = <URL>.
  • Ao especificar uma URL, você também precisa sincronizar gatilhos manualmente depois de publicar um pacote atualizado.
  • O runtime do Functions precisa ter permissões para acessar a URL do pacote.
  • Não implante seu pacote no Armazenamento de Blobs do Azure como um blob público. Em vez disso, use um contêiner privado com uma SAS (assinatura de acesso compartilhado) ou use uma identidade gerenciada para permitir que o runtime do Functions acesse o pacote.
  • Mantenha todas as URLs SAS usadas para implantação. Quando uma SAS expira, o pacote não pode mais ser implantado. Nesse caso, você deve gerar uma nova SAS e atualizar a configuração no aplicativo de funções. Você pode eliminar essa carga de gerenciamento usando uma identidade gerenciada.
  • Na execução em um plano Premium, lembre-se de eliminar a inicialização a frio.
  • Ao executar um plano dedicado, habilite Always On.
  • Você pode usar o Gerenciador de Armazenamento do Azure para carregar arquivos de pacote em contêineres de blob na sua conta de armazenamento.

Carregar um pacote manualmente no Armazenamento de Blobs

Para implantar um pacote compactado ao usar a opção URL, crie um pacote de implantação .zip compactado e carregue-o no destino. O procedimento a seguir é implantado em um contêiner no Armazenamento de Blobs:

  1. Crie um pacote .zip do projeto usando o utilitário de sua escolha.

  2. No portal do Microsoft Azure, pesquise pelo nome da conta de armazenamento ou navegue até ele na lista de contas de armazenamento.

  3. Na conta de armazenamento, selecione Contêineres em Armazenamento de dados.

  4. Selecione + Contêiner para criar um novo contêiner de Armazenamento de Blobs do Azure em sua conta.

  5. Na página Novo contêiner, forneça um Nome (por exemplo, implantações), garanta que o Nível de acesso anônimo seja Privado e selecione Criar.

  6. Selecione o contêiner criado, selecione Carregar, navegue até o local do arquivo .zip criado com seu projeto e selecione Carregar.

  7. Após a conclusão do upload, selecione o arquivo de blob carregado e copie a URL. Se você não estiver usando uma identidade gerenciada, talvez seja necessário gerar uma URL SAS.

  8. Pesquise pelo aplicativo de funções ou navegue até ele na página Aplicativo de funções.

  9. Em seu aplicativo de funções, expanda Configurações e selecione Variáveis de ambiente.

  10. Na guia Configurações de aplicativo, escolha + Adicionar.

  11. Insira o valor WEBSITE_RUN_FROM_PACKAGE em Nome e cole a URL do pacote no Armazenamento de Blobs do Azure para o Valor.

  12. Selecione Aplicar e selecione Aplicar e Confirmar para salvar a configuração e reiniciar o aplicativo de funções.

Agora você pode executar sua função no Azure para verificar se a implantação do arquivo zip do pacote de implantação foi bem-sucedida.

Buscar um pacote do Armazenamento de Blobs do Azure usando uma identidade gerenciada

Você pode configurar o Armazenamento de Blobs do Azure para autorizar solicitações com o Microsoft Entra ID. Essa configuração significa que, em vez de gerar uma chave SAS com uma expiração, você pode usar a identidade gerenciada do aplicativo. Por padrão, será usada a identidade do aplicativo atribuída pelo sistema. Se você quiser especificar uma identidade atribuída pelo usuário, defina a configuração de aplicativo WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_ID como a ID do recurso dessa identidade. A configuração também pode aceitar SystemAssigned como um valor, o que equivale a omitir a configuração.

Para permitir que o pacote seja buscado usando a identidade:

  1. Verifique se o blob está configurado para acesso privado.

  2. Conceda à identidade à função Leitor de Dados do Blob do Armazenamento com escopo no blob do pacote. Confira Atribuir uma função do Azure para acesso aos dados do blob para obter detalhes sobre como criar a atribuição de função.

  3. Defina a configuração de aplicativo WEBSITE_RUN_FROM_PACKAGE como a URL do blob do pacote. Essa URL geralmente é do formulário https://{storage-account-name}.blob.core.windows.net/{container-name}/{path-to-package} ou semelhante.