Uruchamianie aplikacji w usłudze aplikacja systemu Azure bezpośrednio z pakietu ZIP

W usłudze aplikacja systemu Azure możesz uruchamiać aplikacje bezpośrednio z pliku pakietu ZIP wdrożenia. W tym artykule pokazano, jak włączyć tę funkcję w aplikacji.

Wszystkie inne metody wdrażania w usłudze App Service mają coś wspólnego: pliki są wdrażane w folderze D:\home\site\wwwroot w aplikacji (lub /home/site/wwwroot dla aplikacji systemu Linux). Ponieważ ten sam katalog jest używany przez aplikację w czasie wykonywania, wdrożenie może zakończyć się niepowodzeniem z powodu konfliktów blokady plików i aby aplikacja zachowywała się nieprzewidywalnie, ponieważ niektóre pliki nie zostały jeszcze zaktualizowane.

Natomiast po uruchomieniu bezpośrednio z pakietu pliki w pakiecie nie są kopiowane do katalogu wwwroot . Zamiast tego sam pakiet ZIP jest instalowany bezpośrednio jako katalog wwwroot tylko do odczytu. Istnieje kilka korzyści związanych z uruchamianiem bezpośrednio z pakietu:

  • Eliminuje konflikty blokady plików między wdrożeniem a środowiskiem uruchomieniowym.
  • Zapewnia, że w dowolnym momencie działają tylko aplikacje w pełni wdrożone.
  • Można wdrożyć w aplikacji produkcyjnej (z ponownym uruchomieniem).
  • Zwiększa wydajność wdrożeń usługi Azure Resource Manager.
  • Może skrócić czasy zimnego uruchamiania, szczególnie w przypadku funkcji Języka JavaScript z dużymi drzewami pakietów npm.

Uwaga

Obecnie obsługiwane są tylko pliki pakietu ZIP.

Tworzenie pakietu ZIP projektu

Ważne

Podczas tworzenia pakietu ZIP do wdrożenia nie dołączaj katalogu głównego, ale tylko do plików i katalogów. Jeśli pobierzesz repozytorium GitHub jako plik ZIP, nie możesz wdrożyć tego pliku, tak jak to jest w usłudze App Service. Usługa GitHub dodaje dodatkowe zagnieżdżone katalogi na najwyższym poziomie, które nie działają z usługą App Service.

W lokalnym oknie terminalu przejdź do katalogu głównego projektu aplikacji.

Ten katalog powinien zawierać plik wpisu w aplikacji internetowej, taki jak index.html, index.php i app.js. Może również zawierać pliki zarządzania pakietami, takie jak project.json, composer.json, package.json, bower.json i requirements.txt.

Jeśli nie chcesz, aby usługa App Service uruchamiała automatyzację wdrażania, uruchom wszystkie zadania kompilacji (na przykład npm, , bowergulp, composer, i pip) i upewnij się, że masz wszystkie pliki potrzebne do uruchomienia aplikacji. Ten krok jest wymagany, jeśli chcesz bezpośrednio uruchomić pakiet.

Utwórz archiwum ZIP z wszystkimi elementami w projekcie. W przypadku dotnet projektów jest to wszystko w katalogu dotnet publish wyjściowym polecenia (z wyłączeniem samego katalogu wyjściowego). Na przykład następujące polecenie w terminalu w celu utworzenia pakietu ZIP zawartości bieżącego katalogu:

# Bash
zip -r <file-name>.zip .

# PowerShell
Compress-Archive -Path * -DestinationPath <file-name>.zip

Włączanie uruchamiania z pakietu

Ustawienie WEBSITE_RUN_FROM_PACKAGE aplikacji umożliwia uruchamianie z pakietu. Aby go ustawić, uruchom następujące polecenie za pomocą interfejsu wiersza polecenia platformy Azure.

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITE_RUN_FROM_PACKAGE="1"

WEBSITE_RUN_FROM_PACKAGE="1" umożliwia uruchamianie aplikacji z pakietu lokalnego do aplikacji. Można również uruchomić z pakietu zdalnego.

Uruchamianie pakietu

Najprostszym sposobem uruchomienia pakietu w usłudze App Service jest użycie polecenia az webapp deployment source config-zip interfejsu wiersza polecenia platformy Azure. Na przykład:

az webapp deployment source config-zip --resource-group <group-name> --name <app-name> --src <filename>.zip

WEBSITE_RUN_FROM_PACKAGE Ponieważ ustawienie aplikacji jest ustawione, to polecenie nie wyodrębnia zawartości pakietu do katalogu D:\home\site\wwwroot aplikacji. Zamiast tego przekazuje plik ZIP w formacie D:\home\data\SitePackages i tworzy packagename.txt w tym samym katalogu, który zawiera nazwę pakietu ZIP do załadowania w czasie wykonywania. Jeśli przekażesz pakiet ZIP w inny sposób (np . FTP), musisz ręcznie utworzyć katalog D:\home\data\SitePackages i plik packagename.txt .

Polecenie powoduje również ponowne uruchomienie aplikacji. Ponieważ WEBSITE_RUN_FROM_PACKAGE jest ustawiona, usługa App Service instaluje przekazany pakiet jako katalog wwwroot tylko do odczytu i uruchamia aplikację bezpośrednio z tego zainstalowanego katalogu.

Zamiast tego uruchom polecenie z zewnętrznego adresu URL

Możesz również uruchomić pakiet z zewnętrznego adresu URL, takiego jak usługa Azure Blob Storage. Możesz użyć Eksplorator usługi Azure Storage, aby przekazać pliki pakietu na konto usługi Blob Storage. Należy użyć prywatnego kontenera magazynu z sygnaturą dostępu współdzielonego (SAS) lub użyć tożsamości zarządzanej, aby umożliwić środowisku uruchomieniowemu usługi App Service bezpieczny dostęp do pakietu.

Po przekazaniu pliku do usługi Blob Storage i utworzeniu adresu URL sygnatury dostępu współdzielonego dla pliku ustaw WEBSITE_RUN_FROM_PACKAGE ustawienie aplikacji na adres URL. W poniższym przykładzie jest używany interfejs wiersza polecenia platformy Azure:

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"

Jeśli opublikujesz zaktualizowany pakiet o tej samej nazwie w usłudze Blob Storage, musisz ponownie uruchomić aplikację, aby zaktualizowany pakiet został załadowany do usługi App Service.

Uzyskiwanie dostępu do pakietu w usłudze Azure Blob Storage przy użyciu tożsamości zarządzanej

Usługę Azure Blob Storage można skonfigurować do autoryzowania żądań przy użyciu identyfikatora Entra firmy Microsoft. Oznacza to, że zamiast generować klucz SAS z wygaśnięciem, można zamiast tego polegać na tożsamości zarządzanej aplikacji. Domyślnie będzie używana tożsamość przypisana przez system aplikacji. Jeśli chcesz określić tożsamość przypisaną przez użytkownika, możesz ustawić WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_ID ustawienie aplikacji na identyfikator zasobu tej tożsamości. Ustawienie może również akceptować wartość "SystemAssigned" jako wartość, chociaż jest to takie samo, jak całkowite pominięcie 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. Udziel tożsamości roli Czytelnik danych obiektu blob usługi Storage z zakresem dla obiektu blob pakietu. Aby uzyskać szczegółowe informacje na temat tworzenia przypisania roli roli, zobacz Przypisywanie roli platformy 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. Prawdopodobnie będzie to postać "https://{nazwa-konta magazynu}.blob.core.windows.net/{nazwa-kontenera}/{ścieżka-pakiet}" lub podobne.

Wdrażanie plików zadania WebJob podczas uruchamiania z pakietu

Istnieją dwa sposoby wdrażania plików zadania WebJob po włączeniu uruchamiania aplikacji z pakietu:

  • Wdróż w tym samym pakiecie ZIP co aplikacja: uwzględnij je w zwykły sposób <project-root>\app_data\jobs\... (które mapują na ścieżkę \site\wwwroot\app_data\jobs\... wdrożenia określoną w przewodniku Szybki start zadań WebJob).
  • Wdróż oddzielnie od pakietu ZIP aplikacji: ponieważ zwykła ścieżka \site\wwwroot\app_data\jobs\... wdrożenia jest teraz tylko do odczytu, nie można tam wdrażać plików zadania WebJob. Zamiast tego wdróż pliki zadania WebJob w usłudze \site\jobs\..., która nie jest tylko do odczytu. Zadania WebJob wdrożone w usłudze \site\wwwroot\app_data\jobs\... i \site\jobs\... oba te zadania są uruchamiane.

Uwaga

Gdy \site\wwwroot stanie się tylko do odczytu, operacje, takie jak tworzenie pliku disable.job , zakończy się niepowodzeniem.

Rozwiązywanie problemów

  • Uruchamianie bezpośrednio z pakietu powoduje, że wwwroot tylko do odczytu. Jeśli aplikacja spróbuje zapisać pliki w tym katalogu, zostanie wyświetlony komunikat o błędzie.
  • Formaty TAR i GZIP nie są obsługiwane.
  • Plik ZIP może mieć co najwyżej 1 GB
  • Ta funkcja nie jest zgodna z lokalną pamięcią podręczną.
  • Aby uzyskać lepszą wydajność zimnego startu, użyj lokalnej opcji Zip (WEBSITE_RUN_FROM_PACKAGE=1).

Więcej zasobów