Uruchamianie funkcji z pliku pakietu w Azure

W Azure możesz uruchamiać funkcje bezpośrednio z pliku pakietu wdrożeniowego w aplikacji funkcji. Drugą opcją jest wdrożenie plików w katalogu c:\home\site\wwwroot (Windows) lub /home/site/wwwroot (Linux) aplikacji funkcji.

W tym artykule opisano zalety uruchamiania funkcji z pakietu. Pokazano również, jak włączyć tę funkcję w aplikacji funkcji.

Zalety uruchamiania z pliku pakietu

Istnieje kilka korzyści związanych z uruchamianiem funkcji z pliku pakietu:

  • Zmniejsza ryzyko problemów z blokowaniem kopiowania plików.
  • Można wdrożyć w aplikacji produkcyjnej (z ponownym uruchomieniem).
  • Sprawdza pliki, które są uruchomione w aplikacji.
  • Zwiększa wydajność wdrożeń Azure Resource Manager.
  • Skraca czas zimnego uruchamiania, szczególnie w przypadku funkcji JavaScript z dużymi strukturami pakietów npm.

Włączanie funkcji do uruchamiania z pakietu

Aplikacje funkcji w ramach planu hostingu Flex Consumption domyślnie działają z pakietu. Nie trzeba wykonywać żadnej specjalnej konfiguracji.

Aby umożliwić uruchamianie aplikacji funkcji z pakietu w planach hostingu Consumption, Elastic Premium i Dedicated (App Service), dodaj WEBSITE_RUN_FROM_PACKAGE ustawienie aplikacji do aplikacji funkcji. Ustawienie WEBSITE_RUN_FROM_PACKAGE aplikacji może mieć jedną z następujących wartości:

Wartość Opis
1 Wskazuje, że aplikacja funkcji jest uruchamiana z lokalnego pliku pakietu wdrożonego w folderze c:\home\data\SitePackages (Windows) lub /home/data/SitePackages (Linux) aplikacji funkcji. Jest to opcja domyślna, gdy używasz Azure Functions Core Tools.
<URL> Ustawia adres URL, który jest zdalną lokalizacją określonego pliku pakietu, który chcesz uruchomić. Wymagane w przypadku aplikacji funkcji działających w systemie Linux w planie Zużycie.

W poniższej tabeli przedstawiono zalecane WEBSITE_RUN_FROM_PACKAGE wartości wdrożenia do określonego systemu operacyjnego i planu hostingu:

Plan hostingu Windows Linux
Zużycie 1 jest zdecydowanie zalecany. Obsługiwany jest tylko warunek <URL>.
Premium 1 jest zalecany. 1 jest zalecany.
Oddany 1 jest zalecany. 1 jest zalecany.

Zagadnienia ogólne

  • Nie dodawaj ustawienia aplikacji WEBSITE_RUN_FROM_PACKAGE do aplikacji w planie Flex Consumption.
  • Plik pakietu musi być .zip sformatowany. Formaty tar i gzip nie są obsługiwane.
  • Zalecane jest wdrożenie za pomocą ZIP.
  • Podczas wdrażania aplikacji funkcji w Windows należy ustawić WEBSITE_RUN_FROM_PACKAGE na 1 i opublikować przy użyciu wdrożenia w formacie zip.
  • Gdy uruchomisz z pakietu, folder wwwroot jest tylko do odczytu i otrzymasz błąd, jeśli spróbujesz zapisać pliki w tym katalogu. Pliki są również tylko do odczytu w portalu Azure.
  • Maksymalny rozmiar pliku pakietu wdrożeniowego to 1 GB.
    • Wdrożenie używa magazynu tymczasowego podczas rozpakowywania plików projektu. Oznacza to, że aplikacja funkcji musi mieć wystarczającą ilość dostępnego tymczasowego miejsca do przechowywania zawartości pakietu. Należy pamiętać, że tymczasowy limit przestrzeni dyskowej dla planu Konsumpcyjnego wynosi 500 MB na plan. Aby dowiedzieć się, jak rozwiązywać problemy z magazynem tymczasowym, zobacz Jak rozwiązywać problemy z magazynem tymczasowym w Azure App Service.
  • Nie można użyć lokalnej pamięci podręcznej podczas uruchamiania z pakietu wdrożeniowego.
  • Jeśli projekt musi używać kompilacji zdalnej, nie używaj WEBSITE_RUN_FROM_PACKAGE ustawienia aplikacji. Zamiast tego dodaj ustawienie aplikacji SCM_DO_BUILD_DURING_DEPLOYMENT=true dostosowywania wdrożenia. W przypadku systemu Linux dodaj również ustawienie ENABLE_ORYX_BUILD=true. Aby uzyskać więcej informacji, zobacz Zdalna kompilacja.

Uwaga

Ustawienie WEBSITE_RUN_FROM_PACKAGE aplikacji nie działa z programem MSDeploy zgodnie z opisem w MSDeploy VS. ZipDeploy. Podczas wdrażania występuje błąd, taki jak ARM-MSDeploy Deploy Failed. Aby rozwiązać ten błąd, zmień wartość /MSDeploy na /ZipDeploy.

Dodaj ustawienie WEBSITE_RUN_FROM_PACKAGE

Istnieje kilka sposobów dodawania, aktualizowania i usuwania ustawień aplikacji funkcji:

Zmiany ustawień aplikacji funkcji wymagają ponownego uruchomienia aplikacji funkcji.

Tworzenie archiwum zip

Archiwum zip, które wdrażasz, musi zawierać wszystkie pliki potrzebne do uruchomienia aplikacji funkcjonalnej. Możesz ręcznie utworzyć archiwum zip z zawartości folderu projektu usługi Functions przy użyciu wbudowanych funkcji kompresji .zip lub narzędzi innych niż Microsoft.

Archiwum musi zawierać plik host.json w katalogu głównym wyodrębnionego folderu. Wybrany stos języka dla aplikacji funkcji tworzy inne wymagania:

Ważne

W przypadku języków, które wygenerowały skompilowane dane wyjściowe do wdrożenia, upewnij się, że skompresowano zawartość folderu wyjściowego, który planujesz opublikować, a nie cały folder projektu. Gdy funkcja wyodrębnia zawartość archiwum zip, host.json plik musi istnieć w katalogu głównym pakietu.

Użyj WEBSITE_RUN_FROM_PACKAGE = 1

Ta sekcja zawiera informacje o sposobie uruchamiania aplikacji funkcji z pliku pakietu lokalnego.

Zagadnienia dotyczące wdrażania z pakietu lokalnego

  • Użycie pakietu lokalnego jest zalecaną opcją uruchamiania z pakietu wdrożeniowego, z wyjątkiem uruchamiania w systemie Linux hostowanym w planie Zużycie.
  • Wdrożenie metodą pliku ZIP jest zalecanym sposobem przesyłania pakietu wdrożeniowego do witryny.
  • Jeśli nie używasz wdrożenia zip, upewnij się, że folder c:\home\data\SitePackages (Windows) lub /home/data/SitePackages (Linux) ma plik o nazwie packagename.txt. Ten plik zawiera tylko nazwę bez żadnych białych znaków pliku pakietu w tym folderze, który jest aktualnie uruchomiony.

Integracja z wdrożeniem zip

Wdrożenie zip to funkcja Azure App Service, która umożliwia wdrażanie projektu aplikacji funkcji do katalogu wwwroot. Projekt jest spakowany jako plik wdrożenia .zip. Te same interfejsy API mogą służyć do wdrażania pakietu w folderze c:\home\data\SitePackages (Windows) lub /home/data/SitePackages (Linux).

Po ustawieniu wartości ustawienia aplikacji WEBSITE_RUN_FROM_PACKAGE na wartość 1, interfejsy API wdrażania zip kopiują pakiet do folderu c:\home\data\SitePackages (Windows) lub /home/data/SitePackages (Linux) zamiast wyodrębniać pliki do c:\home\site\wwwroot (Windows) lub /home/site/wwwroot (Linux). Tworzy również plik packagename.txt . Po automatycznym ponownym uruchomieniu aplikacji funkcji pakiet jest montowany na wwwroot jako system plików tylko do odczytu. Aby uzyskać więcej informacji na temat uruchamiania zip, zobacz Wdrażanie Zip dla Azure Functions.

Uwaga

Po wdrożeniu zostanie wyzwolone ponowne uruchomienie aplikacji funkcyjnej. Wykonania funkcji, które są uruchamiane podczas wdrażania, są przerywane. Aby uzyskać informacje na temat pisania funkcji bezstanowych i defensywnych, ustaw opcję pisać funkcje bezstanowo.

Użyj WEBSITE_RUN_FROM_PACKAGE = <URL>

Ta sekcja zawiera informacje o tym, jak uruchomić aplikację funkcyjną z pakietu wdrożonego na punkt końcowy URL. Ta opcja jest jedyną obsługiwaną opcją uruchamiania z pakietu, który jest hostowany na systemie Linux, z planem konsumpcji. Ta opcja nie jest obsługiwana w planie Flex Consumption .

Zagadnienia dotyczące wdrażania z adresu URL

  • Nie ustawiaj WEBSITE_RUN_FROM_PACKAGE = <URL> w aplikacjach w planie Flex Consumption. Ta opcja nie jest obsługiwana.
  • Aplikacje funkcji uruchamiane na Windows doświadczają nieznacznie odczuwalnego wzrostu czasu uruchomienia cold-start, kiedy pakiet aplikacji jest wdrażany do punktu końcowego URL za pośrednictwem WEBSITE_RUN_FROM_PACKAGE = <URL>.
  • Po określeniu adresu URL należy również ręcznie zsynchronizować wyzwalacze po opublikowaniu zaktualizowanego pakietu.
  • Środowisko uruchomieniowe usługi Functions musi mieć uprawnienia dostępu do adresu URL pakietu.
  • Nie umieszczaj pakietu w Azure Blob Storage jako publiczny blob. Zamiast tego użyj prywatnego kontenera z sygnaturą dostępu współdzielonego (SAS) lub użyj tożsamości zarządzanej, aby umożliwić środowisku uruchomieniowemu usługi Functions dostęp do pakietu.
  • Należy zachować wszystkie adresy URL SAS używane do wdrażania. Gdy wygaśnie SAS (sygnatura dostępu współdzielonego), pakiet nie może być już wdrożony. W takim przypadku należy wygenerować nową sygnaturę dostępu współdzielonego i zaktualizować ustawienie w aplikacji funkcji. To obciążenie związane z zarządzaniem można wyeliminować przy użyciu tożsamości zarządzanej.
  • W przypadku uruchamiania w planie Premium pamiętaj, aby wyeliminować zimne starty.
  • Jeśli korzystasz z planu dedykowanego, upewnij się, że włączono opcję Zawsze włączone.
  • Możesz użyć Eksplorator usługi Azure Storage w celu przekazania plików pakietu do kontenerów blobów na koncie magazynu.

Ręczne przekazywanie pakietu do Blob Storage

Aby wdrożyć spakowany pakiet podczas korzystania z opcji adresu URL, należy utworzyć .zip skompresowany pakiet wdrożeniowy i przekazać go do miejsca docelowego. Poniższa procedura jest wdrażana w kontenerze w Blob Storage:

  1. Utwórz pakiet .zip dla projektu przy użyciu wybranego narzędzia.

  2. W portalu Azure wyszukaj nazwę konta magazynu lub wyszukaj ją na liście kont magazynu.

  3. Na koncie magazynu wybierz pozycję Kontenery w sekcji Przechowywanie danych.

  4. Wybierz pozycję + Container aby utworzyć nowy kontener Blob Storage na koncie.

  5. Na stronie Nowy kontener podaj nazwę (na przykład wdrożenia), upewnij się, że poziom dostępu anonimowego to Prywatny, a następnie wybierz pozycję Utwórz.

  6. Wybierz utworzony kontener, wybierz pozycję Przekaż, przejdź do lokalizacji pliku .zip utworzonego za pomocą projektu, a następnie wybierz pozycję Przekaż.

  7. Po zakończeniu przesyłania wybierz przesłany plik obiektu blob i skopiuj adres URL. Jeśli nie używasz tożsamości zarządzanej, może być konieczne wygenerowanie URL SAS.

  8. Wyszukaj aplikację funkcji lub znajdź ją na stronie Aplikacja funkcji.

  9. W aplikacji funkcji rozwiń sekcję Ustawienia, a następnie wybierz Zmienne środowiskowe.

  10. Na karcie Ustawienia aplikacji wybierz pozycję + Dodaj.

  11. Wprowadź wartość WEBSITE_RUN_FROM_PACKAGE dla Name i wklej adres URL pakietu w Blob Storage dla Value.

  12. Wybierz pozycję Zastosuj, a następnie wybierz pozycję Zastosuj i potwierdź, aby zapisać ustawienie i ponownie uruchomić aplikację funkcji.

Teraz możesz uruchomić funkcję w Azure, aby sprawdzić, czy wdrożenie pakietu wdrożeniowego .zip pliku zakończyło się pomyślnie.

Pobieranie pakietu z Azure Blob Storage przy użyciu tożsamości zarządzanej

Możesz skonfigurować Azure Blob Storage do autoryzowania żądań przy użyciu Microsoft Entra ID. Ta konfiguracja oznacza, że zamiast generować klucz SAS z czasem wygaśnięcia, można polegać na tożsamości zarządzanej aplikacji.

Domyślnie jest używana tożsamość przypisana przez system aplikacji. Jeśli chcesz określić tożsamość przypisaną przez użytkownika, możesz ustawić identyfikator zasobu tej tożsamości jako ustawienie aplikacji WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_ID. Ustawienie może również zaakceptować SystemAssigned jako wartość, która jest równoważna pomijaniu ustawienia.

Aby umożliwić pobranie pakietu przy użyciu tożsamości:

  1. Upewnij się, że obiekt blob jest skonfigurowany pod kątem dostępu prywatnego.

  2. Przyznaj tożsamości rolę Czytelnik danych obiektów blob usługi Storage z zakresem dla pakietowego obiektu blob. Aby uzyskać szczegółowe informacje na temat tworzenia przypisania roli, zobacz Przypisanie roli Azure w celu uzyskania dostępu do danych obiektów blob.

  3. WEBSITE_RUN_FROM_PACKAGE Ustaw ustawienie aplikacji na adres URL obiektu blob pakietu. Ten adres URL jest zwykle w postaci https://<storage-account-name>.blob.core.windows.net/<container-name>/<path-to-package> lub podobnej.

  4. Jeśli chcesz określić tożsamość przypisaną przez użytkownika, możesz ustawić identyfikator zasobu tej tożsamości jako ustawienie aplikacji WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_ID. Ustawienie może również akceptować wartość SystemAssigned jako wartość, chociaż jest to takie samo, jak całkowite pominięcie ustawienia. Identyfikator zasobu to standardowa reprezentacja zasobu w Azure. W przypadku tożsamości zarządzanej przypisanej przez użytkownika będzie to /subscriptions/subid/resourcegroups/rg-name/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity-name. Identyfikator zasobu tożsamości zarządzanej przypisanej przez użytkownika można uzyskać w Ustawienia>Właściwościach>tożsamości zarządzanej przypisanej przez użytkownika.