Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Nota
Executar a partir do pacote não é suportado para aplicações Python. Ao implementar um ficheiro ZIP do seu código Python, tem de definir um parâmetro para ativar a automação de compilação no Azure. A automação da construção irá criar o ambiente virtual Python para a sua aplicação e instalar todos os requisitos e pacotes necessários. Veja automação de construção para mais detalhes.
No Azure App Service, pode executar as suas aplicações diretamente a partir de um ficheiro ZIP de implantação. Este artigo mostra como ativar esta funcionalidade na sua aplicação.
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). Dado que o mesmo diretório é utilizado pela sua aplicação durante a execução, é possível que a implementação falhe devido a conflitos de bloqueio de ficheiros, e que a aplicação se comporte de forma imprevisível porque alguns dos ficheiros ainda não estão atualizados. Para habilitar essa configuração, não é necessário 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 de leitura única. Para habilitar essa configuração, defina WEBSITE_RUN_FROM_PACKAGE=1 ou forneça a URL do arquivo ZIP. Existem vários benefícios em executar diretamente a partir de um pacote:
- Elimina conflitos de bloqueio de ficheiros entre a implementação e o tempo de execução.
- Garante que apenas aplicações totalmente implementadas estão em execução a qualquer momento.
- Pode ser implementado numa aplicação de produção (com reinício).
- Melhora o desempenho das implementações do Azure Resource Manager.
- Pode reduzir os tempos de arranque a frio, particularmente para funções JavaScript com grandes árvores de pacotes npm.
Nota
Atualmente, apenas ficheiros de pacote ZIP são suportados.
Criar um pacote ZIP do projeto
Importante
Quando criar o pacote ZIP para implantação, não inclua o diretório raiz. Incluir apenas os ficheiros e diretórios na diretoria raiz. Se descarregar um repositório do GitHub como um ficheiro ZIP, não poderá implementar esse ficheiro tal como está no App Service. O GitHub adiciona diretórios aninhados no nível superior, o que não funciona com o App Service.
Numa janela de terminal local, navegue até ao diretório raiz do seu projeto de aplicação.
Este diretório deve conter o ficheiro de entrada da sua aplicação web, como index.html, index.php e app.js. Pode também conter ficheiros de gestão de pacotes como project.json, composer.json, package.json, bower.json e requirements.txt.
Se não quiser que o App Service execute a automação de implantação por si, execute todas as tarefas de construção. Por exemplo: npm, bower, gulp, composer, and pip. Certifique-se de ter todos os ficheiros de que necessita para executar a aplicação. Este passo é necessário se pretender executar o seu pacote diretamente.
Crie um arquivo ZIP com tudo no 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, introduza o seguinte comando no 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
Ativar a execução a partir do pacote ZIP
A WEBSITE_RUN_FROM_PACKAGE configuração do aplicativo permite a execução a partir de um pacote ZIP. Para definir isto, execute o seguinte comando com o Azure CLI.
az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITE_RUN_FROM_PACKAGE="1"
WEBSITE_RUN_FROM_PACKAGE="1" permite que você execute seu aplicativo de um pacote ZIP local para seu aplicativo. Também pode executar a partir 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 o comando Azure CLI az webapp deployment source config-zip . 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 ficheiro ZIP tal como está para D:\home\data\SitePackages e cria um packagename.txt no mesmo diretório, que contém o nome do pacote ZIP a carregar durante a execução. Se carregar o seu pacote ZIP de uma maneira diferente (como FTP), precisa criar o diretório D:\home\data\SitePackages e o ficheiro packagename.txt manualmente.
O comando também reinicia a aplicação. Uma vez que WEBSITE_RUN_FROM_PACKAGE está definido, o App Service monta o pacote carregado como o diretório wwwroot de só leitura e executa a aplicação diretamente a partir desse diretório montado.
Executar a partir de URL externo em vez disso
Você também pode executar um pacote ZIP a partir de uma URL externa, como o Armazenamento de Blobs do Azure. Você pode usar o Gerenciador de Armazenamento do Azure para carregar arquivos de pacote ZIP em sua conta de armazenamento de Blob. Você deve usar um contêiner de armazenamento privado com uma Assinatura de Acesso Compartilhado (SAS) ou usar uma identidade gerenciada para habilitar o tempo de execução do Serviço de Aplicativo para acessar o pacote ZIP com segurança.
Nota
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. Terá de criar um novo recurso do App Service configurado para funcionar a partir de uma URL externa.
Assim que carregar o seu ficheiro no armazenamento Blob e tiver um URL SAS para o ficheiro, defina a configuração da aplicação WEBSITE_RUN_FROM_PACKAGE para o URL. Certifique-se de que o URL termina com .zip. O exemplo a seguir faz isso usando Azure CLI:
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 publicar um pacote atualizado com o mesmo nome no armazenamento Blob, precisa reiniciar a sua aplicação para que o pacote atualizado seja carregado no App Service.
Aceda a um pacote no Azure Blob Storage utilizando uma identidade gerida
Pode configurar o Azure Blob Storage para autorizar solicitações com o Microsoft Entra ID. Esta configuração significa que, em vez de gerar uma chave SAS com uma data de expiração, pode-se, em vez disso, depender da identidade gerida da aplicação. Por predefinição, é utilizada a identidade atribuída pelo sistema à aplicação. Se desejar especificar uma identidade atribuída pelo utilizador, pode definir a definição da aplicação WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_ID para o ID de recurso dessa identidade. A configuração também pode aceitar SystemAssigned como valor, o que é equivalente a omitir a configuração.
Para permitir que o pacote seja buscado usando a identidade:
Certifique-se de que a 'blob' está configurada para acesso privado.
Atribua à identidade a função Storage Blob Data Reader com âmbito sobre o blob do pacote. Consulte Atribuir uma função do Azure para acesso aos dados do blob para obter detalhes sobre como criar a atribuição de funções.
Defina a configuração da aplicação
WEBSITE_RUN_FROM_PACKAGEpara o URL do blob do pacote. Este URL é geralmente da formahttps://{storage-account-name}.blob.core.windows.net/{container-name}/{path-to-package}ou similar.Se desejar especificar uma identidade atribuída pelo utilizador, pode definir a definição da aplicação
WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_IDpara o ID de 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 de um recurso no Azure. Para uma identidade gerida atribuída pelo utilizador, isso vai ser/subscriptions/subid/resourcegroups/rg-name/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity-name. O ID de recurso de uma identidade gerenciada atribuída pelo usuário pode ser obtido em Configurações ->Propriedades ->ID para a identidade gerenciada atribuída ao usuário.
Implantar ficheiros WebJob ao executar a partir de pacote
Existem duas maneiras de implementar ficheiros WebJob quando ativar a execução de uma app a partir de um pacote:
- Deslocalize no mesmo pacote ZIP da sua aplicação: inclua-os como faria normalmente em
<project-root>\app_data\jobs\...(que é mapeado para o caminho de implementação\site\wwwroot\app_data\jobs\...conforme especificado no início rápido do WebJobs). - Implantar separadamente do pacote ZIP da sua aplicação: Como o caminho usual de implantação
\site\wwwroot\app_data\jobs\...agora está em modo só de leitura, não podes implantar arquivos WebJob lá. Em vez disso, implante os arquivos do WebJob em\site\jobs\..., que não é somente leitura. WebJobs implantados em\site\wwwroot\app_data\jobs\...e\site\jobs\...ambos funcionam.
Nota
Quando \site\wwwroot se torna somente leitura, operações como a criação do disable.job falharão.
Resolução de problemas
- Executar diretamente a partir de um pacote torna
wwwrootapenas leitura. A sua aplicação receberá um erro se tentar escrever ficheiros neste diretório. - Os formatos TAR e GZIP não são suportados.
- O ficheiro ZIP pode ter no máximo 1GB.
- Esta funcionalidade não é compatível com cache local.
- Para melhorar o desempenho de arranque a frio, utilize a opção Zip local (
WEBSITE_RUN_FROM_PACKAGE=1).