Uruchamianie aplikacji w Azure App Service bezpośrednio z pakietu ZIP

W Azure App Service 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 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, a aplikacja zachowuje 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 zmniejszyć czasy zimnego uruchamiania, szczególnie w przypadku funkcji JavaScript z dużymi drzewami pakietów npm.

Uwaga

Obecnie obsługiwane są tylko pliki pakietów ZIP.

Tworzenie pakietu ZIP projektu

Uwaga

Jeśli pliki zostały pobrane w pakiecie ZIP, najpierw wyodrębnij pliki. Jeśli na przykład pobrano pakiet ZIP z GitHub, nie można wdrożyć tego pliku tak, jak to jest. GitHub dodaje dodatkowe katalogi zagnieżdżone, które nie działają z 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 App Service uruchamiać automatyzację wdrażania, uruchom wszystkie zadania kompilacji (na przykład npm, gulpbower, composeri 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 ten folder jest folderem wyjściowym dotnet publish polecenia. Następujące polecenie używa domyślnego narzędzia w terminalu:

# 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 poziomu pakietu lokalnego do aplikacji. Można również uruchomić z poziomu pakietu zdalnego.

Uruchamianie pakietu

Najprostszym sposobem uruchomienia pakietu w 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 jako plik 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 (na przykład 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, 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 Azure Blob Storage. Możesz użyć Eksplorator usługi Azure Storage, aby przekazać pliki pakietów 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 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 to możliwe przy użyciu interfejsu 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 App Service.

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

Azure Blob Storage można skonfigurować tak, aby autoryzować żądania za pomocą usługi Azure AD. Oznacza to, że zamiast generowania klucza sygnatury dostępu współdzielonego 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 rolę Storage Czytnik danych obiektu blob z zakresem dla obiektu blob pakietu. Zobacz Przypisywanie roli platformy Azure w celu uzyskania dostępu do danych obiektów blob , aby uzyskać szczegółowe informacje na temat tworzenia przypisania roli.

  3. WEBSITE_RUN_FROM_PACKAGE Ustaw ustawienie aplikacji na adres URL obiektu blob pakietu. Prawdopodobnie będzie to formularz "https://{nazwa-konta magazynu}.blob.core.windows.net/{nazwa-kontenera}/{path-to-package}" lub podobne.

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 błąd.
  • 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