Alkalmazások migrálása az Azure Functions 1.x verziójából a 4.x verzióba
Fontos
A Javát az Azure Functions-futtatókörnyezet 1.x-es verziója nem támogatja. Lehet, hogy inkább a Java-alkalmazást szeretné migrálni a 3.x verzióról a 4.x-es verzióra. Ha 1.x-es verziójú függvényalkalmazást migrál, válassza a fenti C# vagy JavaScript lehetőséget.
Fontos
A TypeScriptet az Azure Functions-futtatókörnyezet 1.x-es verziója nem támogatja. Lehet, hogy inkább a TypeScript-alkalmazást szeretné migrálni a 3.x verzióról a 4.x verzióra. Ha 1.x-es verziójú függvényalkalmazást migrál, válassza a fenti C# vagy JavaScript lehetőséget.
Fontos
A PowerShellt az Azure Functions-futtatókörnyezet 1.x-es verziója nem támogatja. Lehet, hogy inkább a PowerShell-alkalmazást szeretné migrálni a 3.x verzióról a 4.x verzióra. Ha 1.x-es verziójú függvényalkalmazást migrál, válassza a fenti C# vagy JavaScript lehetőséget.
Fontos
A Pythont az Azure Functions-futtatókörnyezet 1.x-es verziója nem támogatja. Lehet, hogy ehelyett a Python-alkalmazást a 3.x verzióról a 4.x-es verzióra szeretné migrálni. Ha 1.x-es verziójú függvényalkalmazást migrál, válassza a fenti C# vagy JavaScript lehetőséget.
Fontos
Az Azure Functions-futtatókörnyezet 1.x verziójának támogatása 2026. szeptember 14-én megszűnik. Erősen javasoljuk, hogy az ebben a cikkben ismertetett utasításokat követve migrálja az alkalmazásokat a 4.x-es verzióra.
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.
Ha a futtatókörnyezet 1.x verzióját futtatja az Azure Stack Hubban, először tekintse meg az Azure Stack Hub szempontjait.
A migrálandó függvényalkalmazások azonosítása
Az alábbi PowerShell-szkripttel létrehozhatja az előfizetésében az 1.x verziót megcélzott függvényalkalmazások listáját:
$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 '*1*')
{
$AppInfo.Add($App.Name, $App.ApplicationSettings["FUNCTIONS_EXTENSION_VERSION"])
}
}
$AppInfo
Válassza ki a cél .NET-verziót
A Functions-futtatókörnyezet 1.x verziójában a C# függvényalkalmazás .NET-keretrendszer.
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.
Ha az alkalmazás nem függ olyan kódtártól vagy API-tól, amely csak .NET-keretrendszer érhető el, javasoljuk, hogy frissítsen a .NET 8-ra az izolált feldolgozómodellen. Az 1.x verziójú alkalmazások közül sok csak azért .NET-keretrendszer, mert a létrehozásukkor ez volt elérhető. A .NET újabb verzióihoz további képességek érhetők el, és ha az alkalmazás függőség miatt nem kénytelen .NET-keretrendszer maradni, érdemes egy újabb verziót céloznia. 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 az 1.x verzió utáni viselkedésváltozások listáját. Az 1.x verzióról a 4.x-es verzióra való migrálás a kötésekre is hatással lehet.
- 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.
- 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
Az alábbi szakaszok ismertetik a C#-projektfájlok frissítéseit ahhoz, hogy a .NET egyik támogatott verzióján fusson a Functions 4.x-es verziójában. A megjelenő frissítések gyakoriak a legtöbb projektben. A projektkódhoz szükség lehet a cikkben nem említett frissítésekre, különösen egyéni NuGet-csomagok használatakor.
Ha egy C# függvényalkalmazást az 1.x verzióról a Functions-futtatókörnyezet 4.x verziójára migrál, módosítania kell a projektkódot. Ezek közül sok a C# nyelv és a .NET API-k változásainak eredménye.
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
projektfájl, amely az 1.x verzión fut:
<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>
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.*
.
A Notification Hubs és a Mobile Apps kötések csak a futtatókörnyezet 1.x-es verziójában támogatottak. A futtatókörnyezet 4.x-es verziójára való frissítéskor el kell távolítania ezeket a kötéseket, hogy közvetlenül az SDK-jukkal működjön együtt ezekkel a szolgáltatásokkal.
Program.cs fájl
A migráláshoz a legtöbb esetben 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.
host.json fájl
A host.json fájl beállításai helyileg és az Azure-ban egyaránt érvényesek a függvényalkalmazás szintjén. Az 1.x verzióban a host.json fájl üres, vagy olyan beállításokat tartalmaz, amelyek a függvényalkalmazás összes függvényére vonatkoznak. További információ: Host.json v1. Ha a host.json fájl beállítási értékekkel rendelkezik, tekintse át a host.json v2 formátumot a módosításokért.
A 4.x verzió futtatásához hozzá kell adnia "version": "2.0"
a host.json fájlhoz. Érdemes megfontolnia a konfiguráció hozzáadását logging
is, ahogyan az alábbi példákban is látható:
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
},
"enableLiveMetricsFilters": true
}
}
}
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.
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. Az 1.x verzióban a local.settings.json fájlnak csak két kötelező értéke van:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "AzureWebJobsStorageConnectionStringValue",
"AzureWebJobsDashboard": "AzureWebJobsStorageConnectionStringValue"
}
}
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.
Osztálynévváltozások
Egyes kulcsosztályok az 1.x és a 4.x verzió között módosították a neveket. 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:
1.x-es verzió | .NET 8 |
---|---|
FunctionName (attribútum) |
Function (attribútum) |
TraceWriter |
ILogger<T> , ILogger |
HttpRequestMessage |
HttpRequestData , HttpRequest (ASP.NET Core-integráció használata) |
HttpResponseMessage |
HttpResponseData , IActionResult (ASP.NET Core-integráció használata) |
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. Győződjön meg arról, hogy az 1.x verzió után ellenőrizze a viselkedés változásait, hogy további módosításokat kell-e végrehajtania 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
Az 1.x és a 4.x verzió közötti kódváltozások többsége a HTTP által aktivált függvényekben látható. Az 1.x verzió HTTP-eseményindító sablonja a következő példához hasonlóan néz ki:
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);
}
}
}
A 4.x verzióban a HTTP-eseményindító sablon 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.
Lépjen a 4.x verzióban támogatott Node.js verziók egyikére.
Adja hozzá mindkettőt
version
ésextensionBundle
az elemeket a host.json, hogy az a következő példához hasonlóan nézzen ki:{ "version": "2.0", "extensionBundle": { "id": "Microsoft.Azure.Functions.ExtensionBundle", "version": "[3.3.0, 4.0.0)" } }
Az
extensionBundle
elemre azért van szükség, mert az 1.x verzió után a kötések külső csomagként maradnak fenn. További információ: Bővítménykötegek.Frissítse a local.settings.json fájlt úgy, hogy legalább a következő elemeket tartalmazza:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "node" } }
A
AzureWebJobsStorage
beállítás lehet az Azurite Storage Emulator vagy egy tényleges Azure Storage-fiók. További információ: Local Storage Emulator.
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
Viselkedésváltozások az 1.x verzió után
Ez a szakasz az 1.x verzió után végrehajtott módosításokat ismerteti mind az eseményindítók, mind a kötések viselkedésében, valamint az alapvető Functions-funkciókban és -viselkedésekben.
Az eseményindítók és kötések változásai
A 2.x verziótól kezdve telepítenie kell az alkalmazás függvényei által használt egyes triggerekhez és kötésekhez tartozó bővítményeket. A HTTP és az időzítő eseményindítóinak egyetlen kivétele, amely nem igényel bővítményt. További információ: Kötésbővítmények regisztrálása és telepítése.
A függvény function.json vagy attribútumaiban is van néhány változás a verziók között. Az Event Hubs path
tulajdonság például most már eventHubName
az . Az egyes kötések dokumentációjának hivatkozásait a meglévő kötéstáblában találja.
Funkciók és funkciók változásai
Az 1.x verzió után néhány funkció el lett távolítva, frissítve vagy lecserélve. Ez a szakasz az 1.x verzió használata után a későbbi verziókban megjelenő módosításokat ismerteti.
A 2.x verzióban a következő módosítások történtek:
A HTTP-végpontok hívásához használt kulcsokat a rendszer mindig titkosítva tárolja az Azure Blob Storage-ban. Az 1.x verzióban a kulcsok alapértelmezés szerint az Azure Filesban lettek tárolva. Amikor egy alkalmazást az 1.x verzióról a 2.x verzióra migrál, az Azure Filesban lévő meglévő titkos kódok alaphelyzetbe állnak.
A 2.x-es verziójú futtatókörnyezet nem tartalmaz beépített támogatást a webhookszolgáltatók számára. Ez a módosítás a teljesítmény javítása érdekében történt. Továbbra is használhat HTTP-eseményindítókat végpontként a webhookokhoz.
A monitorozás javítása érdekében a webjobs-irányítópult a portálon, amely a
AzureWebJobsDashboard
beállítást használta, a Azure-alkalmazás Insightsra cserélődik, amely aAPPINSIGHTS_INSTRUMENTATIONKEY
beállítást használja. További információ: Az Azure Functions monitorozása.A függvényalkalmazások összes függvényének ugyanazt a nyelvet kell használnia. Függvényalkalmazás létrehozásakor ki kell választania egy futtatókörnyezeti vermet az alkalmazáshoz. A futtatókörnyezet vermet az
FUNCTIONS_WORKER_RUNTIME
alkalmazásbeállításokban megadott érték határozza meg. Ez a követelmény a lábnyom és az indítási idő javítása érdekében lett hozzáadva. Helyi fejlesztéskor ezt a beállítást is be kell foglalnia a local.settings.json fájlba.Az App Service-csomagban lévő függvények alapértelmezett időtúllépése 30 percre módosul. Az időtúllépést manuálisan korlátlanra módosíthatja a host.json függvényTimeout beállításával.
A HTTP egyidejűségi szabályozások alapértelmezés szerint implementálva vannak a használati terv függvényeihez, és alapértelmezés szerint példányonként 100 egyidejű kérés van. Ezt a viselkedést a
maxConcurrentRequests
host.json fájl beállításában módosíthatja.A .NET Core korlátozásai miatt az F# szkriptfüggvények (
.fsx
fájlok) támogatása el lett távolítva. A lefordított F#-függvények (.fs) továbbra is támogatottak.Az Event Grid-eseményindító webhookok URL-formátuma a következő minta szerint módosult:
https://{app}/runtime/webhooks/{triggerName}
.Egyes előre definiált egyéni metrikák neve az 1.x verzió után módosult.
Duration
helyéreMaxDurationMs
MinDurationMs
, ésAvgDurationMs
.Success Rate
is átnevezték.Success Rate
Az Azure Stack Hub szempontjai
Az App Service az Azure Stack Hubon nem támogatja az Azure Functions 4.x-es verzióját. Ha az Azure Stack Hub 1.x-es verziójáról tervez migrálást, az alábbi lehetőségek közül választhat:
- Migrálás a nyilvános felhőbeli Azure Functionsben üzemeltetett 4.x-es verzióra a jelen cikkben található utasítások alapján. A meglévő alkalmazás frissítése helyett hozzon létre egy új alkalmazást a 4.x verzióval, majd telepítse a módosított projektet.
- Váltson az Azure Stack Hubban egy App Service-csomagban üzemeltetett WebJobs-feladatra.