Alkalmazások migrálása az Azure Functions 3.x verziójából a 4.x verzióba
Az Azure Functions 4.x-es verziója nagyon visszafelé kompatibilis a 3.x verzióval. A legtöbb alkalmazásnak biztonságosan át kell migrálnia a 4.x-be anélkül, hogy jelentős kódmódosításokat kellene végrehajtania. A Functions futtatókörnyezeti verzióival kapcsolatos további információkért tekintse meg az Azure Functions futtatókörnyezeti verzióinak áttekintését.
Fontos
2022. december 13-ától az Azure Functions-futtatókörnyezet 2.x és 3.x verzióján futó függvényalkalmazások elérik a kiterjesztett támogatás végét. További információ: Kivont verziók.
Ez a cikk végigvezeti a függvényalkalmazás biztonságos migrálásának folyamatán a Functions-futtatókörnyezet 4.x verziójának futtatásához. Mivel a projektmigrálási utasítások nyelvfüggőek, mindenképpen a cikk tetején található választóból válassza ki a fejlesztési nyelvet.
A migrálandó függvényalkalmazások azonosítása
A következő PowerShell-szkripttel létrehozhatja az előfizetésében azoknak a függvényalkalmazásoknak a listáját, amelyek jelenleg a 2.x vagy a 3.x verziót célják:
$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
Válassza ki a cél .NET-verziót
A Functions-futtatókörnyezet 3.x verziójában a C# függvényalkalmazás a .NET Core 3.1-et célozza meg a folyamatban lévő modellel, vagy a .NET 5-öt az izolált feldolgozómodellel.
A függvényalkalmazás migrálásakor lehetősége van kiválasztani a .NET célverzióját. A C#-projektet a .NET alábbi verzióinak egyikére frissítheti, amelyeket a Functions 4.x verziója támogat:
.NET-verzió | .NET Hivatalos támogatási szabályzat kiadási típusa | Functions-folyamatmodell1,2 |
---|---|---|
.NET 9 | 3. előzetes verzió | Izolált feldolgozói modell |
.NET 8 | LTS (támogatás megszűnése 2026. november 10.) | Izolált feldolgozói modell, Folyamatközi modell2 |
.NET 6 | LTS (támogatás megszűnése 2024. november 12.) | Izolált feldolgozói modell, Folyamatközi modell2 |
.NET-keretrendszer 4.8 | Szabályzat megtekintése | Izolált feldolgozói modell |
1 Az izolált feldolgozói modell támogatja a .NET hosszú távú támogatási (LTS) és standard távú támogatási (STS) verzióit, valamint .NET-keretrendszer. A folyamaton belüli modell csak a .NET LTS-kiadásait támogatja, a .NET 8 végződéssel. A két modell teljes funkció- és funkció-összehasonlítását lásd : Különbségek a folyamatban lévő és a feldolgozói folyamat elkülönítése .NET Azure Functions között.
2 A folyamaton belüli modell támogatása 2026. november 10-én megszűnik. További információkért tekintse meg ezt a támogatási közleményt. A folyamatos teljes támogatás érdekében az alkalmazásokat át kell telepítenie az izolált feldolgozói modellbe.
3 A támogatással, az aktuális korlátozásokkal és az előzetes verzió használatára vonatkozó utasításokért tekintse meg az izolált feldolgozói modell előzetes verziójú .NET-verzióit.
Tipp.
Javasoljuk, hogy frissítsen a .NET 8-ra az izolált feldolgozói modellen. A .NET 8 a .NET leghosszabb támogatási ablakával rendelkező, teljesen kiadott verzió.
Bár dönthet úgy, hogy inkább a folyamaton belüli modellt használja, ez nem ajánlott, ha elkerülhető. A folyamaton belüli modell támogatása 2026. november 10-én megszűnik, ezért előbb át kell lépnie az elkülönített feldolgozói modellre. Ha így tesz, a 4.x-es verzióra való migrálás csökkenti a szükséges teljes erőfeszítést, és az izolált feldolgozói modell további előnyöket biztosít az alkalmazásnak, beleértve a .NET jövőbeli verzióinak egyszerűbb megcélzását is. Ha az izolált feldolgozói modellre vált, a .NET frissítési segéd számos szükséges kódmódosítást is képes kezelni.
Ez az útmutató nem mutat be konkrét példákat a .NET 6-hoz. Ha meg kell céloznia ezt a verziót, módosíthatja a .NET 8-példákat.
Előkészületek a migráláshoz
Ha még nem tette meg, az Azure PowerShell használatával azonosítsa az aktuális Azure-előfizetésben áttelepítendő alkalmazások listáját.
Mielőtt migrálna egy alkalmazást a Functions-futtatókörnyezet 4.x verziójára, végezze el a következő feladatokat:
- Tekintse át a 3.x és 4.x közötti kompatibilitástörő változások listáját.
- A helyi projekt áttelepítéséhez végezze el a helyi projekt áttelepítésének lépéseit a 4.x verzióra.
- A projekt migrálása után tesztelje az alkalmazást helyileg az Azure Functions Core Tools 4.x-es verziójával.
- Futtassa a frissítés előtti érvényesítőt az Azure-ban üzemeltetett alkalmazásban, és oldja meg az észlelt problémákat.
- Frissítse a függvényalkalmazást az Azure-ban az új verzióra. Ha minimalizálnia kell az állásidőt, érdemes lehet egy átmeneti ponttal tesztelni és ellenőrizni a migrált alkalmazást az Azure-ban az új futtatókörnyezeti verzióban. Ezután üzembe helyezheti az alkalmazást a frissített verzióbeállításokkal az éles ponton. További információ: Frissítés pontok használatával.
- Tegye közzé a migrált projektet a frissített függvényalkalmazásban.
Ha a Visual Studio használatával közzétesz egy 4.x-es verziójú projektet egy meglévő függvényalkalmazásban alacsonyabb verzióban, a rendszer arra kéri, hogy a Visual Studio az üzembe helyezés során frissítse a függvényalkalmazást a 4.x verzióra. Ez a frissítés ugyanazt a folyamatot használja, amelyet a Frissítés pont nélkül definiált.
A helyi projekt migrálása
A frissítési utasítások nyelvfüggők. Ha nem látja a nyelvet, válassza ki a cikk tetején található választógombból.
Válassza ki azt a lapot, amely megfelel a .NET célverziójának és a kívánt folyamatmodellnek (folyamatban lévő vagy izolált feldolgozói folyamat).
Tipp.
Ha a .NET LTS- vagy STS-verziójára vált az izolált feldolgozói modell használatával, a .NET frissítési segéd használatával automatikusan elvégezheti a következő szakaszokban említett módosítások nagy részét.
Projektfájl
Az alábbi példa egy .csproj
.NET Core 3.1-et használó projektfájl a 3.x verzión:
<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>
Az alábbi eljárások egyikével frissítheti ezt az XML-fájlt a Functions 4.x verziójában való futtatáshoz:
Ezek a lépések egy helyi C#-projektet feltételeznek, és ha az alkalmazás ehelyett C# szkriptet (.csx
fájlokat) használ, a folytatás előtt át kell alakítania a projektmodellt .
Az XML-projektfájlban a .csproj
következő módosítások szükségesek:
Állítsa be a következő értékét
PropertyGroup
: .TargetFramework
net8.0
hezÁllítsa be a következő értékét
PropertyGroup
: .AzureFunctionsVersion
v4
hezAdja hozzá a következő
OutputType
elemet aPropertyGroup
következőhöz:<OutputType>Exe</OutputType>
ItemGroup
A .PackageReference
listában cserélje le a csomaghivatkozástMicrosoft.NET.Sdk.Functions
a következő hivatkozásokra:<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" />
Jegyezze fel a névterek más
Microsoft.Azure.WebJobs.*
csomagjaira mutató hivatkozásokat. Ezeket a csomagokat egy későbbi lépésben fogja lecserélni.Adja hozzá a következő újat
ItemGroup
:<ItemGroup> <Using Include="System.Threading.ExecutionContext" Alias="ExecutionContext"/> </ItemGroup>
A módosítások elvégzése után a frissített projektnek a következő példához hasonlóan kell kinéznie:
<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>
Csomag- és névtérváltozások
A migrálni kívánt modell alapján előfordulhat, hogy frissítenie vagy módosítania kell az alkalmazás által hivatkozott csomagokat. A célcsomagok bevezetésekor frissítenie kell az utasítások és a hivatkozott típusok névterét. A névtérváltozások hatása a HTTP-eseményindító sablon példáiban található utasításokra using
a jelen cikk későbbi részében látható.
Ha még nem tette meg, frissítse a projektet, hogy a következő stabil verziókra hivatkozzon:
Az alkalmazás által használt eseményindítóktól és kötésektől függően előfordulhat, hogy az alkalmazásnak más csomagokra kell hivatkoznia. Az alábbi táblázat a leggyakrabban használt bővítmények cseréjét mutatja be:
Eset | Csomaghivatkozások módosítása |
---|---|
Időzítő-eseményindító | Hozzáadás Microsoft.Azure.Functions.Worker.Extensions.Timer |
Tárkötések | ReplaceMicrosoft.Azure.WebJobs.Extensions.Storage nevű és Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs, Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues és Microsoft.Azure.Functions.Worker.Extensions.Tables |
Blobkötések | Hivatkozás cseréje erre:Microsoft.Azure.WebJobs.Extensions.Storage.Blobs a legújabb verzióval Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs |
Üzenetsorkötések | Hivatkozás cseréje erre:Microsoft.Azure.WebJobs.Extensions.Storage.Queues a legújabb verzióval Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues |
Táblakötések | Hivatkozás cseréje erre:Microsoft.Azure.WebJobs.Extensions.Tables a legújabb verzióval Microsoft.Azure.Functions.Worker.Extensions.Tables |
Cosmos DB-kötések | Hivatkozás cseréje erre:Microsoft.Azure.WebJobs.Extensions.CosmosDB és/vagy Microsoft.Azure.WebJobs.Extensions.DocumentDB a legújabb verzióval Microsoft.Azure.Functions.Worker.Extensions.CosmosDB |
Szolgáltatásbusz-kötések | Hivatkozás cseréje erre:Microsoft.Azure.WebJobs.Extensions.ServiceBus a legújabb verzióval Microsoft.Azure.Functions.Worker.Extensions.ServiceBus |
Event Hubs-kötések | Hivatkozás cseréje erre:Microsoft.Azure.WebJobs.Extensions.EventHubs a legújabb verzióval Microsoft.Azure.Functions.Worker.Extensions.EventHubs |
Event Grid-kötések | Hivatkozás cseréje erre:Microsoft.Azure.WebJobs.Extensions.EventGrid a legújabb verzióval Microsoft.Azure.Functions.Worker.Extensions.EventGrid |
SignalR Service-kötések | Hivatkozás cseréje erre:Microsoft.Azure.WebJobs.Extensions.SignalRService a legújabb verzióval Microsoft.Azure.Functions.Worker.Extensions.SignalRService |
Tartós függvények | Hivatkozás cseréje erre:Microsoft.Azure.WebJobs.Extensions.DurableTask a legújabb verzióval Microsoft.Azure.Functions.Worker.Extensions.DurableTask |
Tartós függvények (SQL Storage-szolgáltató) |
Hivatkozás cseréje erre:Microsoft.DurableTask.SqlServer.AzureFunctions a legújabb verzióval Microsoft.Azure.Functions.Worker.Extensions.DurableTask.SqlServer |
Tartós függvények (Netherite storage provider) |
Hivatkozás cseréje erre:Microsoft.Azure.DurableTask.Netherite.AzureFunctions a legújabb verzióval Microsoft.Azure.Functions.Worker.Extensions.DurableTask.Netherite |
SendGrid-kötések | Hivatkozás cseréje erre:Microsoft.Azure.WebJobs.Extensions.SendGrid a legújabb verzióval Microsoft.Azure.Functions.Worker.Extensions.SendGrid |
Kafka-kötések | Hivatkozás cseréje erre:Microsoft.Azure.WebJobs.Extensions.Kafka a legújabb verzióval Microsoft.Azure.Functions.Worker.Extensions.Kafka |
RabbitMQ-kötések | Hivatkozás cseréje erre:Microsoft.Azure.WebJobs.Extensions.RabbitMQ a legújabb verzióval Microsoft.Azure.Functions.Worker.Extensions.RabbitMQ |
Függőséginjektálás és indítási konfiguráció |
Hivatkozás eltávolításaMicrosoft.Azure.Functions.Extensions (Az izolált feldolgozói modell alapértelmezés szerint ezt a funkciót biztosítja.) |
A megfontolandó bővítmények teljes listájáért tekintse meg a támogatott kötéseket , és tekintse meg az egyes bővítmények dokumentációját az izolált folyamatmodellre vonatkozó teljes telepítési utasításokért. Mindenképpen telepítse a megcélzott csomagok legújabb stabil verzióját.
Tipp.
Előfordulhat, hogy a folyamat során a bővítményverziók módosításai szükségessé teszik a fájl frissítését host.json
is. Mindenképpen olvassa el a használt bővítmények dokumentációját.
A Service Bus-bővítmény például a 4.x és az 5.x verzió közötti struktúrában kompatibilitástörő változásokat mutat. További információ: Azure Service Bus-kötések az Azure Functionshez.
Az izolált feldolgozómodell-alkalmazás nem hivatkozhat a névterekben vagy Microsoft.Azure.Functions.Extensions
a Microsoft.Azure.WebJobs.*
. Ha további hivatkozásokkal rendelkezik ezekre, azokat el kell távolítani.
Tipp.
Az alkalmazás az Azure SDK-típusoktól is függhet, akár az eseményindítók és kötések részeként, akár önálló függőségként. Használja ki ezt a lehetőséget, hogy ezeket is frissítse. A Functions-bővítmények legújabb verziói a .NET-hez készült Azure SDK legújabb verzióival működnek, amelyek szinte minden csomagja az űrlapAzure.*
.
Program.cs fájl
Izolált feldolgozói folyamatba való migráláskor a következő program.cs fájlt kell hozzáadnia a projekthez:
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();
Ez a példa ASP.NET Core-integrációt is tartalmaz, amely javítja a teljesítményt, és ismerős programozási modellt biztosít, amikor az alkalmazás HTTP-eseményindítókat használ. Ha nem kíván HTTP-eseményindítókat használni, a hívás ConfigureFunctionsWebApplication
lecserélhető a következő hívásra ConfigureFunctionsWorkerDefaults
: . Ha így tesz, eltávolíthatja a hivatkozásokat Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore
a projektfájlból. A legjobb teljesítmény érdekében azonban még a más triggertípusokkal rendelkező függvények esetében is meg kell tartania a FrameworkReference
ASP.NET Core-t.
A Program.cs
fájl lecserél minden olyan fájlt, amely rendelkezik az FunctionsStartup
attribútummal, amely általában egy Startup.cs
fájl. Azokban a helyeken, ahol a FunctionsStartup
kód hivatkoznaIFunctionsHostBuilder.Services
, ehelyett hozzáadhat utasításokat a .ConfigureServices()
metóduson belül a Program.cs
HostBuilder
saját . A munkával Program.cs
kapcsolatos további információkért tekintse meg az elkülönített feldolgozói modell útmutatójának indítási és konfigurációs útmutatóját.
A fenti alapértelmezett Program.cs
példák közé tartozik az Application Insights-integráció beállítása az izolált feldolgozói modellhez. Program.cs
Emellett konfigurálnia kell minden olyan naplószűrést is, amely a projekt kódjából származó naplókra vonatkozik. Az izolált feldolgozómodellben a fájl csak a host.json
Functions-gazdagép futtatókörnyezete által kibocsátott eseményeket szabályozza. Ha nem konfigurálja a Program.cs
szűrési szabályokat, akkor a telemetria különböző kategóriáihoz tartozó naplószintek különbségei jelenhetnek meg.
Bár az egyéni konfigurációs forrásokat a HostBuilder
program részeként regisztrálhatja, vegye figyelembe, hogy ezek hasonlóan csak a projekt kódjára vonatkoznak. A platformnak trigger- és kötéskonfigurációra is szüksége van, amelyet az alkalmazásbeállítások, a Key Vault-hivatkozások vagy az alkalmazáskonfigurációs referenciák funkcióinak segítségével kell megadni.
Miután áthelyezett mindent a meglévőből FunctionsStartup
a Program.cs
fájlba, törölheti az FunctionsStartup
attribútumot és az osztályt, amelyre alkalmazták.
local.settings.json fájl
A local.settings.json fájl csak helyi futtatáskor használható. További információt a Helyi beállítások fájlban talál.
A 4.x verzióra való migráláskor győződjön meg arról, hogy a local.settings.json fájl legalább a következő elemeket tartalmazza:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "AzureWebJobsStorageConnectionStringValue",
"FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
}
}
Feljegyzés
Amikor a folyamaton belüli futtatásról az elkülönített feldolgozói folyamatba migrál, az FUNCTIONS_WORKER_RUNTIME
értéket "dotnet-izolált" értékre kell módosítania.
host.json fájl
A fájlban nincs szükség módosításokra host.json
. Ha azonban az Application Insights-konfiguráció ebben a fájlban a folyamatban lévő modellprojektből származik, érdemes lehet további módosításokat végrehajtania a Program.cs
fájlban. A host.json
fájl csak a Functions-gazdagép futtatókörnyezetéből való naplózást szabályozza, és az izolált feldolgozói modellben ezek a naplók egy része közvetlenül az alkalmazásból származik, így több vezérlést biztosít. A naplók szűrésének részleteiért tekintse meg az izolált feldolgozói modell naplószintjeinek kezelését ismertető cikket.
Osztálynévváltozások
Egyes kulcsosztályok módosították a neveket a verziók között. Ezek a módosítások a .NET API-k változásainak vagy a folyamaton belüli és az izolált feldolgozói folyamat közötti különbségeknek a eredményeképpen jönnek létre. Az alábbi táblázat a Functions által használt legfontosabb .NET-osztályokat jelzi, amelyek a migrálás során változhatnak:
.NET Core 3.1 | .NET 5 | .NET 8 |
---|---|---|
FunctionName (attribútum) |
Function (attribútum) |
Function (attribútum) |
ILogger |
ILogger |
ILogger , ILogger<T> |
HttpRequest |
HttpRequestData |
HttpRequestData , HttpRequest (ASP.NET Core-integráció használata) |
IActionResult |
HttpResponseData |
HttpResponseData , IActionResult (ASP.NET Core-integráció használata) |
FunctionsStartup (attribútum) |
Ehelyett használja Program.cs a |
Ehelyett használja Program.cs a |
A kötésekben osztálynévbeli különbségek is lehetnek. További információkért tekintse meg az adott kötésekre vonatkozó referenciacikkeket.
Egyéb kódmódosítások
Ez a szakasz a migrálás során megfontolandó egyéb kódmódosításokat emeli ki. Ezekre a módosításokra nem minden alkalmazásnak van szüksége, de érdemes kiértékelni, hogy vannak-e relevánsak a forgatókönyvek szempontjából. Ellenőrizze a 3.x és 4.x közötti kompatibilitástörő módosításokat, hogy további módosításokat kell végeznie a projekten.
JSON-szerializálás
Alapértelmezés szerint az izolált feldolgozói modell JSON-szerializálást használ System.Text.Json
. A szerializáló beállításainak testreszabásához vagy a JSON.NET (Newtonsoft.Json
) váltáshoz tekintse meg ezeket az utasításokat.
Az Application Insights naplószintjei és szűrése
A naplók elküldhetők az Application Insightsnak a Functions-gazdagép futtatókörnyezetéből és a projekt kódjából is. Ez host.json
lehetővé teszi a gazdagépnaplózás szabályainak konfigurálását, de a kódból származó naplók szabályozásához a szűrési szabályokat a Program.cs
saját részeként kell konfigurálnia. A naplók szűrésének részleteiért tekintse meg az izolált feldolgozói modell naplószintjeinek kezelését ismertető cikket.
HTTP trigger sablon
A folyamaton belüli és az izolált feldolgozói folyamat közötti különbségek a HTTP által aktivált függvényekben láthatók. A 3.x verzió (folyamatban lévő) HTTP-eseményindító sablonja a következő példához hasonlóan néz ki:
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);
}
}
}
A migrált verzió HTTP-triggersablonja a következő példához hasonlóan néz ki:
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"]}!");
}
}
}
A projekt frissítése az Azure Functions 4.x-hez:
Frissítse az Azure Functions Core Tools helyi telepítését a 4.x-es verzióra.
Frissítse az alkalmazás Azure Functions-bővítményeinek csomagját 2.x vagy újabb verzióra. További információ: kompatibilitástörő változások.
Szükség esetén lépjen a 4.x verzióban támogatott Java-verziók egyikére.
Frissítse az alkalmazás fájlját
POM.xml
úgy, hogy módosítsa aFUNCTIONS_EXTENSION_VERSION
beállítást~4
a következő példához hasonlóan:<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>
- Szükség esetén lépjen a 4.x verzióban támogatott Node.js verziók egyikére.
- Használja ki ezt a lehetőséget, és frissítsen a PowerShell 7.2-re, ami ajánlott. További információ: PowerShell-verziók.
- Ha Python 3.6-ot használ, lépjen az egyik támogatott verzióra.
A frissítés előtti érvényesítő futtatása
Az Azure Functions biztosít egy frissítés előtti ellenőrzőt, amely segít azonosítani a függvényalkalmazás 4.x verzióra való migrálásakor felmerülő lehetséges problémákat. A frissítés előtti érvényesítő futtatása:
Az Azure Portalon keresse meg a függvényalkalmazást.
Nyissa meg a Problémák diagnosztizálása és megoldása lapot.
A Függvényalkalmazás diagnosztikájában kezdjen el gépelni
Functions 4.x Pre-Upgrade Validator
, majd válassza ki a listából.Az ellenőrzés befejeződése után tekintse át a javaslatokat, és oldja meg az alkalmazással kapcsolatos problémákat. Ha módosítania kell az alkalmazást, győződjön meg arról, hogy a módosításokat a Functions-futtatókörnyezet 4.x verziójával ellenőrzi, akár helyileg, az Azure Functions Core Tools 4-es verziójával, akár egy átmeneti pont használatával.
A függvényalkalmazás frissítése az Azure-ban
A migrált projekt közzététele előtt frissítenie kell az Azure-beli függvényalkalmazás-gazdagép futtatókörnyezetét a 4.x verzióra. A Functions-gazdagép által használt futtatókörnyezeti verziót az FUNCTIONS_EXTENSION_VERSION
alkalmazásbeállítás szabályozza, de bizonyos esetekben más beállításokat is frissíteni kell. A kódmódosításokhoz és az alkalmazásbeállítások módosításához is újra kell indítani a függvényalkalmazást.
A legegyszerűbb megoldás, ha pontok nélkül frissít, majd újból közzéteheti az alkalmazásprojektet. Emellett minimalizálhatja az állásidőt az alkalmazásban, és leegyszerűsítheti a visszaállítást a pontok használatával történő frissítéssel.
Frissítés pontok nélkül
A legegyszerűbben úgy frissíthet v4.x verzióra, ha az alkalmazásbeállítást ~4
az FUNCTIONS_EXTENSION_VERSION
Azure-beli függvényalkalmazásban állítja be. Más eljárást kell követnie egy olyan webhelyen, amelyen pontok találhatóak.
az functionapp config appsettings set --settings FUNCTIONS_EXTENSION_VERSION=~4 -g <RESOURCE_GROUP_NAME> -n <APP_NAME>
Másik beállítást is be kell állítania, amely a Windows és a Linux között különbözik.
Windows rendszeren való futtatáskor engedélyeznie kell a .NET 6.0-t is, amelyet a futtatókörnyezet 4.x-es verziója igényel.
az functionapp config set --net-framework-version v6.0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME>
A .NET 6 szükséges a Windowson futó bármely nyelven futó függvényalkalmazásokhoz.
Ebben a példában cserélje le <APP_NAME>
a függvényalkalmazás nevére és <RESOURCE_GROUP_NAME>
az erőforráscsoport nevére.
Most már újra közzéteheti a 4.x-es verzióra migrált alkalmazásprojektet.
Frissítés pontok használatával
Az üzembehelyezési pontok használatával frissítheti a függvényalkalmazást egy korábbi verzió v4.x futtatókörnyezetére. Átmeneti pont használatával futtathatja az alkalmazást az előkészítési ponton található új futtatókörnyezeti verzión, és az ellenőrzés után éles környezetbe válthat. A bővítőhelyek lehetővé teszik az állásidő minimalizálását is a frissítés során. Ha minimalizálnia kell az állásidőt, kövesse a minimális állásidő frissítésének lépéseit.
Miután ellenőrizte az alkalmazást a frissített ponton, felcserélheti az alkalmazást és az új verzióbeállításokat éles környezetbe. Ehhez a felcseréléshez be kell állítani WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0
az éles pontban. A beállítás hozzáadása befolyásolja a frissítéshez szükséges állásidőt.
Standard frissítés
Ha a pontalapú függvényalkalmazás képes kezelni a teljes újraindítás állásidejét, frissítheti a WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS
beállítást közvetlenül az éles pontban. Mivel a beállítás közvetlenül az éles pontban való módosítása olyan újraindítást okoz, amely hatással van a rendelkezésre állásra, fontolja meg ezt a módosítást a csökkentett forgalom idején. Ezután felcserélheti a frissített verziót az előkészítési pontról.
A Update-AzFunctionAppSetting
PowerShell-parancsmag jelenleg nem támogatja a tárolóhelyeket. Az Azure CLI-t vagy az Azure Portalt kell használnia.
Az éles pontban a következő paranccsal állíthatja be
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0
a következő parancsot:az functionapp config appsettings set --settings WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME>
Ebben a példában cserélje le
<APP_NAME>
a függvényalkalmazás nevére és<RESOURCE_GROUP_NAME>
az erőforráscsoport nevére. Ez a parancs az éles pontban futó alkalmazás újraindítását okozza.Az előkészítési ponton a következő paranccsal is beállíthatja
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS
a beállításokat:az functionapp config appsettings set --settings WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME>
A következő paranccsal módosítsa
FUNCTIONS_EXTENSION_VERSION
és frissítse az előkészítési pontot az új futtatókörnyezeti verzióra:az functionapp config appsettings set --settings FUNCTIONS_EXTENSION_VERSION=~4 -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME>
A Functions-futtatókörnyezet 4.x verziójához .NET 6 szükséges a Windowsban. Linux rendszeren a .NET-alkalmazásoknak a .NET 6-ra is frissítenie kell. Használja a következő parancsot, hogy a futtatókörnyezet a .NET 6-on fusson:
Windows rendszeren való futtatáskor engedélyeznie kell a .NET 6.0-t is, amelyet a futtatókörnyezet 4.x-es verziója igényel.
az functionapp config set --net-framework-version v6.0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME>
A .NET 6 szükséges a Windowson futó bármely nyelven futó függvényalkalmazásokhoz.
Ebben a példában cserélje le
<APP_NAME>
a függvényalkalmazás nevére és<RESOURCE_GROUP_NAME>
az erőforráscsoport nevére.Ha a kódprojektnek a 4.x verzión való futtatáshoz frissítésekre volt szüksége, telepítse ezeket a frissítéseket az előkészítési ponton.
A felcserélés előtt ellenőrizze, hogy a függvényalkalmazás megfelelően fut-e a frissített átmeneti környezetben.
A frissített átmeneti pont éles környezetbe való felcseréléséhez használja a következő parancsot:
az functionapp deployment slot swap -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME> --target-slot production
Minimális állásidő-frissítés
Az éles alkalmazásban az állásidő minimalizálása érdekében felcserélheti a beállítást az WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS
előkészítési pontról az éles környezetbe. Ezután felcserélheti a frissített verziót egy előre elkészített előkészítési pontról.
Az előkészítési ponton a következő paranccsal állíthatja be
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0
a következő parancsot:az functionapp config appsettings set --settings WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME>
Az alábbi parancsokkal felcserélheti a pontot az új beállítással az éles környezetbe, és ezzel egyidejűleg visszaállíthatja a verzióbeállítást az előkészítési ponton.
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>
Az előkészítési pont hibái a felcserélés és az előkészítéskor visszaállított futtatókörnyezeti verzió közötti időszakban jelenhetnek meg. Ez a hiba azért fordulhat elő, mert ha
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0
csak a felcserélés során van előkészítés, az eltávolítja azFUNCTIONS_EXTENSION_VERSION
előkészítési beállítást. A verzióbeállítás nélkül a pont rossz állapotban van. Az előkészítési ponton lévő verzió frissítése közvetlenül a felcserélés után jó állapotba kell helyeznie a pontot, és szükség esetén vissza kell hívnia a módosítások visszaállítását. A felcserélés bármilyen visszaállításához azonban közvetlenül el kell távolítaniaWEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0
a termelésből a csere előtt, hogy megelőzze az előkészítés során tapasztalt éles hibákat. Ez a változás az éles beállításban újraindítást okozna.Az előkészítési ponton a következő paranccsal állíthatja
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0
be ismét:az functionapp config appsettings set --settings WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME>
Ezen a ponton mindkét pont be van
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0
állítva.A következő paranccsal módosítsa
FUNCTIONS_EXTENSION_VERSION
és frissítse az előkészítési pontot az új futtatókörnyezeti verzióra:az functionapp config appsettings set --settings FUNCTIONS_EXTENSION_VERSION=~4 -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME>
A Functions-futtatókörnyezet 4.x verziójához .NET 6 szükséges a Windowsban. Linux rendszeren a .NET-alkalmazásoknak a .NET 6-ra is frissítenie kell. Használja a következő parancsot, hogy a futtatókörnyezet a .NET 6-on fusson:
Windows rendszeren való futtatáskor engedélyeznie kell a .NET 6.0-t is, amelyet a futtatókörnyezet 4.x-es verziója igényel.
az functionapp config set --net-framework-version v6.0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME>
A .NET 6 szükséges a Windowson futó bármely nyelven futó függvényalkalmazásokhoz.
Ebben a példában cserélje le
<APP_NAME>
a függvényalkalmazás nevére és<RESOURCE_GROUP_NAME>
az erőforráscsoport nevére.Ha a kódprojektnek a 4.x verzión való futtatáshoz frissítésekre volt szüksége, telepítse ezeket a frissítéseket az előkészítési ponton.
A felcserélés előtt ellenőrizze, hogy a függvényalkalmazás megfelelően fut-e a frissített átmeneti környezetben.
A frissített és előre elkészített átmeneti pont éles környezetbe való felcseréléséhez használja az alábbi parancsot:
az functionapp deployment slot swap -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME> --target-slot production
Kompatibilitástörő változások 3.x és 4.x között
Az alábbiakban a 3.x alkalmazás 4.x-re való frissítése előtt fontos kompatibilitástörő változásokat ismerhet meg, beleértve a nyelvspecifikus kompatibilitástörő módosításokat is. A teljes listát az Azure Functions GitHub kompatibilitástörő változás: jóváhagyott címkével ellátott problémái között találja.
Ha nem látja a programozási nyelvet, válassza ki a lap tetején.
Futtatókörnyezet
Az Azure Functions-proxyk az Azure Functions-futtatókörnyezet 1.x és 3.x verzióinak örökölt funkciói. A Függvény-proxyk támogatása újra engedélyezhető a 4.x verzióban, így sikeresen frissítheti a függvényalkalmazásokat a legújabb futtatókörnyezeti verzióra. A lehető leghamarabb váltson inkább a függvényalkalmazások Azure API Managementtel való integrálására. Az API Management lehetővé teszi, hogy kihasználja a függvényalapú API-k meghatározásához, biztonságossá tételéhez, kezeléséhez és értékesítéséhez használható funkciók egy teljesebb készletét. További információ: API Management-integráció. Ha tudni szeretné, hogyan engedélyezheti újra a Proxyk támogatását a Functions 4.x verziójában, olvassa el a Proxyk újbóli engedélyezését a Functions v4.x verziójában.
Az Azure Storage-ba az AzureWebJobsDashboard használatával történő naplózás már nem támogatott a 4.x-ben. Ehelyett az Application Insightst kell használnia. (#1923)
Az Azure Functions 4.x mostantól a bővítmények minimális verziókövetelményeit érvényesíti. Frissítsen az érintett bővítmények legújabb verziójára. Non-.NET nyelvek esetén frissítsen a bővítménycsomag 2.x vagy újabb verziójára. (#1987)
Az alapértelmezett és a maximális időtúllépések mostantól 4.x-ben lesznek kényszerítve a Linuxon futó függvényalkalmazások esetében egy használatalapú csomagban. (#1915)
Az Azure Functions 4.x a Key Vault-szolgáltatót használja
Azure.Identity
ésAzure.Security.KeyVault.Secrets
elavulta a Microsoft.Azure.KeyVault használatát. A függvényalkalmazás beállításainak konfigurálásáról további információt a Key Vault Kulcstároló kezelése lehetőségében talál. (#2048)A tárfiókokat használó függvényalkalmazások most már nem indulnak el, ha a gazdaazonosítójuk megegyezik. További információkért lásd a gazdagépazonosítóval kapcsolatos szempontokat. (#2049)
- Az alapértelmezett szálszám frissült. A nem szálbiztos vagy magas memóriahasználattal rendelkező függvények hatással lehetnek. (#1962)