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

Fontos

2022. december 13-ától a Azure Functions futtatókörnyezet 2.x és 3.x verzióján futó függvényalkalmazások a kiterjesztett támogatás végét érik el. További információ: Kivont verziók.

Azure Functions 4.x verzió nagyon visszafelé kompatibilis a 3.x verzióval. A legtöbb alkalmazásnak biztonságosan át kell migrálnia a 4.x-be anélkül, hogy jelentős kódmódosításokat kellene végrehajtania. A Functions futtatókörnyezeti verzióival kapcsolatos további információkért lásd: Azure Functions futtatókörnyezeti verziók áttekintése.

Fontos

A függvényalkalmazások, amelyek a használaton kívüli v3 futtatókörnyezetet futtatják Linuxon egy használatalapú csomagban, 2026. szeptember 30-a után leállnak. A szolgáltatáskimaradás elkerülése érdekében migrálja az alkalmazást a v4-futtatókörnyezetbe.

2028. szeptember 30-án megszüntetik a lehetőséget, hogy függvényalkalmazásokat üzemeltetjen Linuxon egy Fogyasztási tervben. A Linux-használat csomag nem kap új funkciókat vagy nyelvi verziókat. A használati tervben Windows-on futó alkalmazásokra jelenleg nincs hatással. Migrálja az alkalmazásokat a Rugalmas használat csomagba a kivonási dátum előtt.

Ez a cikk végigvezeti a függvényalkalmazás biztonságos migrálásának folyamatán a Functions-futtatókörnyezet 4.x verziójának futtatásához. Mivel a projektmigrálási utasítások nyelvfüggőek, mindenképpen a cikk tetején található választóból válassza ki a fejlesztési nyelvet.

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

A következő PowerShell-szkripttel létrehozhatja az előfizetésében azoknak a függvényalkalmazásoknak a listáját, amelyek jelenleg a 2.x vagy a 3.x verziót célják:

$Subscription = '<YOUR SUBSCRIPTION ID>' 
 
Set-AzContext -Subscription $Subscription | Out-Null

$FunctionApps = Get-AzFunctionApp

$AppInfo = @{}

foreach ($App in $FunctionApps)
{
     if ($App.ApplicationSettings["FUNCTIONS_EXTENSION_VERSION"] -like '*3*')
     {
          $AppInfo.Add($App.Name, $App.ApplicationSettings["FUNCTIONS_EXTENSION_VERSION"])
     }
}

$AppInfo

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

A Functions-futtatókörnyezet 3.x verziójában a C# függvényalkalmazás .NET Core 3.1-et célozza meg a folyamatban lévő modellel, vagy .NET 5-öt az izolált feldolgozómodell használatával.

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 munkamenet modell
.NET 9 STS (támogatás megszűnése 2026. november 10.)3 Izolált munkamenet modell
.NET 8 LTS (támogatás megszűnése 2026. november 10.) Izolált munkavállalói modell
Folyamatközi modell2
.NET-keretrendszer 4.8 Szabályzat megtekintése Izolált munkamenet 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 funkciói és képességeinek teljes összehasonlításáért lásd: Folyamaton belüli és elkülönített feldolgozói folyamat .NET Azure Functions.

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 munkavállalói 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.

Javasoljuk, hogy frissítsen a .NET 8-ra az izolált munkavégzési modell használatával. .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, ezt a megközelítést nem javasoljuk, ha el tudja kerülni. 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 munkásmodellre vált, a .NET Upgrade Assistant 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 a 3.x és 4.x közötti kompatibilitástörő változások listáját.
  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. Futtassa a frissítés előtti érvényesítőt a Azure-ben üzemeltetett alkalmazáson, és oldja meg az észlelt problémákat.
  5. 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 a migrált alkalmazás teszteléséhez és ellenőrzéséhez az Azure új futtatókörnyezeti verziójában. Ezután üzembe helyezheti az alkalmazást a frissített verzióbeállítások szerint az éles környezetben. További információ: Frissítés nyílások használatával.
  6. 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 az Foglalatok nélküli frissítés.

A helyi projekt migrálása

A frissítési utasítások nyelvfüggők. Ha nem látja a nyelvet, válassza ki a cikk tetején található választógombból.

Válassza ki 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 helyezi át az izolált feldolgozómodellt, 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 a 3.x verzión .NET Core 3.1-et használja:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <AzureFunctionsVersion>v3</AzureFunctionsVersion>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.13" />
  </ItemGroup>
  <ItemGroup>
    <Reference Include="Microsoft.CSharp" />
  </ItemGroup>
  <ItemGroup>
    <None Update="host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
  </ItemGroup>
</Project>

Az alábbi eljárások egyikével frissítheti ezt az XML-fájlt a Functions 4.x verziójában való futtatáshoz:

Ezek a lépések egy helyi C#-projektet feltételeznek; 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 a PropertyGroup értékét. TargetFramework net8.0-hez

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

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

    <OutputType>Exe</OutputType>
    
  4. A ItemGroup-ban. 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

Az áttérni kívánt modell alapján előfordulhat, hogy frissítenie vagy módosítania kell az alkalmazás által hivatkozott csomagokat. Amikor bevezeti a célcsomagokat, frissítenie kell a használati utasítások és a hivatkozott típusok névterét. A névtérváltozások hatása a using utasításokra a későbbi HTTP trigger sablon példákban látható ebben a cikkben.

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őindító Hozzáadás
Microsoft.Azure. Functions.Worker.Extensions.Timer
Tárolókötések Helyettesít
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
Várólistakö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 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ései Hivatkozás cseréje erre:
Microsoft.Azure.WebJobs.Extensions.EventGrid
a legújabb verzióval
Microsoft.Azure. Functions.Worker.Extensions.EventGrid
SignalR Szolgáltatás kötései 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 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ó: Azure Service Bus bindingek az 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 .NET-re vonatkozó Azure SDK verziókkal működnek, és szinte minden csomag a Azure.* formát követi.

Program.cs fájl

Izolált feldolgozói folyamatba való migráláskor a következő program.cs fájlt kell hozzáadnia a projekthez:

using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

var host = new HostBuilder()
    .ConfigureFunctionsWebApplication()
    .ConfigureServices(services => {
        services.AddApplicationInsightsTelemetryWorkerService();
        services.ConfigureFunctionsApplicationInsights();
    })
    .Build();

host.Run();

Ez a példa ASP.NET Core integrációt 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 azonban még a más triggertípusokkal rendelkező függvények esetében is az FrameworkReference-t ASP.NET Core mellett kell tartania.

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.

local.settings.json fájl

A local.settings.json fájl csak helyi futtatáskor használható. További információt a Helyi beállítások fájlban talál.

A 4.x verzióra való migráláskor győződjön meg arról, hogy a local.settings.json fájl legalább a következő elemeket tartalmazza:

{
    "IsEncrypted": false,
    "Values": {
        "AzureWebJobsStorage": "AzureWebJobsStorageConnectionStringValue",
        "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
    }
}

Megjegyzés

Amikor a folyamaton belüli futtatásról elkülönített feldolgozói folyamatba migrál, az FUNCTIONS_WORKER_RUNTIME értéket "dotnet-isolated" értékre kell módosítania.

host.json fájl

A host.json fájlban nincs szükség semmilyen módosításra. Ha azonban az Application Insights-konfiguráció ebben a fájlban a folyamatban lévő modellprojektből származik, érdemes lehet más módosításokat végrehajtania a Program.cs fájlban. A host.json fájl csak a Functions-gazdagép futtatókörnyezetéből való naplózást szabályozza, és az izolált feldolgozói modellben ezek a naplók egy része közvetlenül az alkalmazásból származik, így több vezérlést biztosít. A naplók szűrésének részleteiért tekintse meg az izolált feldolgozói modell naplószintjeinek kezelését ismertető cikket.

Osztálynévváltozások

Egyes kulcsosztályok módosították a neveket a verziók között. Ezek a módosítások 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:

.NET Core 3.1 .NET 5 .NET 8
FunctionName (attribútum) Function (attribútum) Function (attribútum)
ILogger ILogger ILogger, ILogger<T>
HttpRequest HttpRequestData HttpRequestData, HttpRequest (ASP.NET Core integrációval)
IActionResult HttpResponseData HttpResponseData, IActionResult (ASP.NET Core integrációval)
FunctionsStartup (attribútum) Ehelyett használja Program.cs a Ehelyett használja Program.cs a

A kötésekben osztálynévbeli különbségek is lehetnek. További információkért tekintse meg az adott kötésekre vonatkozó referenciacikkeket.

Egyéb kódmódosítások

Ez a szakasz a migrálás során megfontolandó egyéb kódmódosításokat emeli ki. Ezekre a módosításokra nem minden alkalmazásnak van szüksége, de érdemes kiértékelni, hogy vannak-e relevánsak a forgatókönyvek szempontjából. Ellenőrizze a 3.x és 4.x közötti kompatibilitástörő módosításokat a projekten esetleg szükséges egyéb módosítások esetében.

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 indító sablon

A folyamaton belüli és az izolált feldolgozói folyamat közötti különbségek a HTTP által aktivált függvényekben láthatók. A 3.x verzió (folyamatban lévő) HTTP-eseményindító sablonja a következő példához hasonlóan néz ki:

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;

namespace Company.Function
{
    public static class HttpTriggerCSharp
    {
        [FunctionName("HttpTriggerCSharp")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.AuthLevelValue, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            string name = req.Query["name"];

            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            dynamic data = JsonConvert.DeserializeObject(requestBody);
            name = name ?? data?.name;

            string responseMessage = string.IsNullOrEmpty(name)
                ? "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."
                : $"Hello, {name}. This HTTP triggered function executed successfully.";

            return new OkObjectResult(responseMessage);
        }
    }
}

A migrált verzió HTTP-triggersablonja a következő példához hasonlóan néz ki:

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;

namespace Company.Function
{
    public class HttpTriggerCSharp
    {
        private readonly ILogger<HttpTriggerCSharp> _logger;

        public HttpTriggerCSharp(ILogger<HttpTriggerCSharp> logger)
        {
            _logger = logger;
        }

        [Function("HttpTriggerCSharp")]
        public IActionResult Run(
            [HttpTrigger(AuthorizationLevel.Function, "get")] HttpRequest req)
        {
            _logger.LogInformation("C# HTTP trigger function processed a request.");

            return new OkObjectResult($"Welcome to Azure Functions, {req.Query["name"]}!");
        }
    }
}

A projekt frissítése 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. Frissítse az alkalmazás Azure Functions bővítménycsomagját 2.x vagy újabb verzióra. További információért lásd a kompatibilitástörő változásokat.

  1. Szükség esetén lépjen a 4.x verzióban támogatott Java verziók egyikére.

  2. Frissítse az alkalmazás fájlját POM.xml úgy, hogy módosítsa a FUNCTIONS_EXTENSION_VERSION beállítást ~4a következő példához hasonlóan:

    <configuration>
        <resourceGroup>${functionResourceGroup}</resourceGroup>
        <appName>${functionAppName}</appName>
        <region>${functionAppRegion}</region>
        <appSettings>
            <property>
                <name>WEBSITE_RUN_FROM_PACKAGE</name>
                <value>1</value>
            </property>
            <property>
                <name>FUNCTIONS_EXTENSION_VERSION</name>
                <value>~4</value>
            </property>
        </appSettings>
    </configuration>
    
  1. Szükség esetén lépjen a 4.x verzióban támogatott Node.js verziók egyikére.
  1. Használja ki ezt a lehetőséget, és frissítsen a PowerShell 7.2-re, ami ajánlott. További információ: PowerShell-verziók.
  1. Ha a Python 3.6-ot használja, lépjen a támogatott verziók egyikére.

A frissítés előtti érvényesítő futtatása

Azure Functions egy frissítés előtti érvényesítőt biztosít, amely segít azonosítani a függvényalkalmazás 4.x-re való migrálása során felmerülő lehetséges problémákat. A frissítés előtti érvényesítő futtatása:

  1. A Azure portálon keresse meg a függvényalkalmazást.

  2. Nyissa meg a Problémák diagnosztizálása és megoldása lapot.

  3. A Függvényalkalmazás diagnosztikájában kezdjen el gépelni Functions 4.x Pre-Upgrade Validator, majd válassza ki a listából.

  4. Az ellenőrzés befejeződése után tekintse át a javaslatokat, és oldja meg az alkalmazással kapcsolatos problémákat. Ha módosítania kell az alkalmazást, ellenőrizze a módosításokat a Functions-futtatókörnyezet 4.x verziójával, akár helyben, az Azure Functions Core Tools v4 segítségével, akár egy előkészítő példány használatával.

A függvényalkalmazás frissítése a Azure

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 pontok használatával történő frissítéssel.

Frissítés időablakok 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 a függvényalkalmazás az Azure-ban. 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 sloton, áttelepítheti az alkalmazást és az új verzió konfigurációját éles környezetbe. Ehhez a felcseréléshez be kell állítani WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 az éles pontban. Az, ahogyan ezt a beállítást hozzáadja, befolyásolja a frissítéshez szükséges állásidő mennyiségé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 a produkciós helyen történő módosítása olyan újraindítást okoz, ami befolyásolja a rendelkezésre állást, fontolja meg ezt a módosítást olyankor végrehajtani, amikor a forgalom csökkentett. 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 nyílásokat. A Azure CLI vagy a Azure portált kell használnia.

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

    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 környezetben futó alkalmazást indítja újra.

  2. Az előkészítési ponton a következő paranccsal is beállíthatja az WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS-t:

    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 verzió előkészítő hely éles környezetbe állításához 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 alábbi parancsot használja a staging részen a WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 beállításához.

    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 áthelyezheti a slotot az új beállítással a termelési környezetbe, és ezzel egyidejűleg visszaállíthatja a verzió beállítást a staging slotban.

    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 az előzetes környezetben létezik egy felcserélés során, az eltávolítja az FUNCTIONS_EXTENSION_VERSION beállítást az előzetes környezetből. Verzióbeállítás nélkül a foglalat hibás állapotban van. Az tesztelési helyen lévő verzió frissítése közvetlenül a csere után visszaállíthatja a helyet megfelelő állapotba, és ha szükséges, visszavonhatja a módosításait. 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 visszaállítás előtt, hogy megelőzze a stagingben tapasztalt hibák újbóli előfordulását. 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 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őkészített várakozási hely éles üzembe való átállításához használja az alábbi parancsot:

    az functionapp deployment slot swap -g <RESOURCE_GROUP_NAME>  -n <APP_NAME> --slot <SLOT_NAME> --target-slot production
    

Kompatibilitást megszakító változások a 3.x és 4.x között

Az alábbiakban a 3.x alkalmazás 4.x-re való frissítése előtt fontos kompatibilitástörő változásokat ismerhet meg, beleértve a nyelvspecifikus kompatibilitástörő módosításokat is. A teljes listát Azure Functions GitHub Töredezett módosítás: Jóváhagyva címkével ellátott problémákat találja.

Ha nem látja a programozási nyelvet, válassza ki a lap tetején.

Futtatás

  • Azure Functions Proxyk a Azure Functions futtatókörnyezet 1.x és 3.x verzióinak egyik funkciója volt. Ez a funkció a 4.x verzióban nem támogatott. További információ: Kiszolgáló nélküli REST API-k Azure Functions használatával.

  • A Azure Storage AzureWebJobsDashboard használatával történő naplózás már nem támogatott a 4.x-ben. Ehelyett az Application Insightst kell használnia. (#1923)

  • Azure Functions 4.x mostantól kényszeríti minimum verziókövetelményeit a bővítményekre. Frissítsen az érintett bővítmények legújabb verziójára. Nem .NET nyelvek esetén update a bővítménycsomag 2.x vagy újabb verziójára. (#1987)

  • A Linuxon futó függvényalkalmazások esetében az alapértelmezett és a maximális időtúllépések mostantól a 4.x verzióban érvényesítésre kerülnek egy fogyasztás alapú tervben. (#1915)

  • Azure Functions 4.x Azure.Identity és Azure.Security.KeyVault.Secrets a Key Vault szolgáltatóhoz használja, és elavulttá nyilvánította a Microsoft.Azure.KeyVault használatát. A függvényalkalmazás beállításainak konfigurálásáról további információt a Kulcstároló kezelése opció alatt talál. (#2048)

  • A tárfiókokat használó függvényalkalmazások most már nem indulnak el, ha a gazdaazonosítójuk megegyezik. További információkért lásd a gazdagépazonosítóval kapcsolatos szempontokat. (#2049)

  • Azure Functions 4.x támogatja a .NET újabb verzióit. A verziók teljes listáját a Supported languages in Azure Functions című témakörben találja.

  • InvalidHostServicesException ez most végzetes hiba. (#2045)

  • EnableEnhancedScopes alapértelmezés szerint engedélyezve van. (#1954)

  • Távolítsa el a HttpClient-t regisztrált szolgáltatásként. (#1911)

  • Használjon egyosztályos betöltőt a Java 11-ben. (#1997)

  • Állítsa le a feldolgozó jarok betöltését a Java 8-ban. (#1991)

  • A Node.js 10-es és 12-es verziói nem támogatottak az Azure Functions 4.x-ben. (#1999)

  • A kimenet szerializálása Node.js alkalmazásokban a korábbi inkonzisztenciák kezelésére lett frissítve. (#2007)

  • Az alapértelmezett szálszám frissült. A nem szálbiztos vagy magas memóriahasználattal rendelkező függvények hatással lehetnek. (#1962)
  • Python 3.6 nem támogatott a 4.x Azure Functions. (#1999)

  • A megosztott memóriaátvitel alapértelmezés szerint engedélyezve van. (#1973)

  • Az alapértelmezett szálszám frissült. A nem szálbiztos vagy magas memóriahasználattal rendelkező függvények hatással lehetnek. (#1962)

Következő lépések