Alkalmazások áttelepítése Azure Functions 1.x-es verzióról a 4.x-es verzióra

Fontos

Java a Azure Functions futtatókörnyezet 1.x-es verziója nem támogatja. Lehet, hogy inkább a Java-alkalmazást a 3.x-es verzióról a 4.x verzióra szeretné módosítani. 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 a 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 a 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

Python a Azure Functions futtatókörnyezet 1.x-es verziója nem támogatja. Lehet, hogy inkább a Python alkalmazását 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

Támogatás 2026. szeptember 14-én megszűnik a Azure Functions futtatókörnyezet 1.x-es verziójával. 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 az 1.x verziójú futtatókörnyezetet futtatja az Azure Stack Hubban, először a Megfontolások az Azure Stack Hub-hoz részt tekintse meg.

A migrálandó függvényalkalmazások azonosítása

Futtassa a következő PowerShell-szkriptet a Azure Cloud Shell az előfizetésében lévő függvényalkalmazások listájának létrehozásához, amelyek jelenleg az 1.x verziót célják:

$FunctionApps = Get-AzFunctionApp

$AppInfo = @{}

foreach ($App in $FunctionApps)
{
     $AppSettings = Get-AzFunctionAppSetting -Name $App.Name -ResourceGroupName $App.ResourceGroupName
     if ($AppSettings.FUNCTIONS_EXTENSION_VERSION -like '*1*')
     {
          $AppInfo.Add($App.Name, $AppSettings.FUNCTIONS_EXTENSION_VERSION)
     }
}

$AppInfo

Ha a Cloud Shell kívül fut, először be kell állítania az aktív előfizetést:

$Subscription = '<SUBSCRIPTION_ID>' 

Set-AzContext -Subscription $Subscription | Out-Null

Ebben a példában cserélje le a "<SUBSCRIPTION_ID>" kifejezést az előfizetés azonosítójára.

A cél .NET verzió kiválasztása

A Functions-futtatókörnyezet 1.x verziójában a C# függvényalkalmazás .NET Frameworkt célozza meg.

A függvényalkalmazás áttelepítésekor lehetősége van kiválasztani a .NET célverzióját. A C#-projektet frissítheti a .NET alábbi verzióinak egyikére, amelyeket a Functions 4.x verziója támogat:

.NET verzió .NET hivatalos támogatási szabályzat kiadás típusa Funkciók folyamatmodell1,2
.NET 10 LTS (a támogatás megszűnésének dátuma: 2028. november 14.) Izolált dolgozói modell
.NET 9 STS (támogatás megszűnése 2026. november 10.)3 Izolált dolgozói modell
.NET 8 LTS (támogatás vége 2026. november 10.) Izolált munkavállalói modell
Folyamatközi modell2
.NET-keretrendszer 4.8 Szabályzat megtekintése Izolált dolgozói modell

1 A azolt feldolgozói modell támogatja a .NET hosszú távú támogatását (LTS) és standard távú támogatási (STS) verzióit, valamint .NET Keretrendszert. A in-process modell csak a .NET LTS-kiadásait támogatja, és .NET 8-ra végződik. A két modell teljes funkció- és működésösszehasonlítása megtekinthető a következő hivatkozáson: A processzuson belüli és az elkülönített feldolgozói folyamatok összehasonlítása a .NET Azure Functionsnél.

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 körű támogatás érdekében Önnek az alkalmazásokat át kell helyeznie az izolált munkaerő modellbe.

3 .NET 9 korábban 2026. május 12-én várható támogatás megszűnésének dátuma volt. A .NET 9-es szolgáltatási időszak alatt a .NET csapat 24 hónapra kiterjesztette az STS-verziók támogatását a 9-es .NET kezdve. További információkért lásd a blogbejegyzést.

Tipp.

Hacsak az alkalmazás nem függ olyan kódtártól vagy API-tól, amely csak .NET Keretrendszer számára érhető el, javasoljuk, hogy frissítsen .NET 8-ra az izolált feldolgozómodellen. Számos 1.x verziójú alkalmazás csak a .NET keretrendszert célozza meg, mert a létrehozásukkor ez volt elérhető. További képességek érhetők el a .NET újabb verziói számára, és ha az alkalmazás függőség miatt nem kénytelen .NET-keretrendszerben maradni, érdemes egy újabb verziót céloznia. .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 verzióra való migrálás csökkenti a szükséges teljes erőfeszítést, és az izolált feldolgozói modell additionális előnyöket biztosít az alkalmazásnak, beleértve a .NET későbbi verzióinak egyszerűbb cé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 .NET 10 -hez (előzetes verzió) vagy .NET 9-hez. Ha az egyik verziót meg kell céloznia, a .NET 8 példát módosíthatja.

Előkészületek a migráláshoz

Ha még nem tette meg, a 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:

  1. 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.
  2. 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.
  3. A projekt migrálása után tesztelje az alkalmazást helyileg a Azure Functions Core Tools 4.x verziójával.
  4. Frissítse Azure függvényalkalmazását az új verzióra. Ha minimálisra szeretné csökkenteni az állásidőt, fontolja meg egy staging slot használatát az új futtatókörnyezet verziójában az Azure-ban a migrált alkalmazás teszteléséhez és ellenőrzéséhez. Ezután üzembe helyezheti az alkalmazást a frissített verzió beállításaival az éles környezetbe. További információt a következőben talál: Frissítés helyek használatával.
  5. Tegye közzé a migrált projektet a frissített függvényalkalmazásban.

Ha a Visual Studio használatával tesz közzé egy 4.x-es verziójú projektet egy meglévő függvényalkalmazásban alacsonyabb verzióban, a rendszer arra kéri, hogy az üzembe helyezés során Visual Studio frissítse a függvényalkalmazást a 4.x verzióra. Ez a frissítés ugyanazt a folyamatot használja, mint a Frissítés helyek nélkül definiált.

A helyi projekt migrálása

A következő szakaszok ismertetik a C#-projektfájlok frissítéseit, 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 .NET API-k változásainak eredménye.

Válassza ki a .NET célverziójának és a kívánt folyamatmodellnek (folyamaton belüli vagy izolált feldolgozói folyamat) megfelelő lapot.

Tipp.

Ha a .NET LTS- vagy STS-verziójára vált az izolált feldolgozómodell használatával, a .NET Frissítési segéd segítségével 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; ha az alkalmazás ehelyett C# szkriptet (.csx fájlokat) használ, a folytatás előtt át kell alakítania a projektmodellt .

A .csproj XML-projektfájlban a következő módosítások szükségesek:

  1. Állítsa be az értékét PropertyGroup. TargetFramework és net8.0-hez

  2. Állítsa be az értékét PropertyGroup. AzureFunctionsVersion és v4-hez

  3. Adja hozzá a következő OutputType elemet a PropertyGroupkövetkezőhöz:

    <OutputType>Exe</OutputType>
    
  4. ItemGroup-ban/ben. PackageReference lista, cserélje le a csomaghivatkozást a Microsoft.NET.Sdk.Functions hivatkozásra a következő hivatkozásokkal:

      <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 Microsoft.Azure.WebJobs.* névterek más csomagjaira mutató hivatkozásokat. Ezeket a csomagokat egy későbbi lépésben fogja lecserélni.

  5. 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 using található utasításokra 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:

Forgatókönyv Csomaghivatkozások módosítása
Időzítő-eseményindító Hozzáad
Microsoft.Azure. Functions.Worker.Extensions.Timer
Tárkötések Cserélje ki
Microsoft.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
Service Bus kapcsolódások 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 kapcsolatok Hivatkozás cseréje erre:
Microsoft.Azure.WebJobs.Extensions.SignalRService
a legújabb verzióval
Microsoft.Azure. Functions.Worker.Extensions.SignalRService
Durable Functions Hivatkozás cseréje erre:
Microsoft.Azure.WebJobs.Extensions.DurableTask
a legújabb verzióval
Microsoft.Azure.Functions.Worker.Extensions.DurableTask
Durable Functions
(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
Durable Functions
(netherite tárhely szolgáltató)
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ások eltávolítása
Microsoft.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(z) host.json fájl frissítését 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 jelentős változásokat mutat. További információkért lásd a Azure Service Bus kötései Azure Functions számára.

Az izolált feldolgozómodell-alkalmazás nem hivatkozhat a Microsoft.Azure.WebJobs.* névterekben vagy Microsoft.Azure.Functions.Extensions lévő csomagokra. Ha további hivatkozásokkal rendelkezik ezekre, azokat el kell távolítani.

Tipp.

Az alkalmazás Azure SDK típustó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 legújabb Azure SDK for .NET verziókkal működnek, és szinte az összes csomag a formátumot követi, amelyik a Azure.*.

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 tartalmaz a teljesítmény javítása érdekében, és egy 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 Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore hivatkozását a projektfájlból. A legjobb teljesítmény érdekében tartsa a FrameworkReference az ASP.NET Core-t, még más triggertípussal rendelkező függvényeknél is.

A Program.cs fájl minden olyan fájlt lecserél, amely rendelkezik az FunctionsStartup attribútummal, amely általában egy Startup.cs fájl. Azokban a helyeken, ahol a FunctionsStartup kód hivatkozna IFunctionsHostBuilder.Services, a .ConfigureServices()-ben a HostBuilder osztály metódusának részeként adhat hozzá utasításokat. A Program.cs használatával 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 korábban ismertetett alapértelmezett Program.cs példák közé tartozik az Application Insights beállítása. A Program.cs minden olyan naplószűrést is konfigurálnia kell, amely a projekt kódjából származó naplókra vonatkozik. Az izolált feldolgozói modellben a host.json fájl csak a Functions-gazdagép futtatókörnyezete által kibocsátott eseményeket szabályozza. Ha nem konfigurálja a szűrési szabályokat a Program.cs, a telemetriai adatok 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 HostBuilderprojekt részeként regisztrálhatja, ezek hasonlóképpen csak a projekt kódjára vonatkoznak. A platformnak eseményindító- és kötéskonfigurációra is szüksége van, és ezt a alkalmazási beállítások, Key Vault hivatkozások vagy App Configuration-referenciák funkciók segítségével kell megadni.

Miután mindent áthelyezett a meglévő FunctionsStartup elemből a Program.cs fájlba, törölheti az FunctionsStartup attribútumot, valamint az alkalmazott osztályt, amelyre vonatkozott.

host.json fájl

A host.json fájl beállításai helyileg és Azure 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, hogy a logging-t is hozzáadja a konfigurációjához, ahogyan az alábbi példák mutatják:

{
    "version": "2.0",
    "telemetryMode": "OpenTelemetry"
}

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 egy elkülönített feldolgozói folyamatba migrál, az FUNCTIONS_WORKER_RUNTIME értéket "dotnet-isolá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 vagy .NET API-k változásaiból, vagy a folyamatban lévő és az elkülönített feldolgozói folyamat közötti különbségekből erednek. Az alábbi táblázat a Functions által használt kulcsfontosságú .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óval)
HttpResponseMessage HttpResponseData, IActionResult (ASP.NET Core integrációval)

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

Az izolált feldolgozómodell alapértelmezés szerint System.Text.Json-t használ JSON-szerializáláshoz. A szerializáló beállításainak testreszabásához vagy a JSON.NET (Newtonsoft.Json) való váltáshoz lásd: A JSON-szerializálás beállítása.

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. A host.json lehetővé teszi a gazdagép naplózás szabályainak konfigurálását, azonban a kódból érkező naplók ellenőrzéséhez a Program.cs részeként kell konfigurálnia a szűrési szabályokat. 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 Azure Functions 4.x-ra:

  1. Frissítse a Azure Functions Core Tools helyi telepítését a 4.x-es verzióra.

  2. Lépjen a 4.x verzióban támogatott Node.js verziók egyikére.

  3. Adja hozzá mindkét elemet, version és extensionBundle a host.json fájlhoz, hogy az a következő példában látható módon 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.

  4. 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 emulátor vagy egy tényleges Azure tárfió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 a Azure 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 slotok használatával történő frissítéssel.

Frissítés pontok nélkül

A legegyszerűbben úgy frissíthet a v4.x verzióra, ha a FUNCTIONS_EXTENSION_VERSION alkalmazásbeállítást ~4 értékre állítja az Azure-ban lévő függvényalkalmazásban. 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 Windows és Linux között különbözik.

Ha Windows fut, engedélyeznie kell a .NET 8.0-t is, amelyet a futtatókörnyezet 4.x-es verziója igényel.

az functionapp config set --net-framework-version v8.0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME>

.NET 6 szükséges a Windows 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 slotban, átválthatja az alkalmazást és az új verzió beállításait é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ásának módja befolyásolja a frissítéshez szükséges leállási időt.

Standard frissítés

Ha a slot-alapú 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 slotban. 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 kicserélheti a frissített verziót a tesztelési helyről.

A Update-AzFunctionAppSetting PowerShell-parancsmag jelenleg nem támogatja a slotokat. A Azure CLI vagy a Azure portált kell használnia.

  1. Az éles környezetben a következő paranccsal állíthatja be WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0:

    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.

  2. 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>
    
  3. 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>
    
  4. A Functions-futtatókörnyezet 4.x verziójához .NET 6 Windows szükséges. Linuxon .NET alkalmazásoknak is frissítenie kell .NET 6-ra. Használja a következő parancsot, hogy a futtatókörnyezet a .NET 6-on fusson:

    Ha Windows fut, engedélyeznie kell a .NET 8.0-t is, amelyet a futtatókörnyezet 4.x-es verziója igényel.

    az functionapp config set --net-framework-version v8.0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME>
    

    .NET 6 szükséges a Windows 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.

  5. 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.

  6. A felcserélés előtt ellenőrizze, hogy a függvényalkalmazás megfelelően fut-e a frissített átmeneti környezetben.

  7. A frissített előkészítési szakasz éles környezetbe való áthelyezése érdekében 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 alkalmazás állásidejének minimalizálása érdekében átviheti a WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS beállítást az előkészítési környezetbő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.

  1. Az előkészítési ponton a következő paranccsal állíthatja be: WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0

    az functionapp config appsettings set --settings WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 -g <RESOURCE_GROUP_NAME>  -n <APP_NAME> --slot <SLOT_NAME>
    
  2. 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 a WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 csak a helyettesítés során van jelen az előkészítési környezetben, az eltávolítja a FUNCTIONS_EXTENSION_VERSION beállítást az előkészítési környezetből. Verzióbeállítás nélkül a foglalat rossz helyzetben van. A staging slotban lévő verzió frissítése közvetlenül a csere után vissza kell hoznia a slotot egy jó állapotba, és szükség esetén vissza kell állítania a módosításokat. Azonban a felcserélés visszaállításához el kell távolítania WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0-t a termelésből még a visszacserélés előtt, hogy megelőzze az előkészítés során tapasztalt hibák éles környezetben való megjelenését. Ez a változás a produkciós környezetben újraindítást eredményezne.

  3. 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 hely be van WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 állítva.

  4. 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>
    
  5. A Functions-futtatókörnyezet 4.x verziójához .NET 6 Windows szükséges. Linuxon .NET alkalmazásoknak is frissítenie kell .NET 6-ra. Használja a következő parancsot, hogy a futtatókörnyezet a .NET 6-on fusson:

    Ha Windows fut, engedélyeznie kell a .NET 8.0-t is, amelyet a futtatókörnyezet 4.x-es verziója igényel.

    az functionapp config set --net-framework-version v8.0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME>
    

    .NET 6 szükséges a Windows 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.

  6. 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.

  7. A felcserélés előtt ellenőrizze, hogy a függvényalkalmazás megfelelően fut-e a frissített átmeneti környezetben.

  8. A frissített és előre melegített staging slot éles környezetre cseré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.

A triggerek é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ók az egyetlen kivételek, amelyek nem igényelnek 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 most már például eventHubName. Az egyes kötések dokumentációjának hivatkozásait a meglévő kötéstáblában találja.

Funkciók és működés 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 Azure Blob Storage-ban. Az 1.x verzióban a kulcsok alapértelmezés szerint Azure Files lettek tárolva. Amikor migrál egy alkalmazást az 1.x verzióról a 2.x verzióra, a Azure Files meglévő titkos kulcsok 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 portál WebJobs-irányítópultja, amely a AzureWebJobsDashboard beállítást használta, Azure-alkalmazás Insightsra vált, amely a APPINSIGHTS_INSTRUMENTATIONKEY beállítást használja. További információ: Monitor Azure Functions.

  • A függvényalkalmazások összes függvényének ugyanazt a nyelvet kell használnia. Amikor létrehoz egy függvényalkalmazást, ki kell választania egy futtatókörnyezetet 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.

  • HTTP egyidejűségi korlátozások alapértelmezés szerint implementálva vannak a fogyasztási terv függvényeihez, példányonként 100 egyidejű kérés alapértelmezett értékével. Ezt a viselkedést a maxConcurrentRequests host.json fájl beállításában módosíthatja.

  • A .NET Alapvető korlátozások miatt az F#-szkript (.fsx fájlok) funkcióinak 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. Durationhelyére MaxDurationMs, MinDurationMs, és AvgDurationMs. Success Rateis átnevezték.Success Rate

A Azure Stack Hub szempontjai

App Service Azure Stack Hub nem támogatja a 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őben üzemeltetett 4.x-es verzióra Azure Functions a jelen cikk utasításait követve. 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 WebJobs Azure Stack Hub App Service-csomagra.

Következő lépések