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.
Ö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.
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 üçüncü taraf araçlarını 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ı ek gereksinimler oluşturur:
- .NET (yalıtılmış çalışan modeli)
- .NET (işlem içi model)
- Java
- JavaScript
- TypeScript
- PowerShell
- Python
Ö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 wwwroot
görmeyi beklediği dosyaları bulamaz.
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/zipdeploy
gö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 1
ayarlayarak 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:
Azure portalında oturum açın ve ardından işlev uygulamanıza gidin.
Genel Bakış sekmesinde Uygulama içeriğini indir'i seçin. İndirme seçeneklerinizi ve ardından İndir'i seçin.
İ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.