Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Önemli
Java, Azure İşlevleri çalışma zamanının 1.x sürümü tarafından desteklenmez. Belki de Java uygulamanızı 3.x sürümünden 4.x sürümüne taşımayı düşünüyorsunuz. Sürüm 1.x işlev uygulamasını geçiriyorsanız yukarıdaki C# veya JavaScript'i seçin.
Önemli
TypeScript, Azure İşlevleri çalışma zamanının 1.x sürümü tarafından desteklenmez. Belki de TypeScript uygulamanızı 3.x sürümünden 4.x sürümüne geçirmek istiyorsunuz. Sürüm 1.x işlev uygulamasını geçiriyorsanız yukarıdaki C# veya JavaScript'i seçin.
Önemli
PowerShell, Azure İşlevleri çalışma zamanının 1.x sürümü tarafından desteklenmez. Bunun yerine PowerShell uygulamanızı 3.x sürümünden 4.x sürümüne geçirmek istiyorsunuz olabilir. Sürüm 1.x işlev uygulamasını geçiriyorsanız yukarıdaki C# veya JavaScript'i seçin.
Önemli
Python, Azure İşlevleri çalışma zamanının 1.x sürümü tarafından desteklenmez. Belki de bunun yerine sürüm 3.x'ten sürüm 4.x'a Python uygulamanızın dağıtımını yapmak istiyorsunuz. Sürüm 1.x işlev uygulamasını geçiriyorsanız yukarıdaki C# veya JavaScript'i seçin.
Önemli
Support, Azure İşlevleri çalışma zamanının 1.x sürümü için 14 Eylül 2026 tarihinde sona erecektir. Bu makaledeki yönergeleri izleyerek uygulamalarınızı 4.x sürümüne geçirmenizi kesinlikle öneririz.
Bu makalede, İşlevler çalışma zamanının 4.x sürümünde çalışacak şekilde işlev uygulamanızı güvenli bir şekilde geçirme işleminde size yol gösterilir. Proje geçiş yönergeleri dile bağlı olduğundan, makalenin üst kısmındaki seçiciden geliştirme dilinizi seçtiğinizden emin olun.
Azure Stack Hub'da çalışma zamanı 1.x sürümünü çalışıyorsanız, önce Azure Stack Hub için Considerations bölümüne bakın.
Taşınacak fonksiyon uygulamalarını belirleme
Aboneliğinizde şu anda 1.x sürümünü hedefleyen işlev uygulamalarının listesini oluşturmak için Azure Cloud Shell'de aşağıdaki PowerShell betiğini çalıştırın:
$FunctionApps = Get-AzFunctionApp
$AppInfo = @{}
foreach ($App in $FunctionApps)
{
$AppSettings = Get-AzFunctionAppSetting -Name $App.Name -ResourceGroupName $App.ResourceGroupName
if ($AppSettings.FUNCTIONS_EXTENSION_VERSION -like '*1*')
{
$AppInfo.Add($App.Name, $AppSettings.FUNCTIONS_EXTENSION_VERSION)
}
}
$AppInfo
Cloud Shell dışında çalıştırırsanız, önce etkin aboneliği ayarlamanız gerekir:
$Subscription = '<SUBSCRIPTION_ID>'
Set-AzContext -Subscription $Subscription | Out-Null
Bu örnekte , '<SUBSCRIPTION_ID>' yerine aboneliğinizin kimliğini yazın.
Hedef .NET sürümünüzü seçin
İşlevler çalışma zamanının 1.x sürümünde, C# işlev uygulamanız .NET Framework'i hedefler.
İşlev uygulamanızı taşırken, .NET hedef sürümünü seçme fırsatınız vardır. C# projenizi İşlevler sürüm 4.x tarafından desteklenen aşağıdaki .NET sürümlerinden biriyle güncelleştirebilirsiniz:
| .NET sürümü | .NET Resmi Destek İlkesi sürüm türü | İşlevler işlem modeli1,2 |
|---|---|---|
| .NET 10 | LTS (destek sonu 14 Kasım 2028) | Yalıtılmış çalışan modeli |
| .NET 9 | STS (destek sonu 10 Kasım 2026)3 | Yalıtılmış çalışan modeli |
| .NET 8 | LTS (destek sonu 10 Kasım 2026) |
Yalıtılmış çalışan modeli, İşlem içi model2 |
| .NET Framework 4.8 | Politikaya göz atın | Yalıtılmış çalışan modeli |
1izole işçi modeli .NET Uzun Vadeli Destek (LTS) ve Standart Dönem Desteği (STS) sürümlerini ve .NET Framework'ü destekler. in-process modeli yalnızca .NET 8 ile biten .NET LTS sürümlerini destekler. İki model arasında tam özellik ve işlevsellik karşılaştırması için bkz. İşlem içi ve izole çalışan işlemi arasındaki farklar .NET Azure İşlevleri.
2 İşlem içi model için destek 10 Kasım 2026'da sona eriyor. Daha fazla bilgi için bu destek duyurusna bakın. Sürekli tam destek için uygulamalarınızı yalıtılmış çalışan modeline geçirmeniz gerekir.
3 .NET 9 daha önce beklenen destek sonu tarihi 12 Mayıs 2026'dır. .NET 9 hizmet penceresinde, .NET ekibi STS sürümleri için desteği 24 aya uzattı, bu destek .NET 9 ile başlamaktadır. Daha fazla bilgi için blog gönderisine bakın.
İpucu
Uygulamanız yalnızca .NET Framework'te kullanılabilen bir kitaplığa veya API'ye bağımlı değilse, yalıtılmış çalışan modelinde .NET 8'e güncelleştirmenizi öneririz. Sürüm 1.x'te birçok uygulama, yalnızca oluşturulduğunda kullanılabilir olduğu için .NET Framework'ü hedefler. daha yeni .NET sürümlerinde ek özellikler sağlanır ve uygulamanız bir bağımlılık nedeniyle .NET Framework'te kalmaya zorlanmazsa, daha yeni bir sürümü hedeflemeniz gerekir. .NET 8, .NET en uzun destek penceresine sahip tam olarak yayımlanan sürümdür.
Bunun yerine işlem içi modeli kullanmayı seçebilirsiniz, ancak önlenebilirse bu önerilmez. İşlem içi model desteği 10 Kasım 2026'da sona ereceğinden, bundan önce yalıtılmış çalışan modeline geçmeniz gerekir. 4.x sürümüne geçiş sırasında bu işlem yapılması gereken toplam çabayı azaltır ve yalıtılmış çalışan modeli, uygulamanıza .NET'in gelecekteki sürümlerini daha kolay hedefleme özelliği de dahil olmak üzere ek avantajları verir. Yalıtılmış çalışan modeline geçiyorsanız, .NET Yükseltme Yardımcısı sizin için gerekli kod değişikliklerinin çoğunu da işleyebilir.
Bu kılavuz, .NET 10 (önizleme) veya .NET 9 için belirli örnekler sunmaz. Bu sürümlerden birini hedeflemeniz gerekiyorsa .NET 8 örneğini uyarlayabilirsiniz.
Geçiş için hazırlanma
Henüz yapmadıysanız, Azure PowerShell kullanarak geçerli Azure Aboneliğinizde geçirilmesi gereken uygulamaların listesini belirleyin.
Bir uygulamayı İşlevler çalışma zamanının 4.x sürümüne geçirmeden önce aşağıdaki görevleri gerçekleştirmeniz gerekir:
- 1.x sürümünden sonraki davranış değişiklikleri listesini gözden geçirin. Sürüm 1.x'ten sürüm 4.x'e geçiş de bağlamaları etkileyebilir.
- Yerel projenizi sürüm 4.x'e geçirmek için Yerel projenizi geçirme bölümünde yer alan adımları tamamlayın.
- Projenizi taşıdıktan sonra, Azure İşlevleri Core Tools'un 4.x sürümünü kullanarak uygulamayı yerel olarak eksiksiz test edin.
- Azure'daki işlev uygulamanızı yeni sürüme güncelleştirin. Kesinti süresini en aza indirmeniz gerekiyorsa, taşınmış uygulamanızı yeni çalışma zamanı sürümünde Azure'da test etmek ve doğrulamak için bir staging slot kullanmayı göz önünde bulundurun. Ardından uygulamanızı güncelleştirilmiş sürüm ayarlarıyla üretim yuvasına dağıtabilirsiniz. Daha fazla bilgi için bkz Yuvaları kullanarak güncellemeler.
- Geçirilen projenizi güncelleştirilmiş işlev uygulamasında yayımlayın.
Visual Studio kullanarak mevcut sürümü daha düşük olan bir işlev uygulamasına 4.x sürümündeki bir projeyi yayımladığınızda, dağıtım sırasında Visual Studio'nun işlev uygulamasını 4.x sürümüne güncellemesine izin vermeniz istenir. Bu güncelleştirme, Slot olmadan güncelleştirme bölümünde tanımlanan işlemi kullanır.
Yerel projenizi taşıma
Aşağıdaki bölümlerde, İşlevler sürüm 4.x'te desteklenen .NET sürümlerinden birinde çalışabilmek için C# proje dosyalarınızda yapmanız gereken güncelleştirmeler açıklanmaktadır. Gösterilen güncelleştirmeler çoğu proje için ortak olan güncelleştirmelerdir. Proje kodunuz, özellikle özel NuGet paketleri kullanılırken bu makalede belirtilmeyen güncelleştirmeleri gerektirebilir.
C# işlev uygulamasını İşlevler çalışma zamanının 1.x sürümünden 4.x sürümüne geçirmek için proje kodunuzda değişiklik yapmanız gerekir. Bu değişikliklerin çoğu C# dilindeki ve .NET API'lerindeki değişikliklerin bir sonucudur.
hedef .NET sürümünüzle eşleşen sekmeyi ve istenen işlem modelini (işlem içi veya yalıtılmış çalışan işlemi) seçin.
İpucu
Yalıtılmış çalışan modelini kullanarak .NET LTS veya STS sürümüne geçiyorsanız, aşağıdaki bölümlerde belirtilen değişikliklerin çoğunu otomatik olarak yapmak için .NET Yükseltme Yardımcısı kullanılabilir.
Project dosyası
Aşağıdaki örnek, 1.x sürümünde çalışan bir .csproj proje dosyasıdır:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net48</TargetFramework>
<AzureFunctionsVersion>v1</AzureFunctionsVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="1.0.24" />
</ItemGroup>
<ItemGroup>
<Reference Include="Microsoft.CSharp" />
</ItemGroup>
<ItemGroup>
<None Update="host.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="local.settings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<CopyToPublishDirectory>Never</CopyToPublishDirectory>
</None>
</ItemGroup>
</Project>
Bu XML dosyasını İşlevler sürüm 4.x'te çalışacak şekilde güncelleştirmek için aşağıdaki yordamlardan birini kullanın:
Bu adımlarda yerel bir C# projesi varsayılır; uygulamanız bunun yerine C# betiği (.csx dosyaları) kullanıyorsa devam etmeden önce proje modeline dönüştürmeniz gerekir.
.csproj XML proje dosyasında aşağıdaki değişiklikler gereklidir:
değerini
PropertyGroupayarlayın.TargetFramework'dannet8.0'edeğerini
PropertyGroupayarlayın.AzureFunctionsVersion'danv4'eAşağıdaki
OutputTypeöğesiniPropertyGroupöğesine ekleyin.<OutputType>Exe</OutputType>içinde
ItemGroup.PackageReferencelistesindeki paket başvurusunu,Microsoft.NET.Sdk.Functionslistesi ile aşağıdaki başvurularla değiştirin.<FrameworkReference Include="Microsoft.AspNetCore.App" /> <PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.21.0" /> <PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.17.2" /> <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore" Version="1.2.1" /> <PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.22.0" /> <PackageReference Include="Microsoft.Azure.Functions.Worker.ApplicationInsights" Version="1.2.0" />Microsoft.Azure.WebJobs.*ad alanları içindeki diğer paketlere yapılan başvuruları not edin. Sonraki bir adımda bu paketleri değiştireceksiniz.Aşağıdaki yeni
ItemGroupöğesini ekleyin:<ItemGroup> <Using Include="System.Threading.ExecutionContext" Alias="ExecutionContext"/> </ItemGroup>
Bu değişiklikleri yaptıktan sonra güncelleştirilmiş projeniz aşağıdaki örnekteki gibi görünmelidir:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<AzureFunctionsVersion>v4</AzureFunctionsVersion>
<RootNamespace>My.Namespace</RootNamespace>
<OutputType>Exe</OutputType>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.21.0" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.17.2" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore" Version="1.2.1" />
<PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.22.0" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.ApplicationInsights" Version="1.2.0" />
<!-- Other packages may also be in this list -->
</ItemGroup>
<ItemGroup>
<None Update="host.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="local.settings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<CopyToPublishDirectory>Never</CopyToPublishDirectory>
</None>
</ItemGroup>
<ItemGroup>
<Using Include="System.Threading.ExecutionContext" Alias="ExecutionContext"/>
</ItemGroup>
</Project>
Paket ve ad alanı değişiklikleri
Geçiş yaptığınız modele bağlı olarak, uygulamanızın başvurabileceği paketleri güncelleştirmeniz veya değiştirmeniz gerekebilir. Hedef paketleri benimsediğinizde, using deyimlerinin ve başvurabileceğiniz bazı türlerin ad alanını güncelleştirmeniz gerekir. Bu ad alanı değişikliklerinin using ifadeleri üzerindeki etkisini bu makalenin ilerleyen bölümlerinde HTTP tetikleyici şablonları örneklerinde görebilirsiniz.
Henüz yapmadıysanız, projenizi aşağıdakilerin en son kararlı sürümlerine başvuracak şekilde güncelleştirin:
Uygulamanızın kullandığı tetikleyicilere ve bağlamalara bağlı olarak, uygulamanızın farklı bir paket kümesine başvurması gerekebilir. Aşağıdaki tabloda, en yaygın kullanılan uzantılardan bazılarının yerine geçenler gösterilmektedir:
| Senaryo | Paket başvurularında yapılan değişiklikler |
|---|---|
| Süreölçer tetikleyicisi | Ekle Microsoft.Azure. Functions.Worker.Extensions.Timer |
| Depolama bağlamaları | DeğiştirMicrosoft.Azure.WebJobs.Extensions.Storageile Microsoft.Azure. Functions.Worker.Extensions.Storage.Blobs, Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues ve Microsoft.Azure.Functions.Worker.Extensions.Tables |
| Blob bağlantıları | Referansları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.Storage.Blobsen son sürümüyle Microsoft.Azure. Functions.Worker.Extensions.Storage.Blobs |
| Kuyruk bağlamaları | Referansları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.Storage.Queuesen son sürümüyle Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues |
| Tablo bağlamaları | Referansları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.Tablesen son sürümüyle Microsoft.Azure.Functions.Worker.Extensions.Tables |
| Cosmos DB bağlamaları | Referansları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.CosmosDBve/veya Microsoft.Azure.WebJobs.Extensions.DocumentDBen son sürümüyle Microsoft.Azure. Functions.Worker.Extensions.CosmosDB |
| Service Bus bağlamaları | Referansları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.ServiceBusen son sürümüyle Microsoft.Azure. Functions.Worker.Extensions.ServiceBus |
| Event Hubs bağlamaları | Referansları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.EventHubsen son sürümüyle Microsoft.Azure. Functions.Worker.Extensions.EventHubs |
| Event Grid bağlamaları | Referansları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.EventGriden son sürümüyle Microsoft.Azure. Functions.Worker.Extensions.EventGrid |
| SignalR Hizmeti bağlamaları | Referansları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.SignalRServiceen son sürümüyle Microsoft.Azure. Functions.Worker.Extensions.SignalRService |
| Dayanıklı Fonksiyonlar | Referansları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.DurableTasken son sürümüyle Microsoft.Azure.Functions.Worker.Extensions.DurableTask |
| Dayanıklı Fonksiyonlar (SQL depolama sağlayıcısı) |
Referansları şununla değiştirin:Microsoft.DurableTask.SqlServer.AzureFunctionsen son sürümüyle Microsoft.Azure. Functions.Worker.Extensions.DurableTask.SqlServer |
| Dayanıklı Fonksiyonlar (Netherite depolama sağlayıcısı) |
Referansları şununla değiştirin:Microsoft.Azure.DurableTask.Netherite.AzureFunctionsen son sürümüyle Microsoft.Azure. Functions.Worker.Extensions.DurableTask.Netherite |
| SendGrid bağlamaları | Referansları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.SendGriden son sürümüyle Microsoft.Azure. Functions.Worker.Extensions.SendGrid |
| Kafka bağlamaları | Referansları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.Kafkaen son sürümüyle Microsoft.Azure. Functions.Worker.Extensions.Kafka |
| RabbitMQ bağlantıları | Referansları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.RabbitMQen son sürümüyle Microsoft.Azure. Functions.Worker.Extensions.RabbitMQ |
| Bağımlılık enjeksiyonu ve başlangıç konfigürasyonu |
Referansları kaldırMicrosoft.Azure.Functions.Extensions(Yalıtılmış çalışan modeli bu işlevi varsayılan olarak sağlar.) |
Dikkate alınacak uzantıların tam listesi için desteklenen bağlamalar bölümüne bakın ve yalıtılmış işlem modeline yönelik tam yükleme yönergeleri için her uzantının belgelerine bakın. Hedeflediğiniz paketlerin en son kararlı sürümünü yüklediğinizden emin olun.
İpucu
Bu işlem sırasında uzantı sürümlerinde yapılan tüm değişiklikler dosyanızı da güncelleştirmenizi host.json gerektirebilir. Kullandığınız her uzantının belgelerini okuduğunuzdan emin olun.
Örneğin, Service Bus uzantısının yapısı 4.x ve 5.x sürümleri arasında önemli değişikliklere uğramıştır. Daha fazla bilgi için bkz. Azure İşlevleri için Azure Service Bus bağlamaları.
Yalıtılmış çalışan modeli uygulamanız Microsoft.Azure.WebJobs.* ad alanları veya Microsoft.Azure.Functions.Extensions hiçbir pakete başvurmamalıdır. Eğer bunlara dair kalan referanslarınız varsa, bunlar kaldırılmalıdır.
İpucu
Uygulamanız, tetikleyicilerinizin ve bağlamalarınızın bir parçası olarak veya tek başına bağımlılık olarak Azure SDK türlerine de bağlı olabilir. Bunları güncelleştirmek için de bu fırsatı değerlendirmelisiniz. İşlev uzantılarının en son sürümleri, .NET için
Notification Hubs ve Mobile Apps bağlamaları yalnızca çalışma zamanının 1.x sürümünde desteklenir. Çalışma zamanının 4.x sürümüne yükseltirken, doğrudan SDK'larını kullanarak bu hizmetlerle çalışmak yerine bu bağlamaları kaldırmanız gerekir.
Program.cs dosyası
Çoğu durumda, geçiş için projenize aşağıdaki program.cs dosyasını eklemeniz gerekir:
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
var host = new HostBuilder()
.ConfigureFunctionsWebApplication()
.ConfigureServices(services => {
services.AddApplicationInsightsTelemetryWorkerService();
services.ConfigureFunctionsApplicationInsights();
})
.Build();
host.Run();
Bu örnek, performansı artırmak ve uygulamanız HTTP tetikleyicilerini kullandığında tanıdık bir programlama modeli sağlamak amacıyla ASP.NET Core tümleştirmesini içerir. HTTP tetikleyicilerini kullanmayı düşünmüyorsanız, ConfigureFunctionsWebApplication çağrısını ConfigureFunctionsWorkerDefaults çağrısıyla değiştirebilirsiniz. Bunu yaparsanız, proje dosyanızdan Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore başvurusunu kaldırabilirsiniz. Ancak, en iyi performansı elde etmek için, diğer tetikleyici türlerine sahip işlevler için bile FrameworkReference ASP.NET Core üzerinde çalıştırmalısınız.
Program.cs dosyası, özniteliğine FunctionsStartup sahip olan ve genellikle Startup.cs bir dosya olan herhangi bir dosyanın yerini alır. Kodunuzun FunctionsStartup başvuracağı IFunctionsHostBuilder.Services yerlerde, bunun yerine .ConfigureServices() metodunun HostBuilder içinde Program.cs dosyasına deyimler ekleyebilirsiniz.
Program.cs ile çalışma hakkında daha fazla bilgi edinmek için yalıtılmış çalışan modeli kılavuzundaki Başlangıç ve yapılandırma bölümüne bakın.
Önceden açıklanan varsayılan Program.cs örnekleri, Application Insights kurulumunu içerir. Projenizdeki koddan gelen günlüklere uygulanacak günlük filtreleme ayarlarını, Program.cs dosyanızda da yapılandırmanız gerekir. Yalıtılmış çalışan modelinde ,host.json dosyası yalnızca İşlevler konak çalışma zamanı tarafından yayılan olayları denetler. Program.cs'de filtreleme kurallarını yapılandırmazsanız, telemetrinizdeki çeşitli kategoriler için log seviyelerinde farklılıklar görebilirsiniz.
Özel yapılandırma kaynaklarını öğesinin HostBuilderbir parçası olarak kaydedebilirsiniz, ancak bunlar benzer şekilde yalnızca projenizdeki kodlar için geçerlidir. Platform ayrıca tetikleyici ve bağlama yapılandırmasına da ihtiyaç duyar ve bu, uygulama ayarları, Key Vault başvuruları veya App Yapılandırma başvuruları özellikleri aracılığıyla sağlanmalıdır.
Var olan FunctionsStartup herhangi bir dosyadaki her şeyi Program.cs dosyasına taşıdıktan sonra özniteliğini FunctionsStartup ve uygulandığı sınıfı silebilirsiniz.
host.json dosyası
host.json dosyasındaki ayarlar hem yerel hem de Azure işlev uygulaması düzeyinde uygulanır. Sürüm 1.x'te, host.json dosyanız boş veya işlev uygulamasındaki tüm işlevlere uygulanan bazı ayarlar içeriyor. Daha fazla bilgi için bkz . Host.json v1. host.json dosyanızda ayar değerleri varsa, değişiklikler için host.json v2 biçimini gözden geçirin.
4.x sürümünde çalıştırmak için host.json dosyasına eklemeniz "version": "2.0" gerekir. Yapılandırmanıza logging eklemeyi de, aşağıdaki örneklerde olduğu gibi, göz önünde bulundurmalısınız.
{
"version": "2.0",
"telemetryMode": "OpenTelemetry"
}
Dosya host.json, yalnızca Functions ana bilgisayarı çalışma zamanının loglama işlemini kontrol eder ve yalıtılmış çalışan modelinde, bu loglardan bazıları doğrudan uygulamanızdan geldiği için size daha fazla kontrol sağlar. Ayrıntılı bilgi için bkz Yalıtılmış çalışan modelinde günlük düzeylerini yönetme ve bu günlükleri nasıl filtreleyeceğiniz.
local.settings.json dosyası
local.settings.json dosyası yalnızca yerel olarak çalıştırılırken kullanılır. Bilgi için bkz . Yerel ayarlar dosyası. Sürüm 1.x'te, local.settings.json dosyasının yalnızca iki gerekli değeri vardır:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "AzureWebJobsStorageConnectionStringValue",
"AzureWebJobsDashboard": "AzureWebJobsStorageConnectionStringValue"
}
}
Sürüm 4.x'e geçiş yaptığınızda, local.settings.json dosyanızda en az aşağıdaki öğelerin olduğundan emin olun:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "AzureWebJobsStorageConnectionStringValue",
"FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
}
}
Not
İşlem içi çalıştırmadan yalıtılmış bir çalışan işleminde çalıştırmaya geçiş yaparken, FUNCTIONS_WORKER_RUNTIME değerini "dotnet-isolated" olarak değiştirmeniz gerekir.
Sınıf adı değişiklikleri
Bazı anahtar sınıfları, sürüm 1.x ile sürüm 4.x arasında adları değiştirdi. Bu değişiklikler, .NET API'lerdeki değişikliklerin veya işlem içi ile yalıtılmış çalışan işlemi arasındaki farkların bir sonucudur. Aşağıdaki tabloda, geçiş sırasında değişebilen İşlevler tarafından kullanılan anahtar .NET sınıfları gösterilir:
| Sürüm 1.x | .NET 8 |
|---|---|
FunctionName (öznitelik) |
Function (öznitelik) |
TraceWriter |
ILogger<T>, ILogger |
HttpRequestMessage |
HttpRequestData, HttpRequest (ASP.NET Core tümleştirme kullanarak) |
HttpResponseMessage |
HttpResponseData, IActionResult (ASP.NET Core tümleştirme kullanarak) |
Bağlamalarda sınıf adı farklılıkları da olabilir. Daha fazla bilgi için, belirli bağlamalar için başvuru makalelerine bakın.
Diğer kod değişiklikleri
Bu bölümde, geçişte çalışırken dikkate alınacak diğer kod değişiklikleri vurgulanır. Bu değişiklikler tüm uygulamalar için gerekli değildir, ancak senaryolarınızla ilgili olup olmadığını değerlendirmeniz gerekir. Projenizde yapmanız gerekebilecek ek değişiklikler için 1.x sürümünden sonraki davranış değişikliklerini denetlediğinizden emin olun.
JSON serileştirme
Yalıtılmış çalışan modeli varsayılan olarak JSON serileştirmesi için System.Text.Json kullanır. Serileştirici seçeneklerini özelleştirmek veya JSON.NET (Newtonsoft.Json)'e geçiş yapmak için JSON serileştirmesini özelleştirme'ye bakın.
Application Insights günlük düzeyleri ve filtreleme ayarları
Günlükler hem İşlevler konak çalışma zamanından hem de projenizdeki koddan Application Insights'a gönderilebilir. host.json konak günlüğü kurallarını yapılandırmanıza olanak tanır, ancak kodunuzdan gelen günlükleri denetlemek için Program.cs bir parçası olarak filtreleme kurallarını yapılandırmanız gerekir. Ayrıntılı bilgi için bkz Yalıtılmış çalışan modelinde günlük düzeylerini yönetme ve bu günlükleri nasıl filtreleyeceğiniz.
HTTP tetikleyicisi şablonu
Sürüm 1.x ile sürüm 4.x arasındaki kod değişikliklerinin çoğu HTTP ile tetiklenen işlevlerde görülebilir. Sürüm 1.x için HTTP tetikleyici şablonu aşağıdaki örneğe benzer:
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
namespace Company.Function
{
public static class HttpTriggerCSharp
{
[FunctionName("HttpTriggerCSharp")]
public static async Task<HttpResponseMessage>
Run([HttpTrigger(AuthorizationLevel.AuthLevelValue, "get", "post",
Route = null)]HttpRequestMessage req, TraceWriter log)
{
log.Info("C# HTTP trigger function processed a request.");
// parse query parameter
string name = req.GetQueryNameValuePairs()
.FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
.Value;
if (name == null)
{
// Get request body
dynamic data = await req.Content.ReadAsAsync<object>();
name = data?.name;
}
return name == null
? req.CreateResponse(HttpStatusCode.BadRequest,
"Please pass a name on the query string or in the request body")
: req.CreateResponse(HttpStatusCode.OK, "Hello " + name);
}
}
}
Sürüm 4.x'te HTTP tetikleyici şablonu aşağıdaki örneğe benzer:
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
namespace Company.Function
{
public class HttpTriggerCSharp
{
private readonly ILogger<HttpTriggerCSharp> _logger;
public HttpTriggerCSharp(ILogger<HttpTriggerCSharp> logger)
{
_logger = logger;
}
[Function("HttpTriggerCSharp")]
public IActionResult Run(
[HttpTrigger(AuthorizationLevel.Function, "get")] HttpRequest req)
{
_logger.LogInformation("C# HTTP trigger function processed a request.");
return new OkObjectResult($"Welcome to Azure Functions, {req.Query["name"]}!");
}
}
}
Projenizi Azure İşlevleri 4.x'e güncelleştirmek için:
Azure İşlevleri Core Tools yerel yüklemenizi 4.x sürümüne güncelleştirin.
Hem
versionhem deextensionBundleöğelerini host.json'a ekleyerek aşağıdaki örneğe benzemesi için:{ "version": "2.0", "extensionBundle": { "id": "Microsoft.Azure.Functions.ExtensionBundle", "version": "[3.3.0, 4.0.0)" } }1.x sürümünden
extensionBundlesonra bağlamalar dış paketler olarak tutulacağından öğesi gereklidir. Daha fazla bilgi için bkz . Uzantı paketleri.local.settings.json dosyanızı en azından aşağıdaki öğelere sahip olacak şekilde güncelleştirin:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "node" } }AzureWebJobsStorageayarı, Azurite depolama öykünücüsü veya gerçek bir Azure depolama hesabı olabilir. Daha fazla bilgi için bkz Yerel depolama öykünücüsü.
Azure'de işlev uygulamanızı güncelleştirme
Geçirilen projenizi yayımlamadan önce Azure işlev uygulaması konağı çalışma zamanını 4.x sürümüne güncelleştirmeniz gerekir. İşlevler konağı tarafından kullanılan çalışma zamanı sürümü uygulama ayarı tarafından FUNCTIONS_EXTENSION_VERSION denetlenmektedir, ancak bazı durumlarda diğer ayarların da güncelleştirilmiş olması gerekir. Hem kod değişiklikleri hem de uygulama ayarlarında yapılan değişiklikler, işlev uygulamanızın yeniden başlatılmasını gerektirir.
En kolay yol yuva olmadan güncelleştirme yapmak ve ardından uygulama projenizi yeniden yayımlamaktır. Ayrıca, uygulamanızda kesinti süresini en aza indirip geri almayı basitleştirmek için slot kullanarak güncelleştirerek güncelleştirmenizi yapabilirsiniz.
Yuvalar olmadan güncelleme
v4.x'e güncelleştirmenin en basit yolu, Azure'daki işlev uygulamanızda FUNCTIONS_EXTENSION_VERSION uygulama ayarını ~4 olarak ayarlamaktır. Yuvaları olan bir sitede farklı bir yordamı izlemeniz gerekir.
az functionapp config appsettings set --settings FUNCTIONS_EXTENSION_VERSION=~4 -g <RESOURCE_GROUP_NAME> -n <APP_NAME>
Ayrıca, Windows ile Linux arasında farklılık gösteren başka bir ayar da ayarlamanız gerekir.
Windows üzerinde çalışırken, çalışma zamanının 4.x sürümü için gereken .NET 8.0'ı da etkinleştirmeniz gerekir.
az functionapp config set --net-framework-version v8.0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME>
.NET 6, Windows üzerinde çalışan herhangi bir dildeki işlev uygulamaları için gereklidir.
Bu örnekte, <APP_NAME>'yi işlev uygulamanızın adıyla ve <RESOURCE_GROUP_NAME>'yi kaynak grubunun adıyla değiştirin.
Artık 4.x sürümünde çalıştırılacak şekilde geçirilen uygulama projenizi yeniden yayımlayabilirsiniz.
Slotları kullanarak güncelleştirme
Dağıtım yuvalarını kullanmak, işlev uygulamanızı önceki bir sürümden v4.x çalışma zamanına güncelleştirmenin iyi bir yoludur. Hazırlama yuvası kullanarak uygulamanızı hazırlama yuvasındaki yeni çalışma zamanı sürümünde çalıştırabilir ve doğrulamadan sonra üretime geçebilirsiniz. Slotlar ayrıca güncelleştirme sırasında çalışma dışı kalma süresini en aza indirmenin bir yolunu sağlar. Kapalı kalma süresini en aza indirmeniz gerekiyorsa En düşük kapalı kalma süresi güncelleştirmesi'ndeki adımları izleyin.
Uygulamanızı güncelleştirilmiş yuvada doğruladıktan sonra uygulamayı ve yeni sürüm ayarlarını üretime geçirebilirsiniz. Bu değiştirme için üretim yuvasında WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 ayarlanması gerekir. Bu ayarı ekleme şekliniz, güncelleştirme için gereken kapalı kalma süresini etkiler.
Standart güncelleştirme
Yuva özellikli işlev uygulamanız tam yeniden başlatmanın kesinti süresini işleyebilirse, WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS ayarını doğrudan üretim yuvasında güncelleştirebilirsiniz. Bu ayarı doğrudan üretim yuvasında değiştirmek kullanılabilirliği etkileyen bir yeniden başlatmaya neden olduğundan, bu değişikliği trafiğin azaldığı bir zamanda yapmayı göz önünde bulundurun. Ardından, hazırlama yuvasından güncelleştirilmiş sürümü değiştirebilirsiniz.
Update-AzFunctionAppSetting PowerShell cmdlet'i şu anda yuvaları desteklememektedir. Azure CLI veya Azure portalını kullanmanız gerekir.
Aşağıdaki komutu üretim yuvasında
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0ayarlamak için kullanın.az functionapp config appsettings set --settings WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME>Bu örnekte,
<APP_NAME>'yi işlev uygulamanızın adıyla ve<RESOURCE_GROUP_NAME>'yi kaynak grubunun adıyla değiştirin. Bu komut, üretim yuvasında çalışan uygulamanın yeniden başlatılmasına neden olur.Hazırlık yuvasında
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONSayarlamak için aşağıdaki komutu kullanın:az functionapp config appsettings set --settings WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME>Yeni çalışma zamanı sürümüne hazırlama yuvasını değiştirmek ve güncellemek için aşağıdaki komutu kullanın:
az functionapp config appsettings set --settings FUNCTIONS_EXTENSION_VERSION=~4 -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME>İşlevler çalışma zamanının 4.x sürümü, Windows .NET 6 gerektirir. Linux'ta .NET uygulamalar da .NET 6'ya güncelleştirilmelidir. Çalışma zamanının .NET 6'da çalışabilmesi için aşağıdaki komutu kullanın:
Windows üzerinde çalışırken, çalışma zamanının 4.x sürümü için gereken .NET 8.0'ı da etkinleştirmeniz gerekir.
az functionapp config set --net-framework-version v8.0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME>.NET 6, Windows üzerinde çalışan herhangi bir dildeki işlev uygulamaları için gereklidir.
Bu örnekte,
<APP_NAME>'yi işlev uygulamanızın adıyla ve<RESOURCE_GROUP_NAME>'yi kaynak grubunun adıyla değiştirin.Kod projeniz 4.x sürümünde çalışacak güncelleştirmeler gerektiriyorsa, bu güncelleştirmeleri hazırlama yuvasına şimdi dağıtın.
Değiştirmeden önce işlev uygulamanızın güncelleştirilmiş hazırlama ortamında doğru şekilde çalıştığını onaylayın.
Güncelleştirilmiş hazırlama yuvasını üretime değiştirmek için aşağıdaki komutu kullanın:
az functionapp deployment slot swap -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME> --target-slot production
En az kapalı kalma süresi güncellemesi
Üretim uygulamanızda aksama süresini en aza indirmek için, WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS ayarını hazırlık yuvasından üretime değiştirerek geçirebilirsiniz. Bundan sonra, önceden ısıtılmış bir hazırlık yuvasından güncellenmiş sürümü içeri aktarabilirsiniz.
Hazırlama yuvasında
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0ayarlamak için aşağıdaki komutu kullanın:az functionapp config appsettings set --settings WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME>Yuvayı yeni ayar ile üretime değiştirmek ve aynı zamanda hazırlama yuvasındaki sürüm ayarını geri yüklemek için aşağıdaki komutları kullanın.
az functionapp deployment slot swap -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME> --target-slot production az functionapp config appsettings set --settings FUNCTIONS_EXTENSION_VERSION=~3 -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME>Değiştirme ile hazırlama sırasında geri yüklenen çalışma zamanı sürümü arasındaki süre boyunca hazırlama yuvasından hatalar görebilirsiniz. Bu hata, yalnızca
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0ayarının değiştirme sırasında sadece hazırlama ortamında bulunması nedeniyle, hazırlama ortamındakiFUNCTIONS_EXTENSION_VERSIONayarının kaldırılmasından kaynaklanabilir. Sürüm ayarı olmadan slotunuz olumsuz durumdadır. Değiştirme işleminden hemen sonra hazırlık yuvasındaki sürümün güncellenmesi, yuvayı yeniden iyi bir duruma getirmelidir ve gerekirse değişikliklerinizi geri alabilirsiniz. Ancak, swap işleminin geri alınması, staging'de görülen aynı hataların üretimde oluşmasını önlemek içinWEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0'yi swap'tan önce doğrudan üretimden kaldırmanızı da gerektirir. Üretim ayarındaki bu değişiklik yeniden başlatmaya neden olur.Hazırlama yuvasında
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0'yu yeniden ayarlamak için aşağıdaki komutu kullanın:az functionapp config appsettings set --settings WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME>Bu noktada her iki yuva da
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0olarak kurulmuştur.Yeni çalışma zamanı sürümüne hazırlama yuvasını değiştirmek ve güncellemek için aşağıdaki komutu kullanın:
az functionapp config appsettings set --settings FUNCTIONS_EXTENSION_VERSION=~4 -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME>İşlevler çalışma zamanının 4.x sürümü, Windows .NET 6 gerektirir. Linux'ta .NET uygulamalar da .NET 6'ya güncelleştirilmelidir. Çalışma zamanının .NET 6'da çalışabilmesi için aşağıdaki komutu kullanın:
Windows üzerinde çalışırken, çalışma zamanının 4.x sürümü için gereken .NET 8.0'ı da etkinleştirmeniz gerekir.
az functionapp config set --net-framework-version v8.0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME>.NET 6, Windows üzerinde çalışan herhangi bir dildeki işlev uygulamaları için gereklidir.
Bu örnekte,
<APP_NAME>'yi işlev uygulamanızın adıyla ve<RESOURCE_GROUP_NAME>'yi kaynak grubunun adıyla değiştirin.Kod projeniz 4.x sürümünde çalışacak güncelleştirmeler gerektiriyorsa, bu güncelleştirmeleri hazırlama yuvasına şimdi dağıtın.
Değiştirmeden önce işlev uygulamanızın güncelleştirilmiş hazırlama ortamında doğru şekilde çalıştığını onaylayın.
Güncelleştirilmiş ve önceden uyarlanmış hazırlama yuvasını üretimle değiştirmek için aşağıdaki komutu kullanın:
az functionapp deployment slot swap -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME> --target-slot production
1.x sürümünden sonraki davranış değişiklikleri
Bu bölümde hem tetikleyici hem de bağlama davranışlarında ve temel İşlevler özelliklerinde ve davranışlarında 1.x sürümünden sonra yapılan değişiklikler ayrıntılı olarak açıklanır.
Tetikleyicilerdeki ve bağlamalardaki değişiklikler
Sürüm 2.x'den başlayarak, uygulamanızdaki işlevler tarafından kullanılan belirli tetikleyiciler ve bağlamalar için uzantıları yüklemeniz gerekir. Bu HTTP ve zamanlayıcı tetikleyicileri için uzantı gerektirmeyen tek özel durum. Daha fazla bilgi için bkz: Bağlama uzantılarını kaydetme ve yükleme.
İşlevin function.json dosyasında veya özniteliklerinde de sürümler arasında birkaç değişiklik vardır. Örneğin, Event Hubs path özelliği artık eventHubNameşeklindedir. Her bağlamaya yönelik belgelerin bağlantıları için mevcut bağlama tablosuna bakın.
Özellikler ve işlevlerdeki değişiklikler
Sürüm 1.x'in ardından birkaç özellik kaldırıldı, güncelleştirildi veya değiştirildi. Bu bölümde, 1.x sürümünü kullandıktan sonra sonraki sürümlerde gördüğünüz değişiklikler ayrıntılı olarak gösterilir.
Sürüm 2.x'te aşağıdaki değişiklikler yapıldı:
HTTP uç noktalarını çağırma anahtarları her zaman Azure Blob depolamada şifrelenmiş olarak depolanır. Sürüm 1.x'te anahtarlar varsayılan olarak Azure Dosyalar depolandı. Bir uygulamayı 1.x sürümünden 2.x sürümüne geçirdiğinizde, Azure Dosyalar olan mevcut gizli diziler sıfırlanır.
Sürüm 2.x çalışma zamanı, webhook sağlayıcıları için yerleşik destek içermez. Bu değişiklik, performansı geliştirmek için yapılmıştır. Http tetikleyicilerini web kancaları için uç nokta olarak kullanmaya devam edebilirsiniz.
İzlemeyi geliştirmek için portalda
AzureWebJobsDashboardayarını kullanan WebJobs panosu,APPINSIGHTS_INSTRUMENTATIONKEYayarını kullanan Azure Uygulaması Insights ile değiştirilmiştir. Daha fazla bilgi için bkz. Monitor Azure İşlevleri.İşlev uygulamasındaki tüm işlevlerin aynı dili paylaşması gerekir. bir işlev uygulaması oluşturduğunuzda, uygulama için bir çalışma zamanı yığını seçmeniz gerekir. Çalışma zamanı yığını, uygulama ayarlarındaki
FUNCTIONS_WORKER_RUNTIMEdeğer tarafından belirtilir. Bu gereksinim, ayak izini ve başlangıç süresini iyileştirmek için eklenmiştir. Yerel olarak geliştirirken, bu ayarı local.settings.json dosyasına da eklemeniz gerekir.App Service planındaki işlevler için varsayılan zaman aşımı 30 dakikaya değiştirilir. host.json'daki functionTimeout ayarını kullanarak zaman aşımını el ile süresiz olarak geri değiştirebilirsiniz.
HTTP eşzamanlılık sınırlamaları Tüketim planı işlevleri için varsayılan olarak uygulanır ve her bir örnek için varsayılan 100 eşzamanlı istek belirlenmiştir. Bu davranışı
maxConcurrentRequestshost.json dosyasındaki ayarda değiştirebilirsiniz..NET Core sınırlamaları nedeniyle F# betiği (
.fsxdosyaları) işlevleri desteği kaldırıldı. Derlenmiş F# işlevleri (.fs) hala desteklenmektedir.Event Grid tetikleyici web kancalarının URL biçimi şu deseni izleyecek şekilde değiştirildi:
https://{app}/runtime/webhooks/{triggerName}.Önceden tanımlanmış bazı özel ölçümlerin adları 1.x sürümünden sonra değiştirildi.
Duration, veMaxDurationMsileMinDurationMsAvgDurationMsdeğiştirildi.Success Rateolarak da yeniden adlandırıldıSuccess Rate.
Azure Stack Hub ile ilgili dikkat edilmesi gerekenler
Azure Stack Hub üzerindeki
- Bu makaledeki yönergeleri kullanarak genel bulut Azure İşlevleri barındırılan 4.x sürümüne geçin. Mevcut uygulamanızı yükseltmek yerine 4.x sürümünü kullanarak yeni bir uygulama oluşturup değiştirilen projenizi buna dağıtırsınız.
- Azure Stack Hub bir App Service planında barındırılan WebJobs'a geçin.