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,3
.NET 82 LTS Izolált feldolgozói modell
.NET 7 STS (támogatás megszűnése 2024. május 14.) Izolált feldolgozói modell
.NET 6 LTS (támogatás megszűnése 2024. november 12.) Izolált feldolgozói modell,
Folyamatközi modell3
.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 folyamatban lévő modell csak a .NET LTS-kiadásait támogatja. 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.

A 2 .NET 8 még nem támogatott a folyamatban lévő modellben, bár az izolált feldolgozói modellen érhető el. A .NET 8-csomagokról, beleértve a folyamatban lévő modell jövőbeli lehetőségeit is, tekintse meg az Azure Functions ütemtervfrissítési bejegyzését.

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

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 7-hez vagy a .NET 6-hoz az izolált feldolgozómodellen. Ha meg kell céloznia ezeket a verziókat, módosíthatja a .NET 8 izolált feldolgozómodell-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:

  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 az Azure Functions Core Tools 4.x-es verziójával.
  4. 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.
  5. 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:

  1. Állítsa be a következő értékét PropertyGroup: .TargetFramework to net8.0.

  2. Állítsa be a következő értékét PropertyGroup: .AzureFunctionsVersion to v4.

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

    <OutputType>Exe</OutputType>
    
  4. ItemGroupA .PackageReference listában cserélje le a csomaghivatkozást Microsoft.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.

  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 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 Replace
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
Illetve
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á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 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.Extensionsa 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.csHostBuilder saját . A munkával Program.cskapcsolatos 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 alkalmazás Elemzések integrálása az izolált feldolgozómodellhez. Program.csEmellett 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.csszű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 HostBuilderprogram 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

Gépház host.json fájlban a függvényalkalmazás szintjén, helyileg és az Azure-ban is alkalmazható. 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.

Alkalmazás Elemzések naplószintjei és szűrése

A naplók a Functions-gazdagép futtatókörnyezetéből és a projekt kódjából is elküldhetők az Alkalmazás Elemzések. 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.cssajá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:

  1. Frissítse az 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á mindkettőt version és extensionBundle 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.

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

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

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

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

  1. 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>
    
  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 WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 csak a felcserélés során van előkészítés, az eltávolítja az FUNCTIONS_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ítania WEBSITE_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.

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

  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 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 eventHubNameaz . 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 figyelé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 Elemzések váltja fel, amely a APPINSIGHTS_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 (.fsxfá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. Durationhelyére MaxDurationMsMinDurationMs, és AvgDurationMs. Success Rateis á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:

Következő lépések