Penyebaran Zip untuk Azure Functions

Artikel ini menjelaskan cara menerapkan file proyek aplikasi fungsi Anda ke Azure dari file .zip (terkompresi). Anda mempelajari cara melakukan penerapan push, baik dengan menggunakan Azure CLI dan dengan menggunakan REST API. Azure Functions Core Tools juga menggunakan API penerapan ini saat menerbitkan proyek lokal ke Azure.

Penyebaran Zip juga merupakan cara mudah untuk menjalankan fungsi Anda dari paket penyebaran. Untuk mempelajari selengkapnya, lihat Menjalankan fungsi dari file paket di Azure.

Azure Functions memiliki berbagai opsi penerapan dan integrasi berkelanjutan yang diberikan oleh Azure App Service. Untuk informasi selengkapnya, lihat Penerapan berkelanjutan untuk Azure Functions.

Untuk mempercepat pengembangan, Anda mungkin merasa lebih mudah untuk menyebarkan file proyek aplikasi fungsi Langsung dari file .zip. API penerapan .zip ini mengambil konten file .zip dan mengekstrak konten ke dalam folder wwwroot aplikasi fungsi Anda. Penerapan file .zip ini menggunakan layanan Kudu yang sama yang mendukung penerapan berbasis integrasi berkelanjutan, termasuk:

  • Penghapusan file yang tersisa dari penerapan sebelumnya.
  • Penyesuaian penyebaran, termasuk menjalankan skrip penyebaran.
  • Log penyebaran.
  • Sinkronisasi pemicu fungsi di aplikasi fungsi Paket konsumsi.

Untuk informasi selengkapnya, lihat referensi penerapan .zip

Persyaratan file .zip penerapan

File .zip yang Anda gunakan untuk penerapan push harus berisi semua file yang diperlukan untuk menjalankan fungsi Anda.

Penting

Saat menggunakan penerapan .zip, file apa pun dari penerapan yang ada yang tidak ditemukan di file .zip dihapus dari aplikasi fungsi Anda.

Kode untuk semua fungsi dalam aplikasi fungsi tertentu terletak di folder proyek root yang berisi file konfigurasi host. File host.json berisi konfigurasi khusus waktu proses dan berada di folder akar aplikasi fungsi. Folder bin berisi paket dan pustaka kode lain yang diperlukan aplikasi fungsi. Struktur folder khusus yang diperlukan oleh aplikasi fungsi bergantung pada bahasa:

Semua fungsi dalam aplikasi fungsi harus berbagi tumpukan bahasa yang sama.

Aplikasi fungsi menyertakan semua file dan folder di direktori wwwroot. Penerapan .zip menyertakan konten direktori wwwroot, tetapi bukan direktori itu sendiri. Saat menerapkan proyek pustaka kelas C#, Anda harus menyertakan file pustaka yang dikompilasi dan dependensi dalam subfolder bin di paket .zip Anda.

Saat mengembangkan di komputer lokal, Anda dapat membuat file .zip folder proyek aplikasi fungsi secara manual menggunakan fungsi kompresi .zip bawaan atau alat pihak ketiga.

Menerapkan dengan menggunakan Azure CLI

Anda dapat menggunakan Azure CLI untuk memicu penerapan push. Dorong penerapan file .zip ke aplikasi fungsi Anda dengan menggunakan perintah az functionapp deployment source config-zip. Untuk menggunakan perintah ini, Anda harus menggunakan Azure CLI versi 2.0.21 atau yang lebih baru. Untuk melihat versi Azure CLI yang Anda gunakan, gunakan perintah az --version.

Dalam perintah berikut, ganti tempat penampung <zip_file_path> dengan jalur ke lokasi file .zip Anda. Selain itu, ganti <app_name> dengan nama unik aplikasi fungsi Anda dan ganti <resource_group> dengan nama grup sumber daya Anda.

az functionapp deployment source config-zip -g <resource_group> -n \
<app_name> --src <zip_file_path>

Perintah ini menerapkan file proyek dari file .zip unduhan ke aplikasi fungsi Anda di Azure. Perintah ini kemudian menghidupkan ulang aplikasi. Untuk melihat daftar penerapan untuk aplikasi fungsi ini, Anda harus menggunakan REST API.

Saat menggunakan Azure CLI di komputer lokal Anda, <zip_file_path> adalah jalur ke file .zip di komputer Anda. Anda juga dapat menjalankan Azure CLI di Azure Cloud Shell. Saat menggunakan Cloud Shell, Anda harus mengunggah penerapan file .zip terlebih dahulu ke akun Azure Files yang terkait dengan Cloud Shell Anda. Dalam hal ini, <zip_file_path> adalah lokasi penyimpanan yang digunakan akun Cloud Shell Anda. Untuk informasi selengkapnya, lihat Menyimpan file di Azure Cloud Shell.

Menyebarkan file ZIP dengan REST API

Anda dapat menggunakan layanan penyebaran REST API untuk menyebarkan file .zip ke aplikasi Anda di Azure. Untuk menyebarkan, kirim permintaan POST ke https://<app_name>.scm.azurewebsites.net/api/zipdeploy. Permintaan POST harus berisi file .zip di isi pesan. Kredensial penyebaran untuk aplikasi Anda disediakan dalam permintaan dengan menggunakan autentikasi HTTP BASIC. Untuk informasi selengkapnya, lihat referensi penyebaran push .zip.

Untuk autentikasi HTTP BASIC, Anda memerlukan kredensial penyebaran App Service Anda. Untuk melihat cara mengatur kredensial penyebaran Anda, lihat Mengatur dan mengatur ulang kredensial tingkat pengguna.

Dengan cURL

Contoh berikut menggunakan alat cURL untuk menyebarkan file .zip. Ganti tempat penampung <deployment_user>, <zip_file_path>, dan <app_name>. Ketika diminta oleh cURL, masukkan kata sandi.

curl -X POST -u <deployment_user> --data-binary "@<zip_file_path>" https://<app_name>.scm.azurewebsites.net/api/zipdeploy

Permintaan ini memicu penyebaran push dari file .zip yang diunggah. Anda dapat meninjau penyebaran saat ini dan sebelumnya dengan menggunakan titik akhir https://<app_name>.scm.azurewebsites.net/api/deployments, seperti yang ditunjukkan pada contoh cURL berikut. Sekali lagi, ganti <app_name> dengan nama aplikasi Anda dan <deployment_user> dengan nama pengguna kredensial penyebaran Anda.

curl -u <deployment_user> https://<app_name>.scm.azurewebsites.net/api/deployments

Penyebaran zip asinkron

Saat menyebarkan secara sinkron, Anda mungkin menerima kesalahan yang terkait dengan waktu koneksi habis. Tambahkan ?isAsync=true ke URL untuk menyebarkan secara asinkron. Anda akan segera menerima respons setelah file zip diunggah dengan header Location yang menunjuk ke URL status penyebaran yang dapat dijajaki. Saat polling URL tersedia di header Location, Anda akan menerima respons HTTP 202 (Diterima) saat proses sedang berlangsung dan respons HTTP 200 (OK) setelah arsip diperluas dan penyebaran telah berhasil diselesaikan.

Autentikasi Microsoft Entra

Alternatif untuk menggunakan autentikasi HTTP BASIC untuk penyebaran zip adalah dengan menggunakan identitas Microsoft Entra. Identitas Microsoft Entra mungkin diperlukan jika autentikasi HTTP BASIC dinonaktifkan untuk situs SCM.

Token akses Microsoft Entra yang valid untuk pengguna atau perwakilan layanan yang melakukan penyebaran akan diperlukan. Token akses dapat diambil menggunakan perintah Azure CLI az account get-access-token. Token akses akan digunakan di header Autentikasi permintaan HTTP POST.

curl -X POST \
    --data-binary "@<zip_file_path>" \
    -H "Authorization: Bearer <access_token>" \
    "https://<app_name>.scm.azurewebsites.net/api/zipdeploy"

Dengan PowerShell

Contoh berikut menggunakan Publish-AzWebapp untuk mengunggah file .zip. Ganti tempat penampung <group-name>, <app-name>, dan <zip-file-path>.

Publish-AzWebapp -ResourceGroupName <group-name> -Name <app-name> -ArchivePath <zip-file-path>

Permintaan ini memicu penyebaran push dari file .zip yang diunggah.

Untuk meninjau penyebaran saat ini dan sebelumnya, jalankan perintah berikut. Sekali lagi, ganti tempat penampung <deployment-user>, <deployment-password>, dan <app-name>.

$username = "<deployment-user>"
$password = "<deployment-password>"
$apiUrl = "https://<app-name>.scm.azurewebsites.net/api/deployments"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username, $password)))
$userAgent = "powershell/1.0"
Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -UserAgent $userAgent -Method GET

Menyebarkan dengan menggunakan Templat ARM

Anda dapat menggunakan ekstensi templat ZipDeploy ARM untuk mendorong file .zip ke aplikasi fungsi Anda.

Contoh Templat ARM ZipDeploy

Templat ini mencakup slot produksi dan penahapan dan disebarkan ke satu atau yang lain. Biasanya, Anda akan menggunakan templat ini untuk menyebarkan ke slot penahapan dan kemudian menukar untuk menjalankan paket zip baru Anda di slot produksi.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "appServiceName": {
      "type": "string"
    },
    "deployToProduction": {
      "type": "bool",
      "defaultValue": false
    },
    "slot": {
      "type": "string",
      "defaultValue": "staging"
    },
    "packageUri": {
      "type": "secureString"
    }
  },
  "resources": [
    {
      "condition": "[parameters('deployToProduction')]",
      "type": "Microsoft.Web/sites/extensions",
      "apiVersion": "2021-02-01",
      "name": "[format('{0}/ZipDeploy', parameters('appServiceName'))]",
      "properties": {
        "packageUri": "[parameters('packageUri')]",
        "appOffline": true
      }
    },
    {
      "condition": "[not(parameters('deployToProduction'))]",
      "type": "Microsoft.Web/sites/slots/extensions",
      "apiVersion": "2021-02-01",
      "name": "[format('{0}/{1}/ZipDeploy', parameters('appServiceName'), parameters('slot'))]",
      "properties": {
        "packageUri": "[parameters('packageUri')]",
        "appOffline": true
      }
    }
  ]
}

Untuk penyebaran awal, Anda akan menyebarkan langsung ke slot produksi. Untuk informasi selengkapnya, lihat Penyebaran slot.

Menjalankan fungsi dari paket penerapan

Anda juga dapat memilih untuk menjalankan fungsi secara langsung dari file paket penerapan. Metode ini melompati langkah penerapan menyalin file dari paket ke direktori wwwroot aplikasi fungsi Anda. Sebagai gantinya, file paket dipasang oleh runtime Functions dan konten direktori wwwroot menjadi baca-saja.

Penerapan Zip terintegrasi dengan fitur ini, yang dapat Anda aktifkan dengan mengeset pengaturan aplikasi fungsi WEBSITE_RUN_FROM_PACKAGE ke nilai 1. Untuk informasi selengkapnya, lihat Menjalankan fungsi Anda dari file paket penerapan.

Kustomisasi penyebaran

Proses penyebaran mengasumsikan bahwa .zip file yang Anda dorong berisi aplikasi siap dijalankan. Secara default, tidak ada kustomisasi yang dijalankan. Untuk mengaktifkan proses build yang sama dengan integrasi berkelanjutan, tambahkan yang berikut ini ke pengaturan aplikasi Anda:

SCM_DO_BUILD_DURING_DEPLOYMENT=true

Saat Anda menggunakan .zip mendorong, pengaturan ini false secara default. Defaultnya adalah true untuk penyebaran integrasi berkelanjutan. Saat diatur ke true, pengaturan terkait penyebaran Anda digunakan selama penyebaran. Anda dapat mengonfigurasi pengaturan ini baik sebagai pengaturan aplikasi atau dalam file konfigurasi .deployment yang terletak di akar file .zip Anda. Untuk informasi selengkapnya, lihat Pengaturan terkait repositori dan penyebaran dalam referensi penyebaran.

Unduh file aplikasi fungsi Anda

Jika Anda membuat fungsi menggunakan editor di portal Microsoft Azure, Anda dapat mengunduh proyek aplikasi fungsi yang ada sebagai file .zip dengan salah satu cara berikut:

  • Dari portal Microsoft Azure:

    1. Masuk ke portal Microsoft Azure, lalu buka aplikasi fungsi Anda.

    2. Pada tab Gambaran Umum, pilih Unduh konten aplikasi. Pilih opsi pengunduhan Anda, lalu pilih Unduh.

      Unduh proyek aplikasi fungsi

      File .zip yang diunduh memiliki format yang benar untuk diterbitkan ulang ke aplikasi fungsi Anda dengan menggunakan penerapan push .zip. Pengunduhan portal juga dapat menambahkan file yang diperlukan untuk membuka aplikasi fungsi Anda secara langsung di Visual Studio.

  • Menggunakan REST API:

    Gunakan API GET penerapan berikut untuk mengunduh file dari proyek <function_app> Anda:

    https://<function_app>.scm.azurewebsites.net/api/zip/site/wwwroot/
    

    Menyertakan /site/wwwroot/ memastikan file zip Anda hanya menyertakan file proyek aplikasi fungsi dan bukan seluruh situs. Jika belum masuk ke Azure, Anda akan diminta untuk melakukannya.

Anda juga dapat mengunduh file .zip dari repositori GitHub. Saat Anda mengunduh repositori GitHub sebagai file .zip, GitHub menambahkan tingkat folder tambahan untuk cabang. Tingkat folder tambahan ini berarti Anda tidak dapat menerapkan file .zip secara langsung saat Anda mengunduhnya dari GitHub. Jika Anda menggunakan repositori GitHub untuk memelihara aplikasi fungsi, Anda harus menggunakan integrasi berkelanjutan untuk menerapkan aplikasi Anda.

Langkah berikutnya