Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Hinweis
Die Ausführung aus einem Paket wird für Python-Apps nicht unterstützt. Wenn Sie eine ZIP-Datei Ihres Python-Codes bereitstellen, müssen Sie ein Flag festlegen, um die Azure-Buildautomatisierung zu aktivieren. Die Buildautomatisierung erstellt die virtuelle Python-Umgebung für Ihre App und installiert alle erforderlichen Anforderungen und Pakete. Weitere Informationen finden Sie unter Buildautomatisierung.
In Azure App Service können Sie Ihre Apps direkt aus einer ZIP-Paketdatei für die Bereitstellung ausführen. In diesem Artikel erfahren Sie, wie Sie diese Funktion in Ihrer App aktivieren.
Alle anderen Bereitstellungsmethoden im App-Dienst haben etwas gemeinsam: Ihre Entpackungsdateien werden in Ihrer App (oder /home/site/wwwroot für Linux-Apps) auf D:\home\site\wwwroot bereitgestellt. Da dieses Verzeichnis zur Laufzeit von Ihrer App verwendet wird, kann es vorkommen, dass die Bereitstellung aufgrund von Dateisperrkonflikten nicht erfolgreich ist und dass sich die App unvorhersehbar verhält, da einige der Dateien noch nicht aktualisiert wurden. Um diese Einstellung zu aktivieren, müssen Sie der WEBSITE_RUN_FROM_PACKAGE
Variablen keinen Wert zuweisen, oder Sie können sie vollständig entfernen.
Wenn Sie die App dagegen direkt aus einem ZIP-Paket ausführen, werden die Dateien im Paket nicht in das Verzeichnis wwwroot kopiert. Stattdessen wird das ZIP-Paket selbst direkt als schreibgeschütztes Wwwroot-Verzeichnis bereitgestellt. Um diese Einstellung zu aktivieren, legen Sie "=1" fest WEBSITE_RUN_FROM_PACKAGE
, oder geben Sie die URL der ZIP-Datei an. Die direkte Ausführung aus einem Paket hat mehrere Vorteile:
- Keine Dateisperrkonflikte zwischen Bereitstellung und Laufzeit.
- Gewährleistet, dass immer nur vollständig bereitgestellte Apps ausgeführt werden.
- Kann in einer Produktions-App (mit Neustart) bereitgestellt werden.
- Verbessert die Leistung von Azure Resource Manager-Bereitstellungen.
- Kann Kaltstartzeiten verringern, insbesondere für JavaScript-Funktionen mit großen npm-Paketstrukturen.
Hinweis
Derzeit werden nur ZIP-Paketdateien unterstützt.
Erstellen eines ZIP-Pakets für das Projekt
Wichtig
Wenn Sie das ZIP-Paket für die Bereitstellung erstellen, schließen Sie das Stammverzeichnis nicht ein. Fügen Sie nur die Dateien und Verzeichnisse in das Stammverzeichnis ein. Wenn Sie ein GitHub-Repository als ZIP-Datei herunterladen, können Sie diese Datei nicht unverändert in App Service bereitstellen. GitHub fügt geschachtelte Verzeichnisse auf oberster Ebene hinzu, was nicht mit App Service funktioniert.
Navigieren Sie in einem lokalen Terminalfenster zum Stammverzeichnis Ihres App-Projekts.
Dieses Verzeichnis sollte die Einstiegsdatei für Ihre Web-App enthalten, z. B. index.html
, index.php
und app.js
. Sie kann auch Paketverwaltungsdateien wie project.json
, composer.json
, package.json
, bower.json
und requirements.txt
enthalten.
Wenn Sie nicht möchten, dass Der App-Dienst die Bereitstellungsautomatisierung für Sie ausführt, führen Sie alle Buildaufgaben aus. Beispiel: npm
, , bower
, gulp
, composer
und pip
. Stellen Sie sicher, dass Sie über alle Dateien verfügen, die Sie zum Ausführen der App benötigen. Dieser Schritt ist erforderlich, wenn Sie das Paket direkt ausführen möchten.
Erstellen Sie ein ZIP-Archiv mit allen Elementen Ihres Projekts. Fügen Sie für dotnet
Projekte alles im Ausgabeverzeichnis des Befehls dotnet publish
hinzu, mit Ausnahme des Ausgabeverzeichnisses selbst. Geben Sie beispielsweise den folgenden Befehl in Ihr Terminal ein, um ein ZIP-Paket zu erstellen, das den Inhalt des aktuellen Verzeichnisses enthält:
# Bash
zip -r <file-name>.zip .
# PowerShell
Compress-Archive -Path * -DestinationPath <file-name>.zip
Ausführung über ZIP-Paket aktivieren
Die WEBSITE_RUN_FROM_PACKAGE
App-Einstellung ermöglicht das Ausführen aus einem ZIP-Paket. Führen Sie zum Festlegen dieser Einstellung den folgenden Befehl über die Azure-Befehlszeilenschnittstelle aus:
az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITE_RUN_FROM_PACKAGE="1"
WEBSITE_RUN_FROM_PACKAGE="1"
Mit dieser Option können Sie Ihre App aus einem ZIP-Paket, das lokal für Ihre App gespeichert ist, ausführen. Sie können auch von einem Remotepaket ausführen.
Ausführen des ZIP-Pakets
Die einfachste Möglichkeit zum Ausführen eines ZIP-Pakets in Ihrem App Service ist der Befehl azure CLI az webapp deployment source config-zip . Zum Beispiel:
az webapp deploy --resource-group <group-name> --name <app-name> --src-path <filename>.zip
Da die WEBSITE_RUN_FROM_PACKAGE
App-Einstellung festgelegt ist, extrahiert dieser Befehl den ZIP-Paketinhalt nicht in das Verzeichnis "D:\home\site\wwwroot " Ihrer App. Stattdessen wird die ZIP-Datei as-is in D:\home\data\SitePackages hochgeladen und ein packagename.txt im selben Verzeichnis erstellt, das den Namen des ZIP-Pakets enthält, das zur Laufzeit geladen werden soll. Wenn Sie Ihr ZIP-Paket auf eine andere Weise hochladen (z. B. FTP), müssen Sie das Verzeichnis "D:\home\data\SitePackages" und die packagename.txt Datei manuell erstellen.
Durch den Befehl wird die App außerdem neu gestartet. Da WEBSITE_RUN_FROM_PACKAGE
festgelegt ist, stellt App Service das hochgeladene Paket als schreibgeschütztes wwwroot-Verzeichnis bereit und führt die App direkt aus diesem bereitgestellten Verzeichnis aus.
Ausführen von einer externen URL aus
Sie können ein ZIP-Paket auch über eine externe URL ausführen, z. B. Azure Blob Storage. Sie können den Azure Storage-Explorer verwenden, um ZIP-Paketdateien in Ihr BLOB-Speicherkonto hochzuladen. Sie sollten einen privaten Speichercontainer mit einer Freigegebenen Zugriffssignatur (SHARED Access Signature, SAS) verwenden oder eine verwaltete Identität verwenden , um die App Service-Laufzeit für den sicheren Zugriff auf das ZIP-Paket zu ermöglichen.
Hinweis
Derzeit kann eine vorhandene App Service-Ressource, die ein lokales ZIP-Paket ausführt, nicht migriert werden, um aus einem Remote-ZIP-Paket ausgeführt zu werden. Sie müssen stattdessen eine neue App Service-Ressource erstellen, die für die Ausführung über eine externe URL konfiguriert ist.
Wenn Sie Ihre Datei in Blob Storage hochgeladen haben und über eine SAS-URL für die Datei verfügen, können Sie die App-Einstellung WEBSITE_RUN_FROM_PACKAGE
auf die URL festlegen. Stellen Sie sicher, dass die URL mit .zip
endet. Im folgenden Beispiel wird dazu die Azure-Befehlszeilenschnittstelle verwendet:
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"
Wenn Sie ein aktualisiertes Paket mit dem gleichen Namen in Blob Storage veröffentlichen, müssen Sie Ihre App neu starten, damit das aktualisierte Paket in App Service geladen wird.
Zugreifen auf ein Paket in Azure Blob Storage mithilfe einer verwalteten Identität
Sie können Azure Blob Storage so konfigurieren, dass Anforderungen mit der Microsoft Entra-ID autorisiert werden. Diese Konfiguration bedeutet, dass Sie anstatt einen SAS-Schlüssel mit einem Ablaufdatum zu generieren, stattdessen die verwaltete Identität der Anwendung verwenden können. Standardmäßig wird die systemseitig zugewiesene Identität der App verwendet. Wenn Sie eine vom Benutzer zugewiesene Identität angeben möchten, können Sie die App-Einstellung WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_ID
auf die Ressourcen-ID dieser Identität festlegen. Die Einstellung kann auch SystemAssigned
als Wert akzeptieren, was dem Weglassen der Einstellung entspricht.
So ermöglichen Sie das Abrufen des Pakets unter Verwendung der Identität:
Stellen Sie sicher, dass das Blob für den privaten Zugriff konfiguriert ist.
Erteilen Sie der Identität die Rolle Storage-Blobdatenleser mit dem Bereich für das Paketblob. Details zum Erstellen der Rollenzuweisung finden Sie unter Zuweisen einer Azure-Rolle für den Zugriff auf BLOB-Daten .
Legen Sie die Anwendungseinstellung
WEBSITE_RUN_FROM_PACKAGE
auf die Blob-URL des Pakets fest. Diese URL hat in der Regel die Formhttps://{storage-account-name}.blob.core.windows.net/{container-name}/{path-to-package}
oder eine ähnliche.Wenn Sie eine vom Benutzer zugewiesene Identität angeben möchten, können Sie die App-Einstellung
WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_ID
auf die Ressourcen-ID dieser Identität festlegen. Die Einstellung kann auch "SystemAssigned" als Wert akzeptieren, obwohl dies mit dem Weglassen der Einstellung identisch ist. Eine Ressourcen-ID ist eine Standarddarstellung für eine Ressource in Azure. Für eine vom Benutzer zugewiesene verwaltete Identität wird dies sein/subscriptions/subid/resourcegroups/rg-name/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity-name
. Die Ressourcen-ID einer vom Benutzer zugewiesenen verwalteten Identität kann in den Einstellungen ->Properties ->ID für die vom Benutzer zugewiesene verwaltete Identität abgerufen werden.
Bereitstellen von WebJob-Dateien beim Ausführen aus einem Paket
Es gibt zwei Möglichkeiten zum Bereitstellen von WebJob-Dateien , wenn Sie das Ausführen einer App über das Paket aktivieren:
- Bereitstellen im selben ZIP-Paket wie Ihre App: Schließen Sie sie wie gewohnt in
<project-root>\app_data\jobs\...
ein (entspricht dem im\site\wwwroot\app_data\jobs\...
WebJobs-Schnellstart angegebenen Bereitstellungspfad). - Gesondertes Bereitstellen vom ZIP-Paket Ihrer App: Da der übliche Bereitstellungspfad
\site\wwwroot\app_data\jobs\...
jetzt schreibgeschützt ist, können Sie dort keine WebJob-Dateien bereitstellen. Stellen Sie stattdessen WebJob-Dateien in\site\jobs\...
bereit, der nicht schreibgeschützt ist. Sowohl in\site\wwwroot\app_data\jobs\...
als auch in\site\jobs\...
bereitgestellte WebJobs funktionieren und werden ausgeführt.
Hinweis
Wenn \site\wwwroot
schreibgeschützt wird, schlagen Vorgänge wie die Erstellung von disable.job fehl.
Problembehandlung
- Beim direkten Ausführen aus einem Paket wird
wwwroot
schreibgeschützt. Wenn Ihre App versucht, Dateien in dieses Verzeichnis zu schreiben, tritt ein Fehler auf. - Das TAR- und das GZIP-Format werden nicht unterstützt.
- Die ZIP-Datei kann höchstens 1 GB groß sein.
- Dieses Feature ist nicht mit dem lokalen Cache kompatibel.
- Um die Kaltstartleistung zu verbessern, verwenden Sie die lokale ZIP-Option (
WEBSITE_RUN_FROM_PACKAGE
=1).