Uygulamanızı doğrudan bir ZIP paketinden Azure App Service'da çalıştırma

Uyarı

Paketten çalıştırma, Python uygulamalar için desteklenmez. Python kodunuzun ZIP dosyasını dağıtırken, Azure derleme otomasyonunun etkinleştirilmesi için bir bayrak ayarlamanız gerekir. Derleme otomasyonu uygulamanız için Python sanal ortamı oluşturur ve gerekli gereksinimleri ve paketi yükler. Daha fazla detay için build automation'a bakın.

Paketten çalıştırma, Azure App Service'da Java uygulamalar için de desteklenmez. Yerleşik Java çalışma zamanları (Java SE, Tomcat ve JBoss EAP), başlangıçta uygulama dizinine yazma erişimi gerektirirken, Paketten çalıştır uygulaması içeriğini salt okunur bir dosya sistemi olarak bağlar.

Azure App Service'da uygulamalarınızı doğrudan bir dağıtım ZIP paketi dosyasından çalıştırabilirsiniz. Bu makale, uygulamanızda bu işlevselliği nasıl etkinleştireceğinizi gösterir.

App Service'teki diğer tüm dağıtım yöntemlerinin ortak bir özelliği vardır ve sıkıştırma dosyalarınız uygulamanızda D:\home\site\wwwroot dizinine (veya Linux uygulamaları için /home/site/wwwroot ) dağıtılır. Çalışma zamanında uygulamanız tarafından aynı dizin kullanıldığından, dosya kilidi çakışmaları nedeniyle dağıtımın başarısız olması ve bazı dosyaların henüz güncelleştirilememesi nedeniyle uygulamanın öngörülemez şekilde davranması mümkündür. Bu ayarı etkinleştirmek için değişkene WEBSITE_RUN_FROM_PACKAGE herhangi bir değer atamanız gerekmez veya tamamen kaldırabilirsiniz.

Buna karşılık, doğrudan bir ZIP paketinden çalıştırdığınızda, paketteki dosyalar wwwroot dizinine kopyalanmamıştır. Bunun yerine, ZIP paketi kendisi doğrudan salt okunur wwwroot dizini olarak monte edilir. Bu ayarı etkinleştirmek için =1 değerini ayarlayın WEBSITE_RUN_FROM_PACKAGEveya ZIP dosyasının URL'sini sağlayın. Bir paketten doğrudan çalıştırmanın birkaç faydası vardır.

  • Kurulum ve çalışma zamanı arasında oluşan dosya kilidi çatışmalarını ortadan kaldırır.
  • Sadece tam dağıtılmış uygulamaların herhangi bir zamanda çalıştığından emin olur.
  • Üretim uygulamasına (yeniden başlatma ile) dağıtılabilir.
  • Azure Resource Manager dağıtımlarının performansını artırır.
  • Soğuk başlatma sürelerini azaltabilir, özellikle büyük npm paket ağaçlarına sahip JavaScript işlevleri için.

Uyarı

Şu anda yalnızca ZIP paket dosyaları desteklenmektedir.

Proje ZIP paketi oluşturun

Önemli

Dağıtım için ZIP paketini oluştururken, kök dizini dahil etmeyin. Yalnızca kök dizindeki dosyaları ve dizinleri dahil edin. bir GitHub deposunu ZIP dosyası olarak indirirseniz, bu dosya as-is App Service'e dağıtamazsınız. GitHub, App Service ile çalışmayan iç içe dizinleri en üst düzeye ekler.

Uçbirim penceresinde, uygulama projenizin kök dizinine gidin.

Bu dizin, index.html, index.php ve app.js gibi web uygulamanızın giriş dosyasını içermelidir. Ayrıca project.json, composer.json, package.json, bower.json ve requirements.txt gibi paket yönetim dosyaları da içerebilir.

App Service'in sizin için dağıtım otomasyonunu çalıştırmasını istemiyorsanız, tüm derleme görevlerini çalıştırın. Örneğin: npm, bower, gulp, composerve pip. Uygulamayı çalıştırmak için gerekli tüm dosyalara sahip olduğunuzdan emin olun. Bu adım, paketinizi doğrudan çalıştırmak istiyorsanız gereklidir.

Projenizdeki her şeyi içeren bir ZIP arşivi oluşturun. dotnet projeleri için, dotnet publish komutunun çıkış dizinindeki her şeyi ekleyin, ancak çıkış dizininin kendisini hariç tutun. Örneğin, geçerli dizinin içeriğini içeren bir ZIP paketi oluşturmak için terminalinize aşağıdaki komutu girin:

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

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

ZIP paketinden çalıştırmayı etkinleştirme

Uygulama WEBSITE_RUN_FROM_PACKAGE ayarı, zip paketinden çalıştırmayı etkinleştirir. Ayarlamak için Azure CLI ile aşağıdaki komutu çalıştırın.

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

WEBSITE_RUN_FROM_PACKAGE="1" uygulamanızı yerel bir ZIP paketinden uygulamanıza çalıştırmanıza olanak tanır. Uzak bir paket üzerinden çalıştırabilirsiniz.

ZIP paketini çalıştırma

App Service'inizde ZIP paketi çalıştırmanın en kolay yolu Azure CLI az webapp deployment source config-zip komutudur. Örneğin:

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

Uygulama ayarı ayarlandığından WEBSITE_RUN_FROM_PACKAGE , bu komut zip paketi içeriğini uygulamanızın D:\home\site\wwwroot dizinine ayıklamaz. Bunun yerine, as-is ZIP dosyasını D:\home\data\SitePackages'a yükler ve aynı dizinde çalışma zamanında yüklenecek ZIP paketinin adını içeren bir packagename.txt oluşturur. ZIP paketinizi farklı bir şekilde yüklediğinizde (örneğin FTP gibi), D:\home\data\SitePackages dizinini ve packagename.txt dosyasını manuel olarak oluşturmanız gerekir.

Komut ayrıca uygulamayı yeniden başlatır. Ayarlanmış olan WEBSITE_RUN_FROM_PACKAGE nedeniyle, App Service yüklenen paketi salt okunur wwwroot dizini olarak iliştirir ve uygulamayı bu iliştirilmiş dizinden doğrudan çalıştırır.

Dış URL'den çalıştırın

Zip paketini Azure Blob Depolama gibi bir dış URL'den de çalıştırabilirsiniz. Zip paketi dosyalarını Blob depolama hesabınıza yüklemek için Azure Depolama Gezgini kullanabilirsiniz. App Service çalışma zamanının ZIP paketine güvenli bir şekilde erişmesini sağlamak için Paylaşılan Erişim İmzası (SAS) içeren özel bir depolama kapsayıcısı veya yönetilen kimlik kullanmanız gerekir.

Uyarı

Şu anda, yerel bir ZIP paketi çalıştıran mevcut bir App Service kaynağı, uzak bir ZIP paketinden çalıştırılmaya geçirilemiyor. Dış URL'den çalışacak şekilde yapılandırılmış yeni bir App Service kaynağı oluşturmanız gerekir.

Dosyanızı Blob depolama alanına yükledikten ve dosya için bir SAS URL'si aldıktan sonra, WEBSITE_RUN_FROM_PACKAGE uygulama ayarını URL'ye ayarlayın. URL'nin ile .zipsona erdiğinden emin olun. Aşağıdaki örnek bunu Azure CLI kullanarak yapar:

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"

Blob depolama alanına aynı adla güncellenmiş bir paket yüklerseniz, güncellenmiş paketin App Service'e yüklenebilmesi için uygulamanızı yeniden başlatmanız gerekir.

Yönetilen kimlik kullanarak Azure Blob Depolama paketine erişme

Microsoft Entra ID ile istekleri authorize etmek için Azure Blob Depolama yapılandırabilirsiniz. Bu yapılandırma, son kullanma tarihi olan bir SAS anahtarı oluşturmak yerine uygulamanın yönetilen kimliğine güvenebileceğiniz anlamına gelir.

Varsayılan olarak, uygulamanın sistem tarafından atanan kimliği kullanılır. Kullanıcı tarafından atanan bir kimlik belirtmek istiyorsanız, WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_ID uygulama ayarını o kimliğin kaynak kimliğiyle ayarlayabilirsiniz. Ayar, SystemAssigned'i bir değer olarak da kabul edebilir, bu da ayarın devre dışı bırakılmasına eşdeğerdir.

Paketin kimlik kullanılarak alınabilmesi için:

  1. Blobun özel erişim için yapılandırıldığından emin olun.

  2. Kimliğe, paket blobunun kapsamı dahilinde Storage Blob Data Reader rolünü verin. Rol atamasını oluşturmayla ilgili ayrıntılar için bkz. Blob verilerine erişim için Azure rolü atama.

  3. Paket'in blob URL'sini WEBSITE_RUN_FROM_PACKAGE uygulama ayarına ayarlayın. Bu URL genellikle https://<storage-account-name>.blob.core.windows.net/<container-name>/<path-to-package> veya benzeri bir biçimdedir.

  4. Kullanıcı tarafından atanan bir kimlik belirtmek istiyorsanız, WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_ID uygulama ayarını o kimliğin kaynak kimliğiyle ayarlayabilirsiniz. Bu ayar SystemAssigned değerini de kabul edebilir ancak bu, ayarın tamamen atlanması ile aynıdır. Kaynak kimliği, Azure bir kaynağın standart gösterimidir. Kullanıcı tarafından atanan yönetilen kimlik için bu /subscriptions/subid/resourcegroups/rg-name/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity-name olacaktır. Kullanıcı tarafından atanan yönetilen kimliğin kaynak kimliği,kullanıcı tarafından atanan yönetilen kimliğin>> Kimliği bölümünden alınabilir.

"Paket çalıştırılırken WebJob dosyalarını dağıt"

WebJob dosyalarını dağıtmanın iki yolu vardır: paketten uygulama çalıştırmayı etkinleştirdiğinizde.

  • Uygulamanızla aynı ZIP paketine dağıtın: Bunları normalde <project-root>\app_data\jobs\... yaptığınız gibi ekleyin (\site\wwwroot\app_data\jobs\... belirtildiği gibi dağıtım yoluna eşlenir).
  • Uygulamanızın ZIP paketinden ayrı olarak dağıtın: Her zamanki dağıtım yolu \site\wwwroot\app_data\jobs\... artık salt okunur olduğundan, WebJob dosyalarını oraya dağıtamazsınız. Bunun yerine, WebJob dosyalarını okuma/yazma izinli olan \site\jobs\...alanına dağıtın. WebJobs, \site\wwwroot\app_data\jobs\... ve \site\jobs\...'ye dağıtıldıktan sonra her ikisi de çalışır.

Uyarı

\site\wwwroot salt okunur hale geldiğinde disable.job oluşturma gibi işlemler başarısız olacaktır.

Sorun Giderme

  • Bir paketten doğrudan çalıştırmak wwwroot yalnızca okunabilir hale getirir. Uygulamanız bu dizine dosya yazmayı denerse, bir hata alacaktır.
  • TAR ve GZIP formatları desteklenmiyor.
  • ZIP dosyası en fazla 1 GB olabilir.
  • Bu özellik yerel önbellekle uyumlu değildir.
  • Soğuk başlangıç performansını iyileştirmek için yerel Zip seçeneğini kullanın (WEBSITE_RUN_FROM_PACKAGE=1).