Az alkalmazás futtatása közvetlenül egy ZIP-csomagból Azure-alkalmazás Service-ben

A Azure-alkalmazás Szolgáltatásban az alkalmazásokat közvetlenül egy üzembehelyezési ZIP-csomagfájlból futtathatja. Ez a cikk bemutatja, hogyan engedélyezheti ezt a funkciót az alkalmazásban.

Az App Service minden más üzembehelyezési módszerében van valami közös: a fájlok az alkalmazásban (vagy a /home/site/wwwroot for Linux-alkalmazások esetén) a D:\home\site\wwwroot helyen vannak üzembe helyezve. Mivel az alkalmazás futásidőben ugyanazt a könyvtárat használja, előfordulhat, hogy az üzembe helyezés meghiúsul a fájlzárolási ütközések miatt, és az alkalmazás kiszámíthatatlanul viselkedik, mert egyes fájlok még nem frissülnek.

Ezzel szemben, ha közvetlenül egy csomagból futtat, a csomag fájljai nem lesznek átmásolva a wwwroot könyvtárba. Ehelyett maga a ZIP-csomag közvetlenül az írásvédett wwwroot könyvtárként lesz csatlakoztatva. A csomagból való közvetlen futtatásnak számos előnye van:

  • Kiküszöböli a fájlzárolási ütközéseket az üzembe helyezés és a futtatókörnyezet között.
  • Biztosítja, hogy mindig csak a teljes körűen telepített alkalmazások fussanak.
  • Éles alkalmazásban (újraindítással) üzembe helyezhető.
  • Javítja az Azure Resource Manager üzemelő példányainak teljesítményét.
  • Csökkentheti a hidegindítási időket, különösen nagy npm-csomagfákkal rendelkező JavaScript-függvények esetében.

Feljegyzés

Jelenleg csak a ZIP-csomagfájlok támogatottak.

Projekt ZIP-csomag létrehozása

Fontos

A ZIP-csomag üzembe helyezéshez való létrehozásakor ne tartalmazza a gyökérkönyvtárat, hanem csak a benne lévő fájlokat és könyvtárakat. Ha ZIP-fájlként tölt le egy GitHub-adattárat, nem helyezheti üzembe a fájlt az App Service-ben. A GitHub további beágyazott könyvtárakat ad hozzá a legfelső szinten, amelyek nem működnek az App Service-vel.

Egy helyi terminálablakban keresse meg az alkalmazásprojekt gyökérkönyvtárát.

Ennek a könyvtárnak tartalmaznia kell a webalkalmazás bejegyzésfájlját, például index.html, index.php és app.js. Csomagkezelési fájlokat is tartalmazhat, például project.json, composer.json, package.json, bower.json és requirements.txt.

Ha nem szeretné, hogy az App Service üzembe helyezési automatizálást futtasson Önnek, futtassa az összes buildelési feladatot (például npm, , bower, gulp, composerés ), és pipgyőződjön meg arról, hogy rendelkezik az alkalmazás futtatásához szükséges összes fájllal. Erre a lépésre akkor van szükség, ha közvetlenül szeretné futtatni a csomagot.

Készítsen ZIP-archívumot a projekt minden eleméről. Projektek esetén dotnet ez minden a parancs kimeneti könyvtárában dotnet publish található (kivéve magát a kimeneti könyvtárat). A terminálban például a következő parancsot kell létrehoznia az aktuális könyvtár tartalmának ZIP-csomagjához:

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

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

A csomagból való futtatás engedélyezése

Az WEBSITE_RUN_FROM_PACKAGE alkalmazásbeállítás lehetővé teszi a csomagból való futtatásokat. A beállításhoz futtassa a következő parancsot az Azure CLI-vel.

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

WEBSITE_RUN_FROM_PACKAGE="1" segítségével futtathatja az alkalmazást egy helyi csomagból az alkalmazásba. Távoli csomagból is futtatható.

A csomag futtatása

A csomagok App Service-ben való futtatásának legegyszerűbb módja az Azure CLI az webapp deployment source config-zip parancs. Példa:

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

Mivel az WEBSITE_RUN_FROM_PACKAGE alkalmazásbeállítás be van állítva, ez a parancs nem nyeri ki a csomag tartalmát az alkalmazás D:\home\site\wwwroot könyvtárába. Ehelyett feltölti a ZIP-fájlt a D:\home\data\SitePackages fájlba, és létrehoz egy packagename.txt ugyanabban a könyvtárban, amely tartalmazza a futtatókörnyezetben betöltendő ZIP-csomag nevét. Ha más módon tölti fel a ZIP-csomagot (például FTP), manuálisan kell létrehoznia a D:\home\data\SitePackages könyvtárat és a packagename.txt fájlt.

A parancs az alkalmazást is újraindítja. Mivel WEBSITE_RUN_FROM_PACKAGE be van állítva, az App Service a feltöltött csomagot írásvédett wwwroot könyvtárként csatlakoztatja, és közvetlenül a csatlakoztatott könyvtárból futtatja az alkalmazást.

Futtatás külső URL-címről

Futtathat csomagot egy külső URL-címről, például az Azure Blob Storage-ből is. Az Azure Storage Explorer használatával csomagfájlokat tölthet fel a Blob Storage-fiókba. Használjon egy privát tárolót közös hozzáférésű jogosultságkóddal (SAS), vagy használjon felügyelt identitást , hogy az App Service futtatókörnyezete biztonságosan elérhesse a csomagot.

Miután feltöltötte a fájlt a Blob Storage-ba, és rendelkezik a fájl SAS URL-címével, állítsa be az WEBSITE_RUN_FROM_PACKAGE alkalmazásbeállítást az URL-címre. Az alábbi példa az Azure CLI használatával történik:

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"

Ha egy azonos nevű frissített csomagot tesz közzé a Blob Storage-ben, újra kell indítania az alkalmazást, hogy a frissített csomag be legyen töltve az App Service-be.

Csomag elérése az Azure Blob Storage-ban felügyelt identitás használatával

Az Azure Blob Storage konfigurálható úgy, hogy a Microsoft Entra ID azonosítójával engedélyezze a kérelmeket. Ez azt jelenti, hogy a lejárattal rendelkező SAS-kulcs létrehozása helyett az alkalmazás felügyelt identitására támaszkodhat. Alapértelmezés szerint az alkalmazás rendszer által hozzárendelt identitása lesz használatban. Ha felhasználó által hozzárendelt identitást szeretne megadni, beállíthatja az WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_ID alkalmazásbeállítást az identitás erőforrás-azonosítójára. A beállítás a "SystemAssigned" értéket is elfogadhatja, bár ez megegyezik a beállítás teljes kihagyásával.

A csomag lekérésének engedélyezése az identitással:

  1. Győződjön meg arról, hogy a blob privát hozzáférésre van konfigurálva.

  2. Adja meg az identitásnak a Storage Blob Adatolvasó szerepkört a csomagblob hatókörével. A szerepkör-hozzárendelés létrehozásával kapcsolatos részletekért lásd : Azure-szerepkör hozzárendelése a blobadatokhoz való hozzáféréshez.

  3. Állítsa be az WEBSITE_RUN_FROM_PACKAGE alkalmazásbeállítást a csomag blob URL-címére. Ez valószínűleg "https://{storage-account-name}.blob.core.windows.net/{container-name}/{path-to-package}" vagy hasonló lesz.

WebJob-fájlok üzembe helyezése csomagból való futtatáskor

A WebJob-fájlok kétféleképpen helyezhetők üzembe, ha engedélyezi az alkalmazások csomagból való futtatását:

  • Üzembe helyezés ugyanabban a ZIP-csomagban <project-root>\app_data\jobs\... , mint az alkalmazás: vegye fel őket a szokásos módon (amely megfelel a WebJobs rövid útmutatójában megadott üzembehelyezési útvonalnak\site\wwwroot\app_data\jobs\...).
  • Üzembe helyezés külön az alkalmazás ZIP-csomagjától: Mivel a szokásos üzembehelyezési útvonal \site\wwwroot\app_data\jobs\... írásvédett, nem helyezhet üzembe WebJob-fájlokat. Ehelyett helyezzen üzembe WebJob-fájlokat \site\jobs\..., amelyek nem csak olvashatók. A WebJobs üzembe lett helyezve \site\wwwroot\app_data\jobs\... , és \site\jobs\... mindkettő fut.

Feljegyzés

Ha \site\wwwroot írásvédetté válik, az olyan műveletek, mint a disable.job létrehozása, sikertelenek lesznek.

Hibaelhárítás

  • Ha közvetlenül egy csomagból fut, az írásvédetté válik wwwroot . Az alkalmazás hibaüzenetet kap, ha fájlokat próbál írni ebbe a könyvtárba.
  • A TAR és a GZIP formátumok nem támogatottak.
  • A ZIP-fájl legfeljebb 1 GB lehet
  • Ez a funkció nem kompatibilis a helyi gyorsítótárral.
  • A jobb hidegindítási teljesítmény érdekében használja a helyi Zip beállítást (WEBSITE_RUN_FROM_PACKAGE=1).

További hasznos források