Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Nota
O pacote Run from não é suportado para aplicações Python. Ao implementar um ficheiro ZIP do seu código Python, precisa de definir um flag para ativar a automação de compilações do Azure. A automação de compilações irá criar o ambiente virtual em Python para a sua aplicação e instalar quaisquer requisitos e pacotes necessários. Veja automação de construção para mais detalhes.
O pacote Run from também não é suportado para aplicações Java no Serviço de Aplicações do Azure. Runtimes Java incorporados (Java SE, Tomcat e JBoss EAP) requerem acesso de escrita ao diretório da aplicação no arranque, enquanto o "Run from Package" monta o conteúdo da aplicação como um sistema de ficheiros de leitura única.
Em Serviço de Aplicações do Azure, podes executar as tuas aplicações diretamente a partir de um ficheiro de pacote ZIP de implementação. Este artigo mostra como ativar esta funcionalidade na sua aplicação.
Todos os outros métodos de implementação no App Service têm algo em comum, que é que os teus ficheiros de descompactação são implementados em D:\home\site\wwwroot na tua aplicação (ou /home/site/wwwroot para aplicações Linux). Como o mesmo diretório é usado pela tua aplicação em tempo de 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 ficheiros ainda não foram atualizados. Para ativar esta definição, não precisas de atribuir qualquer valor à WEBSITE_RUN_FROM_PACKAGE variável, ou podes removê-la completamente.
Em contraste, quando executas diretamente a partir de um pacote ZIP, os ficheiros do 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 descarregares um repositório GitHub como ficheiro ZIP, não podes implementar esse ficheiro as-is para o App Service. O GitHub adiciona diretórios aninhados no nível hierárquico 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 o definir, execute o seguinte comando com 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 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 forma mais fácil de executar um pacote ZIP no seu App Service é com o comando CLI da Azure 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, carrega o ficheiro ZIP as-is para D:\home\data\SitePackages e cria um packagename.txt no mesmo diretório que contém o nome do pacote ZIP para carregar em tempo de 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
Também pode executar um pacote ZIP a partir de uma URL externa, como o Armazenamento de Blobs do Azure. Pode usar o Explorador de Armazenamento do Azure para carregar ficheiros de pacote ZIP para a sua conta de armazenamento 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 de App Service existente que executa um pacote ZIP local não pode ser migrado para correr a partir de um pacote ZIP remoto. Terá de criar um novo recurso de Serviço de Aplicações configurado para correr 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 seguinte faz isso usando 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 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.
Aceder a um pacote no Armazenamento de Blobs do Azure usando uma identidade gerida
Pode configurar Armazenamento de Blobs do Azure para autorizar pedidos com 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 a dados de blobs para detalhes sobre a criação da 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 definição também pode aceitar SystemAssigned como valor, embora isto seja o mesmo que omitir a definição por completo. Um ID de recurso é uma representação padrão para um recurso no Azure. Para uma identidade gerida atribuída pelo utilizador, isso será/subscriptions/subid/resourcegroups/rg-name/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity-name. O ID de recurso de uma identidade gerida atribuída a um utilizador pode ser obtido em Definições>Propriedades>ID para a identidade gerida atribuída pelo utilizador.
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:
-
Implantar no mesmo pacote ZIP da sua aplicação: Inclua-os como faria normalmente em
<project-root>\app_data\jobs\...(que corresponde ao caminho de implementação\site\wwwroot\app_data\jobs\...conforme especificado no início rápido do WebJobs). -
Implemente separadamente do pacote ZIP da sua aplicação: Como o caminho
\site\wwwroot\app_data\jobs\...habitual de implementação é agora só leitura, não pode implementar ficheiros WebJob aí. Em vez disso, implemente ficheiros WebJob para\site\jobs\..., que não é só de 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 1 GB.
- 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).