Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Nota
L'esecuzione dal pacchetto non è supportata per le app Python. Quando si distribuisce un file ZIP del codice Python, è necessario impostare un flag per abilitare l'automazione della generazione di Azure. L'automazione della compilazione creerà l'ambiente virtuale Python per l'app e installerà tutti i requisiti e i pacchetti necessari. Per altri dettagli, vedere Automazione della compilazione.
In Servizio app di Azure è possibile eseguire le app direttamente da un file del pacchetto ZIP di distribuzione. Questo articolo illustra come abilitare questa funzionalità nell'app.
Tutti gli altri metodi di distribuzione nel servizio app hanno qualcosa in comune: i file decomprimi vengono distribuiti in D:\home\site\wwwroot nell'app (o /home/site/wwwroot per le app Linux). Poiché la stessa directory viene usata dall'app in fase di esecuzione, è possibile che la distribuzione non riesca a causa di conflitti di blocco dei file e che l'app si comporti in modo imprevedibile perché alcuni file non sono ancora stati aggiornati. Per abilitare questa impostazione, non è necessario assegnare alcun valore alla WEBSITE_RUN_FROM_PACKAGE
variabile o rimuoverlo completamente.
Al contrario, quando si esegue direttamente da un pacchetto ZIP, i file nel pacchetto non vengono copiati nella directory wwwroot . Il pacchetto ZIP viene invece montato direttamente come directory wwwroot di sola lettura. Per abilitare questa impostazione, impostare WEBSITE_RUN_FROM_PACKAGE
=1 o specificare l'URL del file ZIP. Esistono diversi vantaggi nell'esecuzione diretta da un pacchetto:
- Elimina i conflitti di blocco dei file tra distribuzione e runtime.
- Assicura che in un determinato momento siano in esecuzione solo app completamente distribuite.
- Possono essere distribuiti in un'app di produzione (con il riavvio).
- Migliora le prestazioni delle distribuzioni Azure Resource Manager.
- Si possono ridurre i tempi di avvio a freddo, in particolare per le funzioni di JavaScript con grandi alberi del pacchetto npm.
Nota
Attualmente sono supportati solo i file di pacchetto ZIP.
Creare un pacchetto ZIP del progetto
Importante
Quando si crea il pacchetto ZIP per la distribuzione, non includere la directory radice. Includere solo i file e le directory nella directory principale. Se si scarica un repository GitHub come file ZIP, non è possibile distribuire il file nella sua forma attuale su Servizio App. GitHub aggiunge directory annidate al livello superiore, il che non funziona con il servizio app.
In una finestra terminale locale, passare alla directory principale del progetto dell'app.
Questa directory deve contenere il file di immissione nell'app Web, ad esempio index.html
, index.php
e app.js
. Può anche contenere file di gestione dei pacchetti come project.json
, composer.json
package.json
, bower.json
, e requirements.txt
.
Se non si vuole che il servizio app esegua automaticamente l'automazione della distribuzione, eseguire tutte le attività di compilazione. Ad esempio: npm
, bower
, gulp
, composer
e pip
. Assicurarsi di avere tutti i file necessari per eseguire l'app. Questo passaggio è obbligatorio se si desidera eseguire direttamente il pacchetto.
Creare un archivio ZIP per tutti gli elementi del progetto. Per i progetti dotnet
, aggiungere tutti gli elementi nella directory di output del comando dotnet publish
, escludendo la directory di output stessa. Ad esempio, immettere il comando seguente nel terminale per creare un pacchetto ZIP che includa il contenuto della directory corrente:
# Bash
zip -r <file-name>.zip .
# PowerShell
Compress-Archive -Path * -DestinationPath <file-name>.zip
Abilitare l'esecuzione dal pacchetto ZIP
L'impostazione dell'app WEBSITE_RUN_FROM_PACKAGE
abilita l'esecuzione da un pacchetto ZIP. Per impostarla, eseguire il comando seguente nell'interfaccia della riga di comando di Azure.
az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITE_RUN_FROM_PACKAGE="1"
WEBSITE_RUN_FROM_PACKAGE="1"
consente di eseguire l'app da un pacchetto ZIP locale all'app. È anche possibile eseguire l'app da un pacchetto remoto.
Eseguire il pacchetto ZIP
Il modo più semplice per eseguire un pacchetto ZIP nel servizio app consiste nel comando az webapp deployment source config-zip dell'interfaccia della riga di comando di Azure. Ad esempio:
az webapp deploy --resource-group <group-name> --name <app-name> --src-path <filename>.zip
Poiché l'impostazione dell'app WEBSITE_RUN_FROM_PACKAGE
è impostata, questo comando non estrae il contenuto del pacchetto ZIP nella directory D:\home\site\wwwroot dell'app. Carica invece il file ZIP così com'è in D:\home\data\SitePackages e crea un file packagename.txt nella stessa directory, che contiene il nome del pacchetto ZIP da caricare in fase di esecuzione. Se si carica il pacchetto ZIP in modo diverso, ad esempio con FTP, è necessario creare manualmente la directory D:\home\data\SitePackages e il file packagename.txt.
Il comando riavvia anche l'app. Poiché è impostato WEBSITE_RUN_FROM_PACKAGE
, il Servizio app monta il pacchetto caricato come directory wwwroot di sola lettura ed esegue l'app direttamente da tale directory montata.
Eseguire invece dall'URL esterno
È anche possibile eseguire un pacchetto ZIP da un URL esterno, ad esempio Archiviazione BLOB di Azure. È possibile usare Azure Storage Explorer per caricare i file di pacchetto ZIP nell'account di archiviazione BLOB. È consigliabile usare un contenitore di archiviazione privato con una firma di accesso condiviso ousare un'identità gestita per consentire al runtime del servizio app di accedere in modo sicuro al pacchetto ZIP.
Nota
Attualmente, non è possibile eseguire la migrazione di una risorsa del servizio app esistente che esegue un pacchetto ZIP locale per l'esecuzione da un pacchetto ZIP remoto. Sarà necessario creare una nuova risorsa del Servizio app configurata per l'esecuzione da un URL esterno.
Dopo aver caricato il file nell'archiviazione BLOB e ottenuto un URL di firma di accesso condiviso per il file, impostare l'impostazione dell'app WEBSITE_RUN_FROM_PACKAGE
sull'URL. Assicurarsi che l'URL termini con .zip
. L'esempio seguente esegue questa operazione usando l'interfaccia della riga di comando di 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 si pubblica un pacchetto aggiornato con lo stesso nome nell'archiviazione BLOB, è necessario riavviare l'app in modo che il pacchetto aggiornato venga caricato nel Servizio app.
Accedere a un pacchetto in Archiviazione BLOB di Azure usando un'identità gestita
È possibile configurare Archiviazione BLOB di Azure per autorizzare le richieste con Microsoft Entra ID. Questa configurazione implica che, anziché generare una chiave SAS con una scadenza, è possibile fare affidamento sull'identità gestita dell'applicazione. Per impostazione predefinita, viene usata l'identità assegnata dal sistema dell'app. Se si vuole specificare un'identità assegnata dall'utente, è possibile impostare l'impostazione dell'app WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_ID
sull'ID risorsa di tale identità. L'impostazione può anche accettare SystemAssigned
come valore, che equivale a omettere l'impostazione.
Per abilitare lo scaricamento del pacchetto utilizzando l'identità:
Assicurarsi che il BLOB sia configurato per l'accesso privato.
Concedere all'identità il ruolo Lettore di dati BLOB di archiviazione con ambito che includa il BLOB del pacchetto. Per informazioni dettagliate sulla creazione dell'assegnazione di ruolo, vedere Assegnare un ruolo di Azure per l'accesso ai dati BLOB.
Impostare l'impostazione dell'applicazione
WEBSITE_RUN_FROM_PACKAGE
sull'URL BLOB del pacchetto. Questo URL è in genere in formatohttps://{storage-account-name}.blob.core.windows.net/{container-name}/{path-to-package}
o simile.Se si vuole specificare un'identità assegnata dall'utente, è possibile impostare l'impostazione dell'app
WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_ID
sull'ID risorsa di tale identità. L'impostazione può anche accettare "SystemAssigned" come valore, anche se equivale a omettere completamente l'impostazione. Un ID risorsa è una rappresentazione standard per una risorsa in Azure. Per un'identità gestita assegnata all'utente, sarà/subscriptions/subid/resourcegroups/rg-name/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity-name
. L'ID risorsa di un'identità gestita assegnata dall'utente può essere ottenuto in Impostazioni ->Proprietà ->ID per l'identità gestita assegnata dall'utente.
Distribuire file WebJob durante l'esecuzione dal pacchetto
Esistono due modi per distribuire i file WebJob quando si abilita l'esecuzione di un'app dal pacchetto:
- Distribuire nello stesso pacchetto ZIP dell'app: includerli come si farebbe normalmente in
<project-root>\app_data\jobs\...
(che esegue il mapping al percorso di distribuzione\site\wwwroot\app_data\jobs\...
come specificato nella guida introduttiva di WebJobs). - Distribuire separatamente dal pacchetto ZIP dell'app: poiché il percorso di distribuzione consueto
\site\wwwroot\app_data\jobs\...
è ora di sola lettura, non è possibile distribuire i file WebJob in tale posizione. Distribuire invece i file WebJob in\site\jobs\...
, che non è di sola lettura. I WebJobs distribuiti in\site\wwwroot\app_data\jobs\...
e\site\jobs\...
sono entrambi in esecuzione.
Nota
Quando \site\wwwroot
diventa di sola lettura, le operazioni come la creazione del file disable.job avranno esito negativo.
Risoluzione dei problemi
- L'esecuzione diretta da un pacchetto rende
wwwroot
di sola lettura. L'app riceverà un errore se tenta di scrivere file in questa directory. - I formati TAR e GZIP non sono supportati.
- Il file ZIP può essere al massimo di 1 GB
- Questa funzionalità non è compatibile con la cache locale.
- Per migliorare le prestazioni di avvio a freddo, usare l'opzione Zip locale (
WEBSITE_RUN_FROM_PACKAGE
=1).