Azure İşlevleri için zip dosyasıyla dağıtım

Bu makalede, işlev uygulaması proje dosyalarınızı bir .zip (sıkıştırılmış) dosyadan Azure'a dağıtma açıklanmaktadır. Hem Azure CLI kullanarak hem de REST API'lerini kullanarak anında iletme dağıtımı yapmayı öğrenirsiniz. Azure İşlevleri Core Tools, yerel bir projeyi Azure'da yayımlarken de bu dağıtım API'lerini kullanır.

Zip dağıtımı, işlevlerinizi dağıtım paketinden çalıştırmanın kolay bir yoludur. Daha fazla bilgi edinmek için bkz . Azure'da bir paket dosyasından işlevlerinizi çalıştırma.

Azure İşlevleri, Azure Uygulaması Hizmeti tarafından sağlanan tüm sürekli dağıtım ve tümleştirme seçeneklerine sahiptir. Daha fazla bilgi için bkz. Azure İşlevleri için sürekli dağıtım.

Geliştirmeyi hızlandırmak için işlev uygulaması proje dosyalarınızı doğrudan bir .zip dosyasından dağıtmayı daha kolay bulabilirsiniz. .zip dağıtım API'si bir .zip dosyasının içeriğini alır ve içeriği işlev uygulamanızın wwwroot klasörüne ayıklar. Bu .zip dosya dağıtımı, aşağıdakiler dahil olmak üzere sürekli tümleştirme tabanlı dağıtımları destekleyen aynı Kudu hizmetini kullanır:

  • Önceki dağıtımlardan kalan dosyaların silinmesi.
  • Dağıtım betiklerini çalıştırma da dahil olmak üzere dağıtım özelleştirmesi.
  • Dağıtım günlükleri.
  • Tüketim planı işlev uygulamasında işlev tetikleyicilerini eşitleme.

Daha fazla bilgi için bkz . .zip dağıtım başvurusu.

Dağıtım .zip dosya gereksinimleri

Gönderme dağıtımı için kullandığınız .zip dosyası işlevinizi çalıştırmak için gereken tüm dosyaları içermelidir.

Önemli

.zip dağıtımı kullandığınızda, .zip dosyasında bulunmayan mevcut bir dağıtımdaki tüm dosyalar işlev uygulamanızdan silinir.

Belirli bir işlev uygulamasındaki tüm işlevlerin kodu, konak yapılandırma dosyası içeren bir kök proje klasöründe bulunur. host.json dosyası çalışma zamanına özgü yapılandırmalar içerir ve işlev uygulamasının kök klasöründedir. Bir bölme klasörü, işlev uygulamasının gerektirdiği paketleri ve diğer kitaplık dosyalarını içerir. İşlev uygulamasının gerektirdiği belirli klasör yapıları dile bağlıdır:

İşlev uygulamasındaki tüm işlevlerin aynı dil yığınını paylaşması gerekir.

İşlev uygulaması dizindeki tüm dosya ve klasörleri wwwroot içerir. .zip dosya dağıtımı dizinin içeriğini wwwroot içerir, ancak dizinin kendisini içermez. C# sınıf kitaplığı projesini dağıtırken, derlenmiş kitaplık dosyalarını ve bağımlılıklarını .zip paketinizdeki bir bin alt klasöre eklemeniz gerekir.

Yerel bir bilgisayarda geliştirme yaparken, yerleşik .zip sıkıştırma işlevini veya üçüncü taraf araçlarını kullanarak işlev uygulaması proje klasörünün .zip dosyasını el ile oluşturabilirsiniz.

Azure CLI'yi kullanarak dağıtma

Azure CLI'yi kullanarak bir anında iletme dağıtımı tetikleyebilirsiniz. az functionapp deployment source config-zip komutunu kullanarak işlev uygulamanıza bir .zip dosyası dağıtın. Bu komutu kullanmak için Azure CLI 2.0.21 veya sonraki bir sürümü kullanmanız gerekir. Hangi Azure CLI sürümünü kullandığınızı görmek için az --version komutunu kullanın.

Aşağıdaki komutta yer tutucusunu <zip_file_path> .zip dosyanızın konumuyla değiştirin. Ayrıca değerini <app_name> işlev uygulamanızın benzersiz adıyla değiştirin ve değerini kaynak grubunuzun adıyla değiştirin <resource_group> .

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

Bu komut, indirilen .zip dosyasındaki proje dosyalarını Azure'daki işlev uygulamanıza dağıtır. Ardından uygulamayı yeniden başlatır. Bu işlev uygulamasının dağıtım listesini görüntülemek için REST API'lerini kullanmanız gerekir.

Yerel bilgisayarınızda Azure CLI kullanırken, <zip_file_path> bilgisayarınızdaki .zip dosyasının yoludur. Azure CLI'sini Azure Cloud Shell'de de çalıştırabilirsiniz. Cloud Shell'i kullanırken, önce dağıtım .zip dosyanızı Cloud Shell'inizle ilişkili Azure Dosyalar hesabına yüklemeniz gerekir. Bu durumda, <zip_file_path> Cloud Shell hesabınızın kullandığı depolama konumudur. Daha fazla bilgi için bkz . Azure Cloud Shell'de dosyaları kalıcı hale geçirme.

REST API'leri ile ZIP dosyası dağıtma

.zip dosyasını Azure'daki uygulamanıza dağıtmak için dağıtım hizmeti REST API'lerini kullanabilirsiniz. Dağıtmak için adresine bir POST isteği https://<app_name>.scm.azurewebsites.net/api/zipdeploygönderin. POST isteği, ileti gövdesinde .zip dosyasını içermelidir. Uygulamanızın dağıtım kimlik bilgileri, HTTP BASIC kimlik doğrulaması kullanılarak istekte belirtilir. Daha fazla bilgi için bkz . .zip gönderme dağıtımı başvurusu.

HTTP BASIC kimlik doğrulaması için App Service dağıtım kimlik bilgileriniz gerekir. Dağıtım kimlik bilgilerinizi ayarlamayı görmek için bkz . Kullanıcı düzeyi kimlik bilgilerini ayarlama ve sıfırlama.

cURL ile

Aşağıdaki örnekte bir .zip dosyası dağıtmak için cURL aracı kullanılır. , <zip_file_path>ve <app_name>yer tutucularını <deployment_user>değiştirin. cURL tarafından istendiğinde parolayı yazın.

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

Bu istek, karşıya yüklenen .zip dosyasından gönderim dağıtımını tetikler. Aşağıdaki cURL örneğinde gösterildiği gibi uç noktayı kullanarak https://<app_name>.scm.azurewebsites.net/api/deployments geçerli ve geçmiş dağıtımları gözden geçirebilirsiniz. Öğesini uygulamanızın adıyla ve <deployment_user> dağıtım kimlik bilgilerinizin kullanıcı adıyla değiştirin<app_name>.

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

Zaman uyumsuz zip dağıtımı

Zaman uyumlu olarak dağıtılırken bağlantı zaman aşımlarıyla ilgili hatalar alabilirsiniz. Zaman uyumsuz olarak dağıtmak için URL'ye ekleyin ?isAsync=true . Zip dosyası karşıya yüklenir yüklenmez, yoklanabilir dağıtım durumu URL'sine işaret eden bir üst bilgiyle bir Location yanıt alırsınız. Üst bilgide sağlanan URL'yi Location yoklarken, işlem devam ederken bir HTTP 202 (Kabul Edildi) yanıtı ve arşiv genişletildikten ve dağıtım başarıyla tamamlandıktan sonra bir HTTP 200 (Tamam) yanıtı alırsınız.

Microsoft Entra doğrulaması

Zip dağıtımı için HTTP BASIC kimlik doğrulamasını kullanmanın bir alternatifi, Microsoft Entra kimliği kullanmaktır. SCM sitesi için HTTP BASIC kimlik doğrulaması devre dışı bırakılırsa Microsoft Entra kimliği gerekebilir.

Dağıtımı gerçekleştiren kullanıcı veya hizmet sorumlusu için geçerli bir Microsoft Entra erişim belirteci gerekir. Erişim belirteci, Azure CLI'nın az account get-access-token komutu kullanılarak alınabilir. Erişim belirteci, HTTP POST isteğinin Kimlik doğrulaması üst bilgisinde kullanılır.

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

PowerShell ile

Aşağıdaki örnekte Publish-AzWebapp .zip dosyasını karşıya yükleme işlemi gerçekleştirilir. , <app-name>ve <zip-file-path>yer tutucularını <group-name>değiştirin.

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

Bu istek, karşıya yüklenen .zip dosyasından gönderim dağıtımını tetikler.

Geçerli ve geçmiş dağıtımları gözden geçirmek için aşağıdaki komutları çalıştırın. Yeniden , <deployment-password>ve <app-name> yer tutucularını değiştirin<deployment-user>.

$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

ARM Şablonu kullanarak dağıtma

.zip dosyanızı işlev uygulamanıza göndermek için ZipDeploy ARM şablon uzantısını kullanabilirsiniz.

Örnek ZipDeploy ARM Şablonu

Bu şablon hem üretim hem de hazırlama yuvasını içerir ve birine veya diğerine dağıtır. Normalde, hazırlama yuvasına dağıtmak ve ardından yeni zip paketinizi üretim yuvasında çalıştırmak için değiştirmek için bu şablonu kullanırsınız.

{
  "$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
      }
    }
  ]
}

İlk dağıtım için doğrudan üretim yuvasına dağıtabilirsiniz. Daha fazla bilgi için bkz . Yuva dağıtımları.

Dağıtım paketinden işlevleri çalıştırma

İşlevlerinizi doğrudan dağıtım paketi dosyasından çalıştırmayı da seçebilirsiniz. Bu yöntem, paketten işlev uygulamanızın dizinine dosya kopyalama dağıtım adımını wwwroot atlar. Bunun yerine, paket dosyası İşlevler çalışma zamanı tarafından bağlanır ve dizinin içeriği wwwroot salt okunur hale gelir.

Zip dağıtımı, işlev uygulaması ayarını WEBSITE_RUN_FROM_PACKAGE değerine 1ayarlayarak etkinleştirebileceğiniz bu özellik ile tümleşir. Daha fazla bilgi için bkz . İşlevlerinizi dağıtım paketi dosyasından çalıştırma.

Dağıtım özelleştirmesi

Dağıtım işlemi, gönderdiğiniz .zip dosyasının çalışmaya hazır bir uygulama içerdiğini varsayar. Varsayılan olarak hiçbir özelleştirme çalıştırılır. Sürekli tümleştirme ile elde ettiğiniz derleme işlemlerini etkinleştirmek için uygulama ayarlarınıza aşağıdakileri ekleyin:

SCM_DO_BUILD_DURING_DEPLOYMENT=true

.zip anında iletme dağıtımı kullandığınızda, bu ayar varsayılan olarak yanlıştır. Sürekli tümleştirme dağıtımları için varsayılan değer geçerlidir. True olarak ayarlandığında dağıtımla ilgili ayarlarınız dağıtım sırasında kullanılır. Bu ayarları uygulama ayarları olarak veya .zip dosyanızın kökünde bulunan bir .deployment yapılandırma dosyasında yapılandırabilirsiniz. Daha fazla bilgi için bkz . Dağıtım başvurusundaki Depo ve dağıtımla ilgili ayarlar .

İşlev uygulama dosyalarınızı indirme

İşlevlerinizi Azure portalındaki düzenleyiciyi kullanarak oluşturduysanız, mevcut işlev uygulaması projenizi şu yollardan biriyle .zip dosyası olarak indirebilirsiniz:

  • Azure portalından:

    1. Azure portalında oturum açın ve ardından işlev uygulamanıza gidin.

    2. Genel Bakış sekmesinde Uygulama içeriğini indir'i seçin. İndirme seçeneklerinizi ve ardından İndir'i seçin.

      İşlev uygulaması projesini indirme

      İndirilen .zip dosyası, .zip anında iletme dağıtımı kullanılarak işlev uygulamanıza yeniden yayımlanacak doğru biçimdedir. Portal indirmesi, işlev uygulamanızı doğrudan Visual Studio'da açmak için gereken dosyaları da ekleyebilir.

  • REST API'lerini kullanma:

    Dosyaları projenizden <function_app> indirmek için aşağıdaki dağıtım GET API'sini kullanın:

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

    Dahil etme /site/wwwroot/ , zip dosyanızın sitenin tamamını değil yalnızca işlev uygulaması proje dosyalarını içerdiğinden emin olur. Azure'da henüz oturum açmadıysanız bunu yapmanız istenir.

GitHub deposundan bir .zip dosyası da indirebilirsiniz. GitHub deposunu .zip dosyası olarak indirdiğinizde GitHub, dal için ek bir klasör düzeyi ekler. Bu ek klasör düzeyi, .zip dosyasını GitHub'dan indirdiğiniz gibi doğrudan dağıtamazsınız. İşlev uygulamanızı korumak için GitHub deposu kullanıyorsanız uygulamanızı dağıtmak için sürekli tümleştirme kullanmanız gerekir.

Sonraki adımlar