Menjalankan aplikasi Anda di Azure App Service langsung dari paket ZIP

Di Azure App Service, Anda dapat menjalankan aplikasi langsung dari penyebaran file paket ZIP. Artikel ini menunjukkan cara mengaktifkan fungsi ini di aplikasi Anda.

Semua metode penyebaran lain di App Service memiliki kesamaan: file Anda disebarkan ke D:\home\site\wwwroot di aplikasi Anda (atau /home/site/wwwroot untuk aplikasi Linux). Karena direktori yang sama digunakan oleh aplikasi Anda pada waktu proses, sangat memungkinkan terjadi kegagalan penyebaran karena masalah kunci file, dan aplikasi berperilaku tidak terduga karena beberapa file belum diperbarui.

Sebaliknya, ketika Anda menjalankan secara langsung dari paket, file dalam paket tidak disalin ke direktori wwwroot. Sebagai gantinya, paket ZIP sendiri akan dipasang langsung sebagai direktori wwwroot baca-saja. Ada beberapa keuntungan menjalankan dari paket:

  • Menghilangkan masalah kunci file antara penyebaran dan waktu proses.
  • Memastikan hanya aplikasi yang disebarkan secara penuh yang berjalan kapan saja.
  • Dapat digunakan ke aplikasi produksi (dengan restart).
  • Meningkatkan performa penyebaran Azure Resource Manager.
  • Dapat mengurangi waktu mulai dingin, terutama untuk fungsi JavaScript dengan pohon paket npm besar.

Catatan

Saat ini, hanya file paket ZIP yang didukung.

Membuat paket ZIP proyek

Penting

Saat membuat paket ZIP untuk penyebaran, jangan sertakan direktori akar, tetapi hanya file dan direktori di dalamnya. Jika Anda mengunduh repositori GitHub sebagai file ZIP, Anda tidak dapat menyebarkan file tersebut apa adanya ke App Service. GitHub menambahkan direktori berlapis tambahan di tingkat atas, yang tidak berfungsi dengan App Service.

Di jendela terminal lokal, arahkan ke direktori akar proyek aplikasi Anda.

Direktori ini harus berisi file entri ke aplikasi web Anda, seperti index.html, index.php, dan app.js. Ini juga dapat berisi file manajemen paket seperti project.json,composer.json, package.json, bower.json, dan requirements.txt.

Kecuali Anda ingin Azure App Service menjalankan automasi penyebaran untuk Anda, jalankan semua tugas build (misalnya, npm, bower, gulp, composer, dan, pip) serta pastikan Anda memiliki semua file yang Anda butuhkan untuk menjalankan aplikasi. Langkah ini diperlukan jika Anda ingin menjalankan paket Anda secara langsung.

Buat arsip ZIP dari semua yang ada di proyek Anda. Untuk dotnet proyek, ini adalah segalanya dalam direktori dotnet publish output perintah (tidak termasuk direktori output itu sendiri). Misalnya, perintah berikut di terminal Anda untuk membuat paket ZIP konten direktori saat ini:

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

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

Memungkinkan menjalankan proses dari paket

Pengaturan aplikasi WEBSITE_RUN_FROM_PACKAGE memungkinkan untuk menjalankan proses dari paket. Untuk mengaturnya, jalankan perintah berikut dengan Azure CLI.

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

WEBSITE_RUN_FROM_PACKAGE="1" memungkinkan Anda menjalankan aplikasi dari paket lokal ke aplikasi Anda. Anda juga dapat menjalankan proses dari paket jarak jauh.

Menjalankan paket

Cara termudah untuk menjalankan paket di Layanan Aplikasi Anda adalah dengan perintah konfigurasi-zip sumber penyebaran az webapp . Misalnya:

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

Karena pengaturan aplikasi WEBSITE_RUN_FROM_PACKAGE diatur, perintah ini tidak mengekstrak konten paket ke direktori D:\home\site\wwwroot dari aplikasi Anda. Sebaliknya, ia mengunggah file ZIP apa adanya ke D:\home\data\SitePackages, dan membuat packagename.txt di direktori yang sama, yang berisi nama paket ZIP untuk dimuat pada waktu proses. Jika Anda mengunggah paket ZIP dengan cara yang berbeda (seperti FTP), Anda perlu membuat direktori D:\home\data\SitePackages dan filepackagename.txt secara manual.

Perintah juga memuat ulang aplikasi. Karena WEBSITE_RUN_FROM_PACKAGE diatur, App Service memasang paket yang diunggah sebagai direktori wwwroot baca-saja dan menjalankan aplikasi langsung dari direktori yang dipasang.

Jalankan dari URL eksternal sebagai gantinya

Anda juga dapat menjalankan paket dari URL eksternal, seperti Azure Blob Storage. Anda dapat menggunakan Azure Storage Explorer untuk mengunggah file paket ke akun penyimpanan Blob Anda. Anda harus menggunakan wadah penyimpanan pribadi dengan Shared Access Signature (SAS) atau menggunakan identitas terkelola untuk mengaktifkan runtime bahasa umum Layanan Aplikasi untuk mengakses paket dengan aman.

Setelah mengunggah file Anda ke penyimpanan Blob dan memiliki URL SAS untuk file, atur pengaturan aplikasi WEBSITE_RUN_FROM_PACKAGE ke URL. Contoh berikut melakukannya dengan menggunakan 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"

Jika Anda menerbitkan paket yang diperbarui dengan nama yang sama ke penyimpanan Blob, Anda perlu memulai ulang aplikasi agar paket yang diperbarui dimuat ke dalam App Service.

Mengakses paket di Azure Blob Storage menggunakan identitas terkelola

Azure Blob Storage dapat dikonfigurasi untuk mengotorisasi permintaan dengan ID Microsoft Entra. Ini berarti bahwa daripada membuat kunci SAS dengan kedaluwarsa, Anda dapat mengandalkan identitas terkelola aplikasi. Secara default, identitas yang ditetapkan sistem aplikasi akan digunakan. Jika Anda ingin menentukan identitas yang ditetapkan pengguna, Anda dapat mengatur pengaturan aplikasi WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_ID ke ID sumber daya dari identitas tersebut. Pengaturan juga dapat menerima "SystemAssigned" sebagai nilai, meskipun ini sama dengan menghilangkan pengaturan sama sekali.

Untuk mengaktifkan paket yang akan diambil menggunakan identitas:

  1. Pastikan blob dikonfigurasi untuk akses privat.

  2. Berikan identitas peran Storage Blob Data Reader dengan cakupan di atas blob paket. Lihat Menetapkan peran Azure untuk akses ke data blob untuk detail tentang membuat penetapan peran.

  3. Atur pengaturan aplikasi WEBSITE_RUN_FROM_PACKAGE ke URL blob paket. Ini kemungkinan akan berupa "https://{storage-account-name}.blob.core.windows.net/{container-name}/{path-to-package}" atau yang serupa.

Menyebarkan file WebJob saat menjalankan dari paket

Ada dua cara untuk menyebarkan file WebJob saat Anda mengaktifkan menjalankan aplikasi dari paket:

  • Sebarkan dalam paket ZIP yang sama dengan aplikasi Anda: sertakan seperti yang biasa Anda lakukan ( <project-root>\app_data\jobs\... yang memetakan ke jalur \site\wwwroot\app_data\jobs\... penyebaran seperti yang ditentukan dalam mulai cepat WebJobs).
  • Sebarkan secara terpisah dari paket ZIP aplikasi Anda: Karena jalur \site\wwwroot\app_data\jobs\... penyebaran yang biasa sekarang bersifat baca-saja, Anda tidak dapat menyebarkan file WebJob di sana. Sebagai gantinya, sebarkan file WebJob ke \site\jobs\..., yang tidak hanya dibaca. WebJobs disebarkan ke \site\wwwroot\app_data\jobs\... dan \site\jobs\... keduanya berjalan.

Catatan

Ketika \site\wwwroot menjadi baca-saja, operasi seperti pembuatan disable.job akan gagal.

Pemecahan Masalah

  • Menjalankan secara langsung dari paket membuat wwwroot baca-saja. Aplikasi Anda akan menerima error jika mencoba menulis file ke direktori ini.
  • Format TAR dan GZIP tidak didukung.
  • File ZIP dapat memuat paling banyak 1GB
  • Fitur ini tidak kompatibel dengan cache lokal.
  • Untuk meningkatkan performa cold-start, gunakan opsi Zip lokal (WEBSITE_RUN_FROM_PACKAGE =1).

Sumber daya lainnya