Ausführen Ihrer Funktionen aus einer Paketdatei in Azure
In Azure können Sie Ihre Functions direkt aus der Bereitstellungspaketdatei in Ihrer Funktions-App ausführen. Die andere Option ist die Bereitstellung Ihrer Dateien im Verzeichnis c:\home\site\wwwroot
(Windows) oder /home/site/wwwroot
(Linux) Ihrer Funktions-App.
Dieser Artikel beschreibt die Vorteile einer Ausführung Ihrer Functions aus einem Paket. Außerdem wir erläutert, wie Sie diese Funktionalität in Ihrer Funktions-App aktivieren.
Vorteile der Ausführung aus einer Paketdatei
Es gibt mehrere Vorteile bei der Ausführung von Funktionen aus einer Paketdatei:
- Reduziert das Risiko von Sperrungen beim Kopieren von Dateien.
- Kann in einer Produktions-App (mit Neustart) bereitgestellt werden.
- Überprüft die Dateien, die in Ihrer App ausgeführt werden
- Verbessert die Leistung von Azure Resource Manager-Bereitstellungen.
- Verringert Kaltstartzeiten, insbesondere für JavaScript-Funktionen mit großen npm-Paketstrukturen
Weitere Informationen dazu finden Sie in dieser Ankündigung.
Aktivieren von Funktionen für die Ausführung aus einem Paket
Funktions-Apps im Hostingplan Flex-Verbrauch werden standardmäßig aus einem Paket ausgeführt. Es ist keine spezielle Konfiguration erforderlich.
Damit Ihre Funktions-App in den Hostingplänen Verbrauch, Elastic Premium und Dedicated (App Service) aus einem Paket ausgeführt werden kann, fügen Sie Ihrer Funktions-App die App-Einstellung WEBSITE_RUN_FROM_PACKAGE
hinzu. Die App-Einstellung WEBSITE_RUN_FROM_PACKAGE
kann einen der folgenden Werte aufweisen:
Wert | BESCHREIBUNG |
---|---|
1 |
Gibt an, dass die Funktions-App aus einer lokalen Paketdatei ausgeführt wird, die im Ordner c:\home\data\SitePackages (Windows) oder /home/data/SitePackages (Linux) Ihrer Funktions-App bereitgestellt wird. |
<URL> |
Legt eine URL fest, die den Remotespeicherort der spezifischen Paketdatei angibt, die Sie ausführen möchten. Erforderlich für Funktions-Apps, die unter Linux in einem Verbrauchsplan ausgeführt werden. |
In der folgenden Tabelle werden die empfohlenen WEBSITE_RUN_FROM_PACKAGE
-Werte für die Bereitstellung unter einem bestimmten Betriebssystem und Hostingplan angegeben:
Hostingplan | Windows | Linux |
---|---|---|
Verbrauch | 1 wird dringend empfohlen. |
Nur <URL> wird unterstützt. |
Premium | 1 wird empfohlen. |
1 wird empfohlen. |
Dediziert | 1 wird empfohlen. |
1 wird empfohlen. |
Allgemeine Hinweise
- Fügen Sie die App-Einstellung
WEBSITE_RUN_FROM_PACKAGE
nicht Apps im Flex-Verbrauchsplan hinzu. - Die Paketdatei muss als ZIP-Datei formatiert sein. Das TAR- und das GZIP-Format werden nicht unterstützt.
- ZIP-Bereitstellung wird empfohlen.
- Beim Bereitstellen Ihrer Funktions-App unter Windows sollten Sie
WEBSITE_RUN_FROM_PACKAGE
auf1
festlegen und per ZIP-Bereitstellung veröffentlichen. - Wenn Sie eine Funktions-App aus ein Paket ausführen, ist der
wwwroot
-Ordner schreibgeschützt, und es tritt ein Fehler auf, wenn Sie Dateien in dieses Verzeichnis schreiben. Dateien sind auch im Azure-Portal schreibgeschützt. - Die maximale Größe für eine Bereitstellungspaketdatei beträgt 1 GB.
- Sie können den lokalen Cache nicht verwenden, wenn die Ausführung über ein Bereitstellungspaket erfolgt.
- Wenn Ihr Projekt einen Remotebuild verwenden muss, verwenden Sie nicht die App-Einstellung
WEBSITE_RUN_FROM_PACKAGE
. Fügen Sie stattdessen die App-EinstellungSCM_DO_BUILD_DURING_DEPLOYMENT=true
für die Bereitstellungsanpassung hinzu. Fügen Sie für Linux auch die EinstellungENABLE_ORYX_BUILD=true
hinzu. Weitere Informationen finden Sie unter Remotebuild.
Hinweis
Die WEBSITE_RUN_FROM_PACKAGE
-App-Einstellung funktioniert nicht mit MSDeploy, wie beschrieben in MSDeploy im Vergleich zu ZipDeploy. Während der Bereitstellung wird eine Fehlermeldung angezeigt, z. B. ARM-MSDeploy Deploy Failed
. Um diesen Fehler zu beheben, ändern Sie /MSDeploy
in /ZipDeploy
.
Hinzufügen der Einstellung WEBSITE_RUN_FROM_PACKAGE
Es gibt mehrere Möglichkeiten zum Hinzufügen, Aktualisieren und Löschen von Funktionen-App-Einstellungen:
Zur Durchführung von Änderungen an den Funktions-App-Einstellungen muss Ihre Funktions-App neu gestartet werden.
Erstellen des ZIP-Archivs
Das ZIP-Archiv, das Sie bereitstellen, muss alle Dateien enthalten, die für die Ausführung Ihrer Funktions-App erforderlich sind. Sie können manuell ein ZIP-Archiv mit dem Inhalt eines Funktionsprojektordners erstellen, indem Sie eine integrierte ZIP-Komprimierungsfunktion oder Tools von Drittanbietern verwenden.
Das Archiv muss die host.json-Datei im Stammverzeichnis des extrahierten Ordners enthalten. Der ausgewählte Sprachstapel für die Funktions-App führt zu zusätzlichen Anforderungen:
- .NET (isoliertes Workermodell)
- .NET (In-Process-Modell)
- Java
- JavaScript
- TypeScript
- PowerShell
- Python
Wichtig
Für Sprachen, die die kompilierte Ausgabe für die Bereitstellung generieren, müssen Sie den Inhalt des Ausgabeordners komprimieren, den Sie veröffentlichen möchten, und nicht den gesamten Projektordner. Wenn Functions den Inhalt des ZIP-Archivs extrahiert, muss die host.json
-Datei im Stammverzeichnis des Pakets vorhanden sein.
Verwenden von WEBSITE_RUN_FROM_PACKAGE = 1
Dieser Abschnitt enthält Informationen zum Ausführen Ihrer Funktions-App aus einer lokalen Paketdatei.
Überlegungen zur Bereitstellung aus einem sitebasierten Paket
- Die Verwendung eines lokalen Pakets ist die empfohlene Option für die Ausführung aus dem Bereitstellungspaket, es sei denn, sie wird unter Linux gehostet in einem Verbrauchsplan ausgeführt.
- ZIP-Bereitstellung ist die empfohlene Methode zum Hochladen eines Bereitstellungspakets auf Ihre Site.
- Wenn Sie keine ZIP-Bereitstellung verwenden, stellen Sie sicher, dass der Ordner
c:\home\data\SitePackages
(Windows) oder/home/data/SitePackages
(Linux) über eine Datei mit dem Namenpackagename.txt
verfügt. Diese Datei enthält nur den Namen (ohne Leerzeichen) der Paketdatei in diesem Ordner, die derzeit ausgeführt wird.
Integration mit einer ZIP-Bereitstellung
Die ZIP-Bereitstellung ist ein Feature von Azure App Service, mit dem Sie Ihr Funktions-App-Projekt im Verzeichnis wwwroot
bereitstellen können. Das Projekt ist als ZIP-Bereitstellungsdatei verpackt. Dieselben APIs können verwendet werden, um Ihr Paket im Ordner c:\home\data\SitePackages
(Windows) oder /home/data/SitePackages
(Linux) bereitzustellen.
Wenn Sie den WEBSITE_RUN_FROM_PACKAGE
-App-Einstellungswert auf 1
festlegen, kopieren die ZIP-Bereitstellungs-APIs Ihr Paket in den Ordner c:\home\data\SitePackages
(Windows) oder /home/data/SitePackages
(Linux), anstatt die Dateien nach c:\home\site\wwwroot
(Windows)oder /home/site/wwwroot
(Linux) zu extrahieren. Außerdem wird die Datei packagename.txt
erstellt. Nachdem die Funktions-App automatisch neu gestartet wurde, wird das Paket als schreibgeschütztes Dateisystem an wwwroot
bereitgestellt. Weitere Informationen zur ZIP-Bereitstellung finden Sie unter ZIP-Bereitstellung für Azure Functions.
Hinweis
Wenn eine Bereitstellung erfolgt, wird ein Neustart der Funktions-App ausgelöst. Funktionsausführungen, die aktuell während der Bereitstellung ausgeführt werden, werden beendet. Für weitere Informationen zum Schreiben zustandsloser und defensiver Funktionen legen Sie Schreiben von Funktionen als zustandslos fest.
Verwenden von WEBSITE_RUN_FROM_PACKAGE = URL
Dieser Abschnitt enthält Informationen zum Ausführen Ihrer Funktions-App aus einem Paket, das an einem URL-Endpunkt bereitgestellt wird. Diese ist die einzige Option, die für die Ausführung aus einem unter Linux gehosteten Paket mit einem Verbrauchstarif unterstützt wird. Diese Option wird im Flex-Verbrauchsplan nicht unterstützt.
Überlegungen zur Bereitstellung über eine URL
- Legen Sie
WEBSITE_RUN_FROM_PACKAGE = <URL>
in Apps im Flex-Verbrauchsplan nicht fest. Diese Option wird nicht unterstützt. - Bei Funktions-Apps unter Windows nimmt die Kaltstartzeit geringfügig zu, wenn das Anwendungspaket mithilfe von
WEBSITE_RUN_FROM_PACKAGE = <URL>
auf einem URL-Endpunkt bereitgestellt wird. - Wenn Sie eine URL angeben, müssen Sie nach dem Veröffentlichen eines aktualisierten Pakets auch Trigger manuell synchronisieren.
- Die Functions-Runtime muss über Berechtigungen für den Zugriff auf die Paket-URL verfügen.
- Stellen Sie Ihr Paket nicht in Azure Blob Storage als öffentliches Blob bereit. Nutzen Sie stattdessen einen privaten Container mit einer Shared Access Signature (SAS) oder eine verwaltete Identität, um der Functions-Runtime den Zugriff auf das Paket zu gewähren.
- Sie müssen alle SAS-URLs verwalten, die für die Bereitstellung verwendet werden. Wenn eine SAS abläuft, kann das Paket nicht mehr bereitgestellt werden. In diesem Fall müssen Sie eine neue SAS generieren und die Einstellung in Ihrer Funktions-App aktualisieren. Sie können diesen Verwaltungsaufwand beseitigen, indem Sie eine verwaltete Identität verwenden.
- Wenn die Ausführung in einem Premium-Plan erfolgt, stellen Sie sicher, dass Kaltstarts vermieden werden.
- Wenn Sie über einen Dedicated-Plan verfügen, stellen Sie sicher, dass Sie Always On aktivieren.
- Sie können den Azure Storage-Explorer zum Hochladen von Paketdateien in Blobcontainer in Ihrem Speicherkonto verwenden.
Manuelles Hochladen eines Pakets in Blob Storage
Um bei Verwendung der URL-Option ein ZIP-Paket bereitzustellen, müssen Sie ein ZIP-komprimiertes Bereitstellungspaket erstellen und in das Ziel hochladen. Mit dem folgenden Verfahren wird eine Bereitstellung in einem Container in Blob Storage durchgeführt:
Erstellen Sie mithilfe des Hilfsprogramms Ihrer Wahl ein ZIP-Paket für Ihr Projekt.
Suchen Sie im Azure-Portal nach Ihrem Speicherkontonamen, oder durchsuchen Sie die Liste Ihrer Speicherkonten.
Wählen Sie im Speicherkonto unter Datenspeicherung die Option Container aus.
Wählen Sie + Container aus, um einen neuen Blob Storage-Container in Ihrem Konto zu erstellen.
Geben Sie auf der Seite Neuer Container einen Namen an, z. B. Bereitstellungen, stellen Sie sicher, dass die Anonyme Zugriffsebene auf Privat festgelegt ist, und wählen Sie dann Erstellen aus.
Wählen Sie den erstellten Container und dann Hochladen aus, navigieren Sie zum Speicherort der ZIP-Datei, die Sie mit Ihrem Projekt erstellt haben, und wählen Sie anschließend Hochladen aus.
Wählen Sie nach Abschluss des Uploads Ihre hochgeladene Blobdatei aus, und kopieren Sie die URL. Wenn Sie keine verwaltete Identität verwenden, müssen Sie möglicherweise eine SAS-URL generieren.
Suchen Sie nach Ihrer Funktions-App, oder durchsuchen Sie die Seite Funktions-App nach der App.
Erweitern Sie in Ihrer Funktions-App Einstellungen, und wählen Sie dann Umgebungsvariablen aus.
Wählen Sie auf der Registerkarte App-Einstellungen + Hinzufügen aus.
Geben Sie den Wert
WEBSITE_RUN_FROM_PACKAGE
als Namen ein, und fügen Sie die URL Ihres Pakets in Blob Storage als Wert ein.Wählen Sie Anwenden und dann noch einmal Anwenden und Bestätigen aus, um die Einstellung zu speichern und die Funktions-App neu zu starten.
Nun können Sie Ihre Funktion in Azure ausführen, um zu überprüfen, ob die Bereitstellung der ZIP-Datei des Bereitstellungspakets erfolgreich war.
Abrufen eines Pakets aus Azure Blob Storage mithilfe einer verwalteten Identität
Sie können Azure Blob Storage für die Autorisierung von Anforderungen mit Microsoft Entra ID konfigurieren. Diese Konfiguration bedeutet, dass Sie keinen SAS-Schlüssel mit Ablauf generieren müssen, sondern stattdessen die verwaltete Identität der Anwendung nutzen 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:
Vergewissern Sie sich, dass das Blob für privaten Zugriff konfiguriert ist.
Erteilen Sie der Identität die Rolle Storage-Blobdatenleser mit dem Bereich für das Paketblob. Ausführliche Informationen zum Erstellen der Rollenzuweisung finden Sie unter Zuweisen einer Azure-Rolle für den Zugriff auf Blobdaten.
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.