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 d:\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 aus einer Paketdatei:

  • Reduziert das Risiko von Sperrungen beim Kopieren von Dateien.
  • Kann in einer Produktions-App (mit Neustart) bereitgestellt werden.
  • Sie können sich sicher sein, dass die Dateien, die in Ihrer App ausgeführt werden, sicher sind.
  • Verbessert die Leistung von Azure Resource Manager-Bereitstellungen.
  • Kann Kaltstartzeiten verringern, 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

Damit Ihre Funktions-App aus einem Paket ausgeführt werden kann, fügen Sie Ihren Einstellungen in der Funktions-App eine Einstellung WEBSITE_RUN_FROM_PACKAGE hinzu. Die 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 d:\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-Optionen 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

  • Die Paketdatei muss als ZIP-Datei formatiert sein. Die tar- und gzip-Formate werden derzeit nicht unterstützt.
  • ZIP-Bereitstellung wird empfohlen.
  • Beim Bereitstellen Ihrer Funktions-App unter Windows sollten Sie WEBSITE_RUN_FROM_PACKAGE auf 1 festlegen und per ZIP-Bereitstellung veröffentlichen.
  • Wenn Sie die Ausführung aus einem Paket vornehmen, wird der Ordner wwwroot schreibgeschützt, und beim Schreiben von Dateien in dieses Verzeichnis erhalten Sie einen Fehler. Dateien sind auch im Azure-Portal schreibgeschützt.
  • Die maximale Größe für eine Bereitstellungspaketdatei beträgt derzeit 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-Einstellung für die Bereitstellungsanpassung SCM_DO_BUILD_DURING_DEPLOYMENT=true hinzu. Fügen Sie für Linux auch die Einstellung ENABLE_ORYX_BUILD=true hinzu. Weitere Informationen finden Sie unter Remotebuild.

Hinweis

WEBSITE_RUN_FROM_PACKAGE funktioniert nicht mit MSDeploy, wie hier beschrieben. Sie erhalten während der Bereitstellung eine Fehlermeldung wie etwa ARM-MSDeploy Deploy Failed. Ändern Sie „/MSDeploy“ in „/ZipDeploy“, und dieser Fehler wird behoben.

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.

Using 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 sitebasierten Pakets ist die empfohlene Option für die Ausführung aus dem Bereitstellungspaket (mit Ausnahme von in einem Verbrauchsplan gehostetem Linux).
  • 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 d:\home\data\SitePackages (Windows) oder /home/data/SitePackages (Linux) über eine Datei mit dem Namen packagename.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

ZIP-Bereitstellung ist eine Funktion von Azure App Service, mit der 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 d:\home\data\SitePackages (Windows) oder /home/data/SitePackages (Linux) bereitzustellen.

Mit dem WEBSITE_RUN_FROM_PACKAGE-App-Einstellungswert von 1 kopieren die ZIP-Bereitstellungs-APIs Ihr Paket in den Ordner d:\home\data\SitePackages (Windows) oder /home/data/SitePackages (Linux), anstatt die Dateien nach d:\home\site\wwwroot (Windows)oder /home/site/wwwroot (Linux) zu extrahieren. Außerdem wird die Datei packagename.txt erstellt. Nach einem Neustart wird das Paket in wwwroot als schreibgeschütztes Dateisystem 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. Lesen Sie Verbessern der Leistung und Zuverlässigkeit von Azure Functions, um zu erfahren, wie zustandslose und defensive Funktionen geschrieben werden.

Using 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 Option ist die einzige Option, die für die Ausführung aus einem Paket unter in einem Verbrauchstarif gehostetem Linux unterstützt wird.

Überlegungen zur Bereitstellung über eine URL

  • Wenn Sie eine Funktions-App unter Windows ausführen, führt die App-Einstellung WEBSITE_RUN_FROM_PACKAGE = <URL> zu einer schlechteren Kaltstartleistung und wird nicht empfohlen.
  • 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.
  • Sie sollten Ihr Paket nicht in Azure Blob Storage als öffentliches Blob bereitstellen. 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.
  • Stellen Sie bei Ausführung in einem dedizierten Plan sicher, dass Sie Always On aktiviert haben.
  • 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. In diesem Beispiel erfolgt die Bereitstellung in einem Container in Blob Storage.

  1. Erstellen Sie mithilfe des Hilfsprogramms Ihrer Wahl ein ZIP-Paket für Ihr Projekt.

  2. Suchen Sie im Azure-Portal nach Ihrem Speicherkontonamen, oder durchsuchen Sie Ihre Speicherkonten nach diesem Namen.

  3. Wählen Sie im Speicherkonto unter Datenspeicherung die Option Container aus.

  4. Wählen Sie + Container aus, um einen neuen Blob Storage-Container in Ihrem Konto zu erstellen.

  5. Geben Sie auf der Seite Neuer Container einen Namen ein (z. B. „deployments“), stellen Sie sicher, dass die Öffentliche ZugriffsebenePrivatist, und wählen Sie dann Erstellen aus.

  6. Wählen Sie den erstellten Container aus, wählen Sie Hochladenaus, navigieren Sie zum Speicherort der ZIP-Datei, die Sie mit Ihrem Projekt erstellt haben, und wählen Sie Hochladen aus.

  7. Wählen Sie nach Abschluss des Uploads Ihre hochgeladene Blobdatei aus, und kopieren Sie die URL. Möglicherweise müssen Sie eine SAS-URL generieren, wenn Sie keine Identität verwenden.

  8. Suchen Sie nach Ihrer Funktions-App, oder durchsuchen Sie die Seite Funktions-App nach der App.

  9. Wählen Sie unter Einstellungen für ihre Funktions-App die Option Konfigurationen aus.

  10. Wählen Sie auf der Registerkarte Anwendungseinstellungen die Option Neue Anwendungseinstellung aus.

  11. 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.

  12. Wählen Sie OK aus. Wählen Sie dann Speichern>Weiter, um die Einstellung zu speichern und die App neu zu starten.

Nun können Sie Ihre Funktion in Azure ausführen, um zu überprüfen, ob die Bereitstellung erfolgreich war, indem Sie die ZIP-Datei des Bereitstellungspakets verwenden.

Das folgende Beispiel zeigt eine Funktions-App, die so konfiguriert ist, dass Sie über eine ZIP-Datei ausgeführt wird, die im Azure Blob Storage gehostet wird:

WEBSITE_RUN_FROM_ZIP app setting

Abrufen eines Pakets aus Azure Blob Storage mithilfe einer verwalteten Identität

Azure Blob Storage kann für die Autorisierung von Anforderungen mit Microsoft Entra ID konfiguriert werden. Das bedeutet, dass Sie keinen SAS-Schlüssel mit Ablauf generieren müssen, sondern 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. Für die Einstellung wird zwar auch „SystemAssigned“ (Systemseitig zugewiesen) als Wert akzeptiert, dies hat jedoch das gleiche Ergebnis wie das Weglassen der Einstellung.

So ermöglichen Sie das Abrufen des Pakets unter Verwendung der Identität:

  1. Vergewissern Sie sich, dass das Blob für privaten Zugriff konfiguriert ist.

  2. 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.

  3. Legen Sie die Anwendungseinstellung WEBSITE_RUN_FROM_PACKAGE auf die Blob-URL des Pakets fest. Diese hat wahrscheinlich das Format „https://{Speicherkontoname}.blob.core.windows.net/{Containername}/{Pfad zum Paket}“ oder ein ähnliches Format.

Nächste Schritte