Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Observação
Não há suporte para a execução por meio do pacote em aplicativos Python. Ao implantar um arquivo ZIP de seu código Python, você precisa definir um sinalizador para habilitar a automação de build do Azure. A automação de build criará o ambiente virtual do Python para seu aplicativo e instalará todos os requisitos e pacotes necessários. Veja automação de construção para mais detalhes.
No Serviço de Aplicativo do Azure, você pode executar aplicativos diretamente de um arquivo de pacote zip de implantação. Este artigo mostra como habilitar essa funcionalidade em seu aplicativo.
Todos os outros métodos de implantação no Serviço de Aplicativo têm algo em comum: seus arquivos descompactados são implantados em D:\home\site\wwwroot em seu aplicativo (ou /home/site/wwwroot para aplicativos Linux). Como o mesmo diretório é usado pelo aplicativo no runtime, é possível que a implantação falhe devido a conflitos de bloqueio de arquivo e que o aplicativo se comporte de maneira inesperada porque alguns dos arquivos ainda não foram atualizados. Para habilitar essa configuração, você não precisa atribuir nenhum valor à WEBSITE_RUN_FROM_PACKAGE
variável ou removê-la completamente.
Por outro lado, quando você executa diretamente de um pacote ZIP, os arquivos no pacote não são copiados para o diretório wwwroot. Em vez disso, o próprio pacote ZIP é montado diretamente como o diretório wwwroot somente leitura. Para habilitar essa configuração, defina WEBSITE_RUN_FROM_PACKAGE
=1 ou forneça a URL do arquivo ZIP. Há vários benefícios em executar um pacote diretamente:
- Elimina conflitos de bloqueio de arquivo entre implantação e runtime.
- Garante que somente aplicativos totalmente implantados estejam em execução em qualquer momento.
- Pode ser implantado em um aplicativo de produção (com reinicialização).
- Melhora o desempenho das implantações do Azure Resource Manager.
- Pode reduzir os tempos de inicialização a frio, particularmente para as funções de JavaScript com árvores de pacote npm grandes.
Observação
No momento, apenas arquivos de pacote ZIP têm suporte.
Criar um pacote ZIP do projeto
Importante
Ao criar o pacote ZIP para implantação, não inclua o diretório raiz. Inclua apenas os arquivos e diretórios no diretório raiz. Se você baixar um repositório do GitHub como um arquivo ZIP, não poderá implantar esse arquivo diretamente no App Service. O GitHub adiciona diretórios aninhados no nível superior, o que não funciona com o Serviço de Aplicativo.
Em uma janela do terminal local, navegue até o diretório raiz do projeto do aplicativo.
Esse diretório deve conter o arquivo de entrada para seu aplicativo Web, como index.html
, index.php
e app.js
. Ele também pode conter arquivos de gerenciamento de pacotes, comoproject.json
, composer.json
, package.json
e bower.json
requirements.txt
.
Se você não quiser que o Serviço de Aplicativo execute a automação de implantação para você, execute todas as tarefas de build. Por exemplo: npm
, , bower
, gulp
, composer
e pip
. Verifique se você tem todos os arquivos necessários para executar o aplicativo. Esta etapa será necessária se desejar executar o pacote diretamente.
Criar um arquivo zip de tudo em seu projeto. Para projetos dotnet
, adicione tudo no diretório de saída do comando dotnet publish
, excluindo o próprio diretório de saída. Por exemplo, insira o seguinte comando em seu terminal para criar um pacote ZIP que inclua o conteúdo do diretório atual:
# Bash
zip -r <file-name>.zip .
# PowerShell
Compress-Archive -Path * -DestinationPath <file-name>.zip
Habilitar a execução do pacote ZIP
A WEBSITE_RUN_FROM_PACKAGE
configuração do aplicativo permite a execução de um pacote ZIP. Para configurá-la, execute o seguinte comando com a CLI do Azure.
az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITE_RUN_FROM_PACKAGE="1"
WEBSITE_RUN_FROM_PACKAGE="1"
permite executar seu aplicativo a partir de um pacote ZIP localizado no mesmo diretório do aplicativo. Você também pode executar por meio de um pacote remoto.
Executar o pacote ZIP
A maneira mais fácil de executar um pacote ZIP em seu Serviço de Aplicativo é com a CLI do Azure az webapp deployment source config-zip command. Por exemplo:
az webapp deploy --resource-group <group-name> --name <app-name> --src-path <filename>.zip
Como a configuração do WEBSITE_RUN_FROM_PACKAGE
aplicativo está definida, esse comando não extrai o conteúdo do pacote ZIP para o diretório D:\home\site\wwwroot do seu aplicativo. Em vez disso, ele carrega o arquivo ZIP como está em D:\home\data\SitePackages e cria o arquivo packagename.txt no mesmo diretório, que contém o nome do pacote ZIP a ser carregado no runtime. Se você carregar o pacote ZIP de outra maneira (como FTP), precisará criar manualmente o diretório D:\home\data\SitePackages e o arquivo packagename.txt.
O comando também reinicia o aplicativo. Como WEBSITE_RUN_FROM_PACKAGE
está definido, o Serviço de Aplicativo monta o pacote carregado como o diretório wwwroot somente leitura e executa o aplicativo diretamente no diretório montado.
Executar por meio de um URL externa
Você também pode executar um pacote ZIP de uma URL externa, como o Blob Storage do Azure. Você pode usar o Gerenciador de Armazenamento do Azure para carregar arquivos de pacote ZIP em sua conta de armazenamento de Blobs. Você deve usar um contêiner de armazenamento privado com uma SAS (Assinatura de Acesso Compartilhado) ou usar uma identidade gerenciada para habilitar o runtime do Serviço de Aplicativo para acessar o pacote ZIP com segurança.
Observação
Atualmente, um recurso existente do Serviço de Aplicativo que executa um pacote ZIP local não pode ser migrado para ser executado a partir de um pacote ZIP remoto. Você precisará criar um novo recurso do Serviço de Aplicativo configurado para ser executado em uma URL externa.
Depois de carregar o arquivo no armazenamento de blobs e conseguir o URL de SAS, defina a configuração WEBSITE_RUN_FROM_PACKAGE
do aplicativo como o URL. Verifique se a URL termina com .zip
. Veja como fazer isso com a CLI do Azure:
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings WEBSITE_RUN_FROM_PACKAGE="https://myblobstorage.blob.core.windows.net/content/SampleCoreMVCApp.zip?st=2018-02-13T09%3A48%3A00Z&se=2044-06-14T09%3A48%3A00Z&sp=rl&sv=2017-04-17&sr=b&sig=bNrVrEFzRHQB17GFJ7boEanetyJ9DGwBSV8OM3Mdh%2FM%3D"
Se você publicar um pacote atualizado com o mesmo nome no armazenamento de blobs, será necessário reiniciar o aplicativo para que o pacote atualizado seja carregado no Serviço de Aplicativo.
Acessar um pacote no 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:
Verifique se o blob está configurado para acesso privado.
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.
Defina a configuração de aplicativo
WEBSITE_RUN_FROM_PACKAGE
como o URL do blob do pacote. Essa URL geralmente é do tipohttps://{storage-account-name}.blob.core.windows.net/{container-name}/{path-to-package}
ou semelhante.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, embora isso seja o mesmo que omitir a configuração completamente. Uma ID de recurso é uma representação padrão para um recurso no Azure. Para uma identidade gerenciada atribuída pelo usuário, isso será/subscriptions/subid/resourcegroups/rg-name/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity-name
. A ID de recurso de uma identidade gerenciada atribuída pelo usuário pode ser obtida no Settings ->Properties ->ID para a identidade gerenciada atribuída pelo usuário.
Implantar arquivos de WebJob ao executar do pacote
Há duas maneiras de implantar arquivos de WebJob ao habilitar a execução de um aplicativo do pacote:
- Implantar no mesmo pacote ZIP que seu aplicativo: inclua-os como você normalmente faria no
<project-root>\app_data\jobs\...
(que mapeia para o caminho de implantação\site\wwwroot\app_data\jobs\...
conforme especificado no Guia de início rápido do WebJobs). - Implante de forma separada do pacote ZIP do seu aplicativo: como o caminho de implantação
\site\wwwroot\app_data\jobs\...
usual agora é somente leitura, você não pode implantar arquivos de WebJob nele. Em vez disso, implante arquivos de WebJob em\site\jobs\...
, que não é somente leitura. WebJobs implantados em\site\wwwroot\app_data\jobs\...
e\site\jobs\...
são executados.
Observação
Quando \site\wwwroot
se torna somente leitura, operações como a criação de disable.job falharão.
Solução de problemas
- Executar diretamente de um pacote torna
wwwroot
em modo somente leitura. Ocorrerá um erro se o aplicativo tentar gravar arquivos nesse diretório. - Não há suporte para formatos TAR e GZIP.
- O arquivo ZIP pode ter no máximo 1 GB
- Este recurso não é compatível com o cache local.
- Para melhorar o desempenho da inicialização a frio, use a opção de zip local (
WEBSITE_RUN_FROM_PACKAGE
= 1).