Aracılığıyla paylaş


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 Azure'daki bir paket dosyasından çalıştırmanın kolay bir yoludur. Tüketim, Elastik Premium ve Ayrılmış (App Service) barındırma planlarındaki varsayılan dağıtım teknolojisidir. Flex Tüketim planı zip dağıtımını desteklemez.

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 işlevi.

Daha fazla bilgi için .zip dağıtım referansı'na bakın.

Önemli

.zip dağıtımı kullandığınızda, önceki dağıtımdaki tüm dosyalar işlev uygulamanıza sonraki dağıtım sırasında silinir veya güncelleştirilir. İşlev uygulamanızdaki önceki dağıtımın parçası olmayan diğer dosyalar ve dizinler korunur.

Dağıtım .zip dosya gereksinimleri

Dağıttığınız zip arşivi, işlev uygulamanızı çalıştırmak için gereken tüm dosyaları içermelidir. Yerleşik .zip sıkıştırma işlevini veya Microsoft dışı araçları kullanarak İşlevler proje klasörünün içeriğinden el ile zip arşivi oluşturabilirsiniz.

Arşiv, ayıklanan klasörün kökünde host.json dosyasını içermelidir. İşlev uygulaması için seçilen dil yığını başka gereksinimler oluşturur:

Önemli

Dağıtım için derlenmiş çıkış oluşturan diller için, proje klasörünün tamamını değil yayımlamayı planladığınız çıkış klasörünün içeriğini sıkıştırdığınızdan emin olun. İşlevler zip arşivinin içeriğini ayıkladığında, host.json dosyanın paketin kökünde bulunması gerekir.

Zip dağıtım işlemi, zip arşivinin dizindeki wwwroot dosyalarını ve klasörlerini ayıklar. Arşivi oluştururken üst dizini eklerseniz, sistem içinde wwwrootgörmeyi beklediği dosyaları bulamaz.

Azure CLI'yi kullanarak dağıtma

Azure CLI'yi kullanarak bir push dağıtımını 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ı az --version görmek için komutunu kullanın.

Aşağıdaki komutta, <zip_file_path> yer tutucusunu, .zip dosyanızın bulunduğu konumla değiştirin. Ayrıca, <app_name> yerine işlev uygulamanızın benzersiz adını ve <resource_group> yerine kaynak grubunuzun adını yazın.

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 bir POST isteğini adresine gönderinhttps://<app_name>.scm.azurewebsites.net/api/zipdeploy. 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 push dağıtımı referansı.

HTTP BASIC kimlik doğrulaması için App Service dağıtım kimlik bilgileriniz gerekir. Dağıtım kimlik bilgilerinizi nasıl ayarlayacağınızı görmek için Kullanıcı düzeyi kimlik bilgilerini ayarlama ve sıfırlama bölümüne bakın.

cURL ile

Aşağıdaki örnekte bir .zip dosyası dağıtmak için cURL aracı kullanılır. Yer tutucular <deployment_user>, <zip_file_path> ve <app_name> ile 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

Yüklenmiş olan .zip dosyasından push dağıtımını bu istek 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. <app_name> öğesini uygulamanızın adıyla ve <deployment_user> öğesini dağıtım kimlik bilgilerinizin kullanıcı adıyla değiştirin.

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

Zaman uyumsuz zip dağıtımı

Senkronizasyon sırasında dağıtım yaparken, bağlantı zaman aşımlarıyla ilgili hatalar alabilirsiniz. Zaman uyumsuz olarak dağıtmak için URL'ye ekleyin ?isAsync=true . Zip dosyasını karşıya yüklediğinizde hemen yoklanabilir dağıtım durumu URL'sine işaret eden bir Location üst bilgiyle 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ıldıysa 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 gereklidir. 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 örnek, Publish-AzWebapp kullanarak .zip dosyasını yükler. Yer tutucuları <group-name>, <app-name> ve <zip-file-path> değiştirin.

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

Bu istek, yüklenen .zip dosyasından itme 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-user>, <deployment-password>, ve <app-name> yer tutucularını değiştirin.

$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ırlık yuvalarını içerir ve birine veya diğerine dağıtım yapar. Genellikle, bu şablonu hazırlama yuvasına dağıtmak ve ardından yeni zip paketinizi üretim yuvasında çalıştırmak için değiştirme işlemi yapmak üzere 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 İşlev çalışma zamanı paket dosyasını monte eder 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ılmaz. 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. Varsayılan sürekli tümleştirme dağıtımları için true'tur. 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 referansındaki 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 indirmek için Azure portalı sayfasını gösteren ekran görüntüsü.

    İndirilen .zip dosyası, .zip iletme dağıtımı kullanılarak işlev uygulamanıza yeniden yayımlanmak için 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