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

Damit Ihre Funktions-App aus einem Paket ausgeführt werden kann, fügen Sie Ihrer App eine 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

  • 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 auf 1 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-Einstellung SCM_DO_BUILD_DURING_DEPLOYMENT=true für die Bereitstellungsanpassung hinzu. Fügen Sie für Linux auch die Einstellung ENABLE_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:

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

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.

Überlegungen zur Bereitstellung über eine URL

  • 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:

  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 die Liste Ihrer Speicherkonten.

  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 an, z. B. Bereitstellungen, stellen Sie sicher, dass die Anonyme Zugriffsebene auf Privat festgelegt ist, und wählen Sie dann Erstellen aus.

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

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

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

  9. Erweitern Sie in Ihrer Funktions-App Einstellungen, und wählen Sie dann Umgebungsvariablen aus.

  10. Wählen Sie auf der Registerkarte App-Einstellungen + Hinzufügen 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 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:

  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 URL hat in der Regel die Form https://{storage-account-name}.blob.core.windows.net/{container-name}/{path-to-package} oder eine ähnliche.