Sdílet prostřednictvím


Spuštění aplikace ve službě Aplikace Azure Service přímo z balíčku ZIP

Poznámka:

Spuštění z balíčku není podporováno pro aplikace v Pythonu. Při nasazování souboru ZIP vašeho Python kódu je potřeba nastavit příznak pro povolení automatizace sestavení Azure. Automatizace sestavení vytvoří virtuální prostředí Pythonu pro vaši aplikaci a nainstaluje potřebné požadavky a balíček. Další podrobnosti najdete v tématu automatizace sestavení.

Ve službě Aplikace Azure Můžete spouštět aplikace přímo ze souboru balíčku ZIP pro nasazení. Tento článek ukazuje, jak povolit tuto funkci ve vaší aplikaci.

Všechny ostatní metody nasazení ve službě App Service mají něco společného: vaše rozbalené soubory se nasadí do D:\home\site\wwwroot ve vaší aplikaci (nebo /home/site/wwwroot pro linuxové aplikace). Vzhledem k tomu, že aplikace používá stejný adresář za běhu, může nasazení selhat kvůli konfliktům uzamčení souborů a aplikace se může chovat nepředvídatelně, protože některé soubory dosud nejsou aktualizované. Pokud chcete toto nastavení povolit, nemusíte k proměnné přiřazovat žádnou hodnotu WEBSITE_RUN_FROM_PACKAGE ani ji úplně odebrat.

Naproti tomu při spuštění přímo z balíčku ZIP se soubory v balíčku nekopírují do adresáře wwwroot . Místo toho se samotný balíček ZIP připojí přímo jako adresář wwwroot jen pro čtení. Pokud chcete toto nastavení povolit, nastavte WEBSITE_RUN_FROM_PACKAGE=1 nebo zadejte adresu URL souboru ZIP. Spuštění přímo z balíčku má několik výhod:

  • Eliminuje konflikty zámků souborů mezi nasazením a běhovým prostředím.
  • Zajišťuje, že jsou kdykoli spuštěné jenom plně nasazené aplikace.
  • Dá se nasadit do produkční aplikace (s restartováním).
  • Zlepšuje výkon nasazení Azure Resource Manageru.
  • Může zkrátit dobu studeného spuštění, zejména pro funkce JavaScriptu s velkými strukturami balíčků npm.

Poznámka:

V současné době jsou podporovány pouze soubory balíčku ZIP.

Vytvoření balíčku ZIP projektu

Důležité

Při vytváření balíčku ZIP pro nasazení nezahrnujte kořenový adresář. Do kořenového adresáře zahrňte pouze soubory a adresáře. Pokud si stáhnete úložiště GitHub jako soubor ZIP, nemůžete tento soubor nasadit tak, jak je ve službě App Service. GitHub přidává vnořené adresáře na nejvyšší úrovni, což nefunguje se službou App Service.

V okně místního terminálu přejděte do kořenového adresáře projektu aplikace.

Tento adresář by měl obsahovat vstupní soubor vaší webové aplikace, například index.html, index.phpa app.js. Může také obsahovat soubory správy balíčků, jako jsou project.json, composer.json, package.json, bower.jsona requirements.txt.

Pokud nechcete, aby služba App Service spouštěla automatizaci nasazení za vás, spusťte všechny úlohy sestavení. Například: npm, , bowergulp, composera pip. Ujistěte se, že máte všechny soubory, které potřebujete ke spuštění aplikace. Tento krok se vyžaduje, pokud chcete balíček spustit přímo.

Vytvořte archiv ZIP se všemi položkami ve vašem projektu. Pro dotnet projekty přidejte vše v adresáři výstupu příkazu dotnet publish, s výjimkou samotného adresáře výstupu. Zadáním následujícího příkazu v terminálu vytvořte například balíček ZIP, který obsahuje obsah aktuálního adresáře:

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

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

Povolení spuštění z balíčku ZIP

Nastavení WEBSITE_RUN_FROM_PACKAGE aplikace umožňuje spuštění z balíčku ZIP. Pokud ho chcete nastavit, spusťte pomocí Azure CLI následující příkaz.

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

WEBSITE_RUN_FROM_PACKAGE="1" umožňuje spustit aplikaci z místního balíčku ZIP do vaší aplikace. Můžete také spustit ze vzdáleného balíčku.

Spusťte balíček ZIP

Nejjednodušší způsob, jak spustit balíček ZIP ve službě App Service, je příkaz Azure CLI az webapp deployment source config-zip . Příklad:

az webapp deploy --resource-group <group-name> --name <app-name> --src-path <filename>.zip

WEBSITE_RUN_FROM_PACKAGE Vzhledem k tomu, že je nastavení aplikace nastavené, tento příkaz neextrahuje obsah balíčku ZIP do adresáře D:\home\site\wwwroot vaší aplikace. Místo toho nahraje soubor ZIP v původní podobě do d:\home\data\SitePackages a vytvoří soubor packagename.txt ve stejném adresáři, který obsahuje název ZIP balíčku, jenž se má načíst za běhu. Pokud balíček ZIP nahrajete jiným způsobem (například FTP), musíte vytvořit adresář D:\home\data\SitePackages a soubor packagename.txt ručně.

Příkaz také restartuje aplikaci. Protože je WEBSITE_RUN_FROM_PACKAGE nastaven, App Service připojí nahraný balíček jako adresář wwwroot jen pro čtení a spustí aplikaci přímo z tohoto připojeného adresáře.

Místo toho spusťte z externí adresy URL.

Balíček ZIP můžete spustit také z externí adresy URL, jako je Azure Blob Storage. Pomocí Průzkumníka služby Azure Storage můžete nahrát soubory balíčku ZIP do účtu úložiště objektů blob. Kontejner privátního úložiště se sdíleným přístupovým podpisem (SAS) byste měli použít nebo použít spravovanou identitu , která umožní modulu runtime služby App Service zabezpečený přístup k balíčku ZIP.

Poznámka:

V současné době není možné migrovat existující prostředek služby App Service, který spouští místní balíček ZIP, aby se spustil ze vzdáleného balíčku ZIP. Budete muset vytvořit nový prostředek služby App Service nakonfigurovaný tak, aby běžel z externí adresy URL.

Jakmile soubor nahrajete do úložiště Blob a budete mít adresu URL SAS pro soubor, nastavte nastavení aplikace WEBSITE_RUN_FROM_PACKAGE na adresu URL. Ujistěte se, že adresa URL končí ..zip Následující příklad to provede pomocí Azure CLI:

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"

Pokud publikujete aktualizovaný balíček se stejným názvem do úložiště objektů blob, musíte aplikaci restartovat, aby se aktualizovaný balíček načetl do služby App Service.

Přístup k balíčku ve službě Azure Blob Storage pomocí spravované identity

Službu Azure Blob Storage můžete nakonfigurovat tak, aby autorizovala požadavky s ID Microsoft Entra. Tato konfigurace znamená, že místo generování klíče SAS s vypršením platnosti můžete místo toho spoléhat na spravovanou identitu aplikace. Ve výchozím nastavení se používá identita přiřazená systémem aplikace. Pokud chcete zadat uživatelsky přiřazenou identitu, můžete nastavit WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_ID nastavení aplikace na ID prostředku této identity. Nastavení může také přijmout SystemAssigned jako hodnotu, která odpovídá vynechání nastavení.

Chcete-li povolit načtení balíčku pomocí identity:

  1. Ujistěte se, že je objekt blob nakonfigurovaný pro privátní přístup.

  2. Udělte identitě roli Storage Blob Data Reader s působností nad blobem balíčku. Podrobnosti o vytvoření přiřazení role najdete v části Přiřazení role Azure pro přístup k datům objektů blob.

  3. Nastavte nastavení aplikace WEBSITE_RUN_FROM_PACKAGE na adresu URL objektu blob balíčku. Tato adresa URL je obvykle ve formě https://{storage-account-name}.blob.core.windows.net/{container-name}/{path-to-package} nebo podobná.

  4. Pokud chcete zadat uživatelsky přiřazenou identitu, můžete nastavit WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_ID nastavení aplikace na ID prostředku této identity. Nastavení může také přijmout "SystemAssigned" jako hodnotu, i když je to stejné jako vynechání nastavení úplně. ID prostředku je standardní reprezentace prostředku v Azure. Pro spravovanou identitu přiřazenou uživatelem to bude /subscriptions/subid/resourcegroups/rg-name/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity-name. ID prostředku spravované identity přiřazené uživatelem lze získat v nastavení ->Vlastnosti ->ID spravované identity přiřazené uživatelem.

Nasazení souborů webové úlohy při spuštění z aplikačního balíčku

Existují dva způsoby, jak nasadit soubory WebJob, když povolíte spuštění aplikace z balíčku:

  • Nasazení ve stejném balíčku ZIP jako vaše aplikace: zahrňte je jako obvykle do <project-root>\app_data\jobs\... (což se mapuje na cestu nasazení \site\wwwroot\app_data\jobs\... podle rychlého průvodce WebJobs).
  • Nasazování oddělené od balíčku ZIP vaší aplikace: Vzhledem k tomu, že obvyklá cesta nasazení \site\wwwroot\app_data\jobs\... je teď jen pro čtení, nemůžete tam nasadit soubory WebJob. Místo toho nasaďte soubory WebJob na \site\jobs\..., který není jen pro čtení. WebJobs nasazené do \site\wwwroot\app_data\jobs\... a \site\jobs\... se spouštějí.

Poznámka:

Když se \site\wwwroot stane jen k čtení, operace jako vytvoření disable.job selžou.

Řešení problému

  • Spuštění přímo z balíčku způsobí, že wwwroot bude jen pro čtení. Pokud se aplikace pokusí zapisovat soubory do tohoto adresáře, zobrazí se chyba.
  • Formáty TAR a GZIP nejsou podporovány.
  • Soubor ZIP může být maximálně 1 GB.
  • Tato funkce není kompatibilní s místní mezipamětí.
  • Pokud chcete zvýšit výkon studeného startu, použijte místní možnost Zip (WEBSITE_RUN_FROM_PACKAGE=1).