Uygulamaları Azure İşlevleri sürüm 3.x'ten sürüm 4.x'e geçirme
Azure İşlevleri sürüm 4.x, sürüm 3.x ile son derece geriye dönük uyumludur. Çoğu uygulama önemli kod değişiklikleri gerektirmeden güvenli bir şekilde 4.x'e geçirilmelidir. İşlevler çalışma zamanı sürümleri hakkında daha fazla bilgi için bkz. Azure İşlevleri çalışma zamanı sürümlerine genel bakış.
Önemli
13 Aralık 2022 tarihinden itibaren Azure İşlevleri çalışma zamanının 2.x ve 3.x sürümlerinde çalışan işlev uygulamalarında genişletilmiş destek artık kullanılmamaktadır. Daha fazla bilgi için bkz . Kullanımdan kaldırılacak sürümler.
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.
Geçirecek işlev uygulamalarını tanımlama
Aboneliğinizde şu anda 2.x veya 3.x sürümlerini hedefleyen işlev uygulamalarının listesini oluşturmak için aşağıdaki PowerShell betiğini kullanın:
$Subscription = '<YOUR SUBSCRIPTION ID>'
Set-AzContext -Subscription $Subscription | Out-Null
$FunctionApps = Get-AzFunctionApp
$AppInfo = @{}
foreach ($App in $FunctionApps)
{
if ($App.ApplicationSettings["FUNCTIONS_EXTENSION_VERSION"] -like '*3*')
{
$AppInfo.Add($App.Name, $App.ApplicationSettings["FUNCTIONS_EXTENSION_VERSION"])
}
}
$AppInfo
Hedef .NET sürümünüzü seçin
İşlevler çalışma zamanının 3.x sürümünde, C# işlev uygulamanız işlem içi modeli kullanarak .NET Core 3.1'i veya yalıtılmış çalışan modelini kullanarak .NET 5'i hedefler.
İşlev uygulamanızı geçirirken hedef .NET 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,3 |
---|---|---|
.NET 82 | LTS | Yalıtılmış çalışan modeli |
.NET 7 | STS (destek sonu 14 Mayıs 2024) | Yalıtılmış çalışan modeli |
.NET 6 | LTS (destek sonu 12 Kasım 2024) | Yalıtılmış çalışan modeli, İşlem içi model3 |
.NET Framework 4.8 | İlkeye bakın | Yalıtılmış çalışan modeli |
1 Yalıtılmış çalışan modeli , .NET Framework'ün yanı sıra .NET'in Uzun Vadeli Destek (LTS) ve Standart Terim Desteği (STS) sürümlerini destekler. İşlem içi model yalnızca .NET'in LTS sürümlerini destekler. İki model arasında tam özellik ve işlevsellik karşılaştırması için bkz. .NET Azure İşlevleri çalışan işlemi ile yalıtma arasındaki farklar.
2 .NET 8 henüz işlem içi modelde desteklenmese de yalıtılmış çalışan modelinde kullanılabilir. İşlem içi modelin gelecekteki seçenekleri de dahil olmak üzere .NET 8 planları hakkında bilgi için Azure İşlevleri Yol Haritası Güncelleştirme gönderisine bakın.
3 Süreç içi model için destek 10 Kasım 2026'da sona erer. 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.
İpucu
Yalıtılmış çalışan modelinde .NET 8'e güncelleştirmenizi öneririz. .NET 8, .NET'ten 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, .NET'in gelecekteki sürümlerini daha kolay hedefleme özelliği de dahil olmak üzere uygulamanıza ek avantajlar sağlar. 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, yalıtılmış çalışan modelinde .NET 7 veya .NET 6 için belirli örnekler sunmaz. Bu sürümleri hedeflemeniz gerekiyorsa .NET 8 yalıtılmış çalışan modeli örneklerini 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:
- 3.x ile 4.x arasındaki hataya neden olan değişikliklerin listesini gözden geçirin.
- 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 geçirdikten sonra, Azure İşlevleri Core Tools'un 4.x sürümünü kullanarak uygulamayı yerel olarak tam olarak test edin.
- Azure'da barındırılan uygulamada yükseltme öncesi doğrulayıcıyı çalıştırın ve tanımlanan sorunları çözün.
- Azure'daki işlev uygulamanızı yeni sürüme güncelleştirin. Kapalı kalma süresini en aza indirmeniz gerekiyorsa, azure'da geçirilen uygulamanızı yeni çalışma zamanı sürümünde test etmek ve doğrulamak için bir hazırlama yuvası 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üncelleştirme.
- Geçirilen projenizi güncelleştirilmiş işlev uygulamasında yayımlayın.
Visual Studio'yu kullanarak bir sürüm 4.x projesini daha düşük bir sürümde mevcut bir işlev uygulamasına yayımladığınızda, Visual Studio'nun dağıtım sırasında işlev uygulamasını 4.x sürümüne güncelleştirmesine izin vermeniz istenir. Bu güncelleştirme, Yuva olmadan güncelleştirme bölümünde tanımlanan işlemi kullanır.
Yerel projenizi geçirme
Yükseltme yönergeleri dile bağlıdır. Dilinizi görmüyorsanız makalenin üst kısmındaki seçiciden seçin.
Hedef .NET sürümünüzle ve istenen işlem modeliyle (işlem içi veya yalıtılmış çalışan işlemi) eşleşen sekmeyi seçin.
İpucu
Yalıtılmış çalışan modelini kullanarak .NET'in LTS veya STS sürümüne geçiyorsanız, .NET Yükseltme Yardımcısı aşağıdaki bölümlerde belirtilen değişikliklerin çoğunu otomatik olarak yapmak için kullanılabilir.
Proje dosyası
Aşağıdaki örnek, 3.x sürümünde .NET Core 3.1 kullanan bir .csproj
proje dosyasıdır:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<AzureFunctionsVersion>v3</AzureFunctionsVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.13" />
</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 ve uygulamanız bunun yerine C# betiği (.csx
dosyalar) kullanıyorsa devam etmeden önce proje modeline dönüştürmeniz gerekir.
XML proje dosyasında aşağıdaki değişiklikler gereklidir .csproj
:
değerini
PropertyGroup
ayarlayın.TargetFramework
olarak belirleyinnet8.0
.değerini
PropertyGroup
ayarlayın.AzureFunctionsVersion
olarak belirleyinv4
.öğesine aşağıdaki
OutputType
öğeyiPropertyGroup
ekleyin:<OutputType>Exe</OutputType>
içinde
ItemGroup
.PackageReference
listesinde, paket başvurusınıMicrosoft.NET.Sdk.Functions
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" />
Ad alanları içindeki
Microsoft.Azure.WebJobs.*
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 deyimler üzerindeki using
etkisini bu makalenin devamında http tetikleyici şablonu ö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ı | ReplaceMicrosoft.Azure.WebJobs.Extensions.Storage örneklerini şununla değiştirin: Microsoft.Azure.Functions.Worker.Extensions. Depolama. Bloblar, Microsoft.Azure.Functions.Worker.Extensions. Depolama. Kuyruklar ve Microsoft.Azure.Functions.Worker.Extensions.Tables |
Blob bağlamaları | Başvuruları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.Storage.Blobs en son sürümüyle Microsoft.Azure.Functions.Worker.Extensions. Depolama. Blob |
Kuyruk bağlamaları | Başvuruları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.Storage.Queues en son sürümüyle Microsoft.Azure.Functions.Worker.Extensions. Depolama. Sıra |
Tablo bağlamaları | Başvuruları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.Tables en son sürümüyle Microsoft.Azure.Functions.Worker.Extensions.Tables |
Cosmos DB bağlamaları | Başvuruları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.CosmosDB ve/veya Microsoft.Azure.WebJobs.Extensions.DocumentDB en son sürümüyle Microsoft.Azure.Functions.Worker.Extensions.CosmosDB |
Service Bus bağlamaları | Başvuruları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.ServiceBus en son sürümüyle Microsoft.Azure.Functions.Worker.Extensions.ServiceBus |
Event Hubs bağlamaları | Başvuruları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.EventHubs en son sürümüyle Microsoft.Azure.Functions.Worker.Extensions.EventHubs |
Event Grid bağlamaları | Başvuruları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.EventGrid en son sürümüyle Microsoft.Azure.Functions.Worker.Extensions.EventGrid |
SignalR Hizmeti bağlamaları | Başvuruları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.SignalRService en son sürümüyle Microsoft.Azure.Functions.Worker.Extensions.SignalRService |
Dayanıklı İşlevler | Başvuruları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.DurableTask en son sürümüyle Microsoft.Azure.Functions.Worker.Extensions.DurableTask |
Dayanıklı İşlevler (SQL depolama sağlayıcısı) |
Başvuruları şununla değiştirin:Microsoft.DurableTask.SqlServer.AzureFunctions en son sürümüyle Microsoft.Azure.Functions.Worker.Extensions.DurableTask.SqlServer |
Dayanıklı İşlevler (Netherite depolama sağlayıcısı) |
Başvuruları şununla değiştirin:Microsoft.Azure.DurableTask.Netherite.AzureFunctions en son sürümüyle Microsoft.Azure.Functions.Worker.Extensions.DurableTask.Netherite |
SendGrid bağlamaları | Başvuruları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.SendGrid en son sürümüyle Microsoft.Azure.Functions.Worker.Extensions.SendGrid |
Kafka bağlamaları | Başvuruları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.Kafka en son sürümüyle Microsoft.Azure.Functions.Worker.Extensions.Kafka |
RabbitMQ bağlamaları | Başvuruları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.RabbitMQ en son sürümüyle Microsoft.Azure.Functions.Worker.Extensions.RabbitMQ |
Bağımlılık ekleme ve başlangıç yapılandırması |
Başvurularını kaldırmaMicrosoft.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ında 4.x ve 5.x sürümleri arasındaki yapıda hataya neden olan değişiklikler vardır. Daha fazla bilgi için bkz. Azure İşlevleri için Azure Service Bus bağlamaları.
Yalıtılmış çalışan modeli uygulamanız veya Microsoft.Azure.Functions.Extensions
ad alanları içindeki hiçbir pakete Microsoft.Azure.WebJobs.*
başvurmamalıdır. Bunlara yönelik kalan başvuruları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 Azure SDK'sının en son sürümleriyle çalışır ve neredeyse tüm paketleri biçimindedirAzure.*
.
Program.cs dosyası
Yalıtılmış bir çalışan işleminde çalıştırılacak şekilde geçiş yaparken, 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ı geliştirmek ve uygulamanız HTTP tetikleyicileri kullandığında tanıdık bir programlama modeli sağlamak için ASP.NET Core tümleştirmesini içerir. HTTP tetikleyicilerini kullanmayı düşünmüyorsanız, çağrısı ConfigureFunctionsWebApplication
yerine öğesine yapılan çağrıyı ConfigureFunctionsWorkerDefaults
değiştirebilirsiniz. Bunu yaparsanız, başvuruyu Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore
proje dosyanızdan kaldırabilirsiniz. Ancak, en iyi performans için, diğer tetikleyici türlerine sahip işlevler için bile ASP.NET Core'da tutmalısınız FrameworkReference
.
Dosya, Program.cs
özniteliğine FunctionsStartup
sahip olan ve genellikle bir dosya olan herhangi bir Startup.cs
dosyanın yerini alır. Kodunuzun FunctionsStartup
başvuracağı IFunctionsHostBuilder.Services
yerlerde, bunun yerine içindeki yöntemine Program.cs
HostBuilder
deyimler .ConfigureServices()
ekleyebilirsiniz. ile Program.cs
ç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.
Yukarıdaki varsayılan Program.cs
örnekler, yalıtılmış çalışan modeli için Uygulama Analizler tümleştirmesi kurulumunu içerir. içinde, projenizdeki Program.cs
koddan gelen günlüklere uygulanması gereken günlük filtrelemelerini de yapılandırmanız gerekir. Yalıtılmış çalışan modelinde host.json
, dosya yalnızca İşlevler konak çalışma zamanı tarafından yayılan olayları denetler. içinde Program.cs
filtreleme kurallarını yapılandırmazsanız, telemetrinizdeki çeşitli kategoriler için mevcut günlük düzeylerinde farklılıklar görebilirsiniz.
özel yapılandırma kaynaklarını öğesinin HostBuilder
bir parçası olarak kaydedebilirsiniz, ancak bunların benzer şekilde yalnızca projenizdeki kodlar için de geçerli olduğunu unutmayın. Tetikleyici ve bağlama yapılandırması platform tarafından da gereklidir ve bu, uygulama ayarları, Key Vault başvuruları veya Uygulama Yapılandırması başvuru özellikleri aracılığıyla sağlanmalıdır.
Var olan FunctionsStartup
herhangi bir öğeden dosyaya Program.cs
her şeyi taşıdıktan sonra özniteliğini FunctionsStartup
ve uygulandığı sınıfı silebilirsiniz.
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 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, değeri "dotnet-isolated" olarak değiştirmeniz FUNCTIONS_WORKER_RUNTIME
gerekir.
host.json dosyası
Dosyanızda host.json
değişiklik yapılması gerekmez. Ancak, uygulamanız bu dosyadaki yapılandırmayı işlem içi model projenizden Analizler, dosyanızda ek değişiklikler yapmak isteyebilirsinizProgram.cs
. Dosya host.json
yalnızca İşlevler ana bilgisayar çalışma zamanından günlüğe kaydetmeyi denetler ve yalıtılmış çalışan modelinde bu günlüklerden bazıları doğrudan uygulamanızdan gelir ve size daha fazla denetim sağlar. Bu günlükleri filtreleme hakkında ayrıntılı bilgi için bkz . Yalıtılmış çalışan modelinde günlük düzeylerini yönetme.
Sınıf adı değişiklikleri
Bazı anahtar sınıfları, sürümler arasında adları değiştirdi. Bu değişiklikler, .NET API'lerindeki 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 tablo, geçiş sırasında değişebilen İşlevler tarafından kullanılan anahtar .NET sınıflarını gösterir:
.NET Core 3.1 | .NET 5 | .NET 8 |
---|---|---|
FunctionName (öznitelik) |
Function (öznitelik) |
Function (öznitelik) |
ILogger |
ILogger |
ILogger , ILogger<T> |
HttpRequest |
HttpRequestData |
HttpRequestData , HttpRequest (ASP.NET Core tümleştirmesini kullanarak) |
IActionResult |
HttpResponseData |
HttpResponseData , IActionResult (ASP.NET Core tümleştirmesini kullanarak) |
FunctionsStartup (öznitelik) |
Bunun yerine kullanır Program.cs |
Bunun yerine kullanır Program.cs |
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 3.x ile 4.x arasındaki hataya neden olan değişiklikleri denetlediğinizden emin olun.
JSON seri hale getirme
Varsayılan olarak, yalıtılmış çalışan modeli JSON serileştirme için kullanır System.Text.Json
. Seri hale getirici seçeneklerini özelleştirmek veya JSON.NET ()Newtonsoft.Json
seçeneğine geçmek için bu yönergelere bakın.
Uygulama Analizler günlük düzeyleri ve filtreleme
Günlükler hem İşlevler konak çalışma zamanından hem de projenizdeki koddan Uygulama Analizler gönderilebilir. , host.json
konak günlüğü için kuralları yapılandırmanıza olanak tanır, ancak kodunuzdan gelen günlükleri denetlemek için filtreleme kurallarını öğesinin bir parçası olarak yapılandırmanız Program.cs
gerekir. Bu günlükleri filtreleme hakkında ayrıntılı bilgi için bkz . Yalıtılmış çalışan modelinde günlük düzeylerini yönetme.
HTTP tetikleyicisi şablonu
İşlem içi ve yalıtılmış çalışan işlemi arasındaki farklar HTTP ile tetiklenen işlevlerde görülebilir. Sürüm 3.x (işlem içi) için HTTP tetikleyici şablonu aşağıdaki örneğe benzer:
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
namespace Company.Function
{
public static class HttpTriggerCSharp
{
[FunctionName("HttpTriggerCSharp")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.AuthLevelValue, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string name = req.Query["name"];
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
name = name ?? data?.name;
string responseMessage = string.IsNullOrEmpty(name)
? "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."
: $"Hello, {name}. This HTTP triggered function executed successfully.";
return new OkObjectResult(responseMessage);
}
}
}
Geçirilen sürüm için 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.
Uygulamanızın Azure İşlevleri uzantı paketini 2.x veya üzeri bir değere güncelleştirin. Daha fazla bilgi için bkz . Hataya neden olan değişiklikler.
Gerekirse 4.x sürümünde desteklenen Java sürümlerinden birine geçin.
Aşağıdaki örnekte olduğu gibi ayarı olarak değiştirmek
FUNCTIONS_EXTENSION_VERSION
için~4
uygulamanınPOM.xml
dosyasını güncelleştirin:<configuration> <resourceGroup>${functionResourceGroup}</resourceGroup> <appName>${functionAppName}</appName> <region>${functionAppRegion}</region> <appSettings> <property> <name>WEBSITE_RUN_FROM_PACKAGE</name> <value>1</value> </property> <property> <name>FUNCTIONS_EXTENSION_VERSION</name> <value>~4</value> </property> </appSettings> </configuration>
- Gerekirse, 4.x sürümünde desteklenen Node.js sürümlerinden birine geçin.
- Bu fırsatı kullanarak önerilen PowerShell 7.2 sürümüne yükseltin. Daha fazla bilgi için bkz . PowerShell sürümleri.
Yükseltme öncesi doğrulayıcıyı çalıştırma
Azure İşlevleri'nde, işlev uygulamanızı 4.x sürümüne geçirirken karşılaşabileceğiniz olası sorunları belirlemenize yardımcı olacak bir yükseltme öncesi doğrulayıcı sağlanır. Yükseltme öncesi doğrulayıcıyı çalıştırmak için:
Sorunları tanılama ve çözme sayfasını açın.
İşlev Uygulaması Tanılama'da yazmaya
Functions 4.x Pre-Upgrade Validator
başlayın ve listeden seçin.Doğrulama tamamlandıktan sonra önerileri gözden geçirin ve uygulamanızdaki sorunları giderin. Uygulamanızda değişiklik yapmanız gerekiyorsa, Azure İşlevleri Core Tools v4 kullanarak veya hazırlama yuvası kullanarak İşlevler çalışma zamanının 4.x sürümüne göre değişiklikleri doğruladığınızdan emin olun.
Azure'da işlev uygulamanızı güncelleştirme
Geçirilen projenizi yayımlamadan önce Azure'daki 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, yuvaları kullanarak güncelleştirerek uygulamanızda kapalı kalma süresini en aza indirip geri almayı basitleştirebilirsiniz.
Yuva olmadan güncelleştirme
v4.x'e güncelleştirmenin en basit yolu, Uygulama ayarını Azure'daki işlev uygulamanızda olarak ~4
ayarlamaktırFUNCTIONS_EXTENSION_VERSION
. 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>
Windows ve Linux arasında farklılık gösteren başka bir ayar da ayarlamanız gerekir.
Windows'da çalışırken, çalışma zamanının 4.x sürümü için gereken .NET 6.0'ı da etkinleştirmeniz gerekir.
az functionapp config set --net-framework-version v6.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 değerini işlev uygulamanızın adıyla ve <RESOURCE_GROUP_NAME>
kaynak grubunun adıyla değiştirin<APP_NAME>
.
Artık 4.x sürümünde çalıştırılacak şekilde geçirilen uygulama projenizi yeniden yayımlayabilirsiniz.
Yuvaları 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. Yuvalar ayrıca güncelleştirme sırasında kapalı 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 ayar WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0
yapılması gerekir. Bu ayarı ekleme şekliniz, güncelleştirme için gereken kapalı kalma süresini etkiler.
Standart güncelleştirme
Yuva etkin işlev uygulamanız tam yeniden başlatmanın kapalı kalma süresini işleyebilirse, ayarı doğrudan üretim yuvasında güncelleştirebilirsiniz WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS
. 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'yi veya Azure portalını kullanmanız gerekir.
Üretim yuvasında ayarlamak
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0
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>
Bu örnekte değerini işlev uygulamanızın adıyla ve
<RESOURCE_GROUP_NAME>
kaynak grubunun adıyla değiştirin<APP_NAME>
. Bu komut, üretim yuvasında çalışan uygulamanın yeniden başlatılmasına neden olur.Hazırlama yuvasında ayarlamak
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS
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>
Hazırlama yuvasını yeni çalışma zamanı sürümüne değiştirmek
FUNCTIONS_EXTENSION_VERSION
ve güncelleştirmek 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ü Için Windows'ta .NET 6 gerekir. 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'da çalışırken, çalışma zamanının 4.x sürümü için gereken .NET 6.0'ı da etkinleştirmeniz gerekir.
az functionapp config set --net-framework-version v6.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 değerini işlev uygulamanızın adıyla ve
<RESOURCE_GROUP_NAME>
kaynak grubunun adıyla değiştirin<APP_NAME>
.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 düşük kapalı kalma süresi güncelleştirmesi
Üretim uygulamanızda kapalı kalma süresini en aza indirmek için, ayarı hazırlama yuvasından üretime değiştirebilirsiniz WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS
. Bundan sonra, önceden değiştirilmiş bir hazırlama yuvasından güncelleştirilmiş sürümü değiştirebilirsiniz.
Hazırlama yuvasında ayarlamak
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0
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 hatanın nedeni, yalnızca değiştirme sırasında hazırlamanın olması
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0
, hazırlamadakiFUNCTIONS_EXTENSION_VERSION
ayarı kaldırdığından oluşabilir. Sürüm ayarı olmadan yuvanız kötü durumdadır. Değiştirme işleminden hemen sonra hazırlama yuvasındaki sürümün güncelleştirilmesi yuvayı yeniden iyi duruma getirmelidir ve gerekirse değişikliklerinizi geri alma çağrısı yapabilirsiniz. Ancak, değiştirme işleminin herhangi bir geri alınması, hazırlamada görülen üretimde aynı hataları önlemek için değiştirme işleminden önce üretimden doğrudan kaldırmanızıWEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0
da gerektirir. Üretim ayarındaki bu değişiklik yeniden başlatmaya neden olur.Hazırlama yuvasında yeniden ayarlamak
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0
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 ayarlanmıştır
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0
.Hazırlama yuvasını yeni çalışma zamanı sürümüne değiştirmek
FUNCTIONS_EXTENSION_VERSION
ve güncelleştirmek 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ü Için Windows'ta .NET 6 gerekir. 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'da çalışırken, çalışma zamanının 4.x sürümü için gereken .NET 6.0'ı da etkinleştirmeniz gerekir.
az functionapp config set --net-framework-version v6.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 değerini işlev uygulamanızın adıyla ve
<RESOURCE_GROUP_NAME>
kaynak grubunun adıyla değiştirin<APP_NAME>
.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
3.x ile 4.x arasında hataya neden olan değişiklikler
Aşağıda, bir 3.x uygulamasını 4.x sürümüne yükseltmeden önce dikkat edilmesi gereken, dile özgü hataya neden olan değişiklikler de dahil olmak üzere önemli önemli değişiklikler yer alır. Tam liste için bkz. Azure İşlevleri GitHub'da Hataya Neden Olan Değişiklik: Onaylandı etiketli sorunlar.
Programlama dilinizi görmüyorsanız sayfanın en üstünden seçin.
Çalışma Zamanı
Azure İşlevleri Proxy'ler, Azure İşlevleri çalışma zamanının 1.x ile 3.x sürümleri için eski bir özelliktir. İşlev Proxy'leri desteği 4.x sürümünde yeniden etkinleştirilebilir, böylece işlev uygulamalarınızı en son çalışma zamanı sürümüne başarıyla güncelleştirebilirsiniz. Mümkün olan en kısa sürede işlev uygulamalarınızı Azure API Management ile tümleştirmeye geçmeniz gerekir. API Management, İşlev tabanlı API'lerinizi tanımlamak, güvenliğini sağlamak, yönetmek ve gelire dönüştürmek için daha eksiksiz bir özellik kümesinden yararlanmanıza olanak tanır. Daha fazla bilgi için bkz . API Management tümleştirmesi. İşlevler sürüm 4.x'te Proxy'ler desteğini yeniden etkinleştirmeyi öğrenmek için bkz . İşlevler v4.x'te Proxy'leri yeniden etkinleştirme.
AzureWebJobsDashboard kullanarak Azure Depolama'da oturum açmak artık 4.x'te desteklenmiyor. Bunun yerine Application Analizler kullanmalısınız. (#1923)
Azure İşlevleri 4.x artık uzantılar için en düşük sürüm gereksinimlerini zorunlu kılmasına neden olur. Etkilenen uzantıların en son sürümüne güncelleştirin. non-.NET diller için uzantı paketi sürüm 2.x veya sonraki bir sürüme güncelleştirin . (#1987)
Varsayılan ve maksimum zaman aşımları artık Bir Tüketim planında Linux üzerinde çalışan işlev uygulamaları için 4.x'te zorunlu kılındı. (#1915)
Azure İşlevleri 4.x, Key Vault sağlayıcısı için ve
Azure.Security.KeyVault.Secrets
kullanırAzure.Identity
ve Microsoft.Azure.KeyVault kullanımını kullanım dışı bırakmıştır. İşlev uygulaması ayarlarını yapılandırma hakkında daha fazla bilgi için Gizli Dizi Depoları'ndaki Key Vault seçeneğine bakın. (#2048)Depolama hesaplarını paylaşan işlev uygulamaları artık konak kimlikleri aynı olduğunda başlatılamıyor. Daha fazla bilgi için bkz . Konak Kimliği ile ilgili dikkat edilmesi gerekenler. (#2049)
- Varsayılan iş parçacığı sayısı güncelleştirildi. İş parçacığı açısından güvenli olmayan veya yüksek bellek kullanımına sahip işlevler etkilenebilir. (#1962)