Alkalmazások migrálása az Azure Functions 3.x verziójából a 4.x verzióba

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

Fontos

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

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

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

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

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

$FunctionApps = Get-AzFunctionApp

$AppInfo = @{}

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

$AppInfo

Válassza ki a cél .NET-verziót

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

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

.NET-verzió .NET Hivatalos támogatási szabályzat kiadási típusa Functions-folyamatmodell1,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.

Javasoljuk, hogy frissítsen a .NET 8-ra az izolált feldolgozói modellen. A .NET 8 a .NET leghosszabb támogatási ablakával rendelkező, teljesen kiadott verzió.

Bár dönthet úgy, hogy inkább a folyamaton belüli modellt használja, ez nem ajánlott, ha elkerülhető. A folyamaton belüli modell támogatása 2026. november 10-én megszűnik, ezért előbb át kell lépnie az elkülönített feldolgozói modellre. Ha így tesz, a 4.x-es verzióra való migrálás csökkenti a szükséges teljes erőfeszítést, és az izolált feldolgozói modell további előnyöket biztosít az alkalmazásnak, beleértve a .NET jövőbeli verzióinak egyszerűbb megcélzását is. Ha az izolált feldolgozói modellre vált, a .NET frissítési segéd számos szükséges kódmódosítást is képes kezelni.

Ez az útmutató nem mutat be konkrét példákat a .NET 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 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 az Azure Functions Core Tools 4.x-es verziójával.
  4. Futtassa a frissítés előtti érvényesítőt az Azure-ban üzemeltetett alkalmazásban, és oldja meg az észlelt problémákat.
  5. 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.
  6. Tegye közzé a migrált projektet a frissített függvényalkalmazásban.

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

A helyi projekt migrálása

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

Válassza ki azt a lapot, amely megfelel a .NET célverziójának és a kívánt folyamatmodellnek (folyamatban lévő vagy izolált feldolgozói folyamat).

Tipp.

Ha a .NET LTS- vagy STS-verziójára vált az izolált feldolgozói modell használatával, a .NET frissítési segéd használatával automatikusan elvégezheti a következő szakaszokban említett módosítások nagy részét.

Projektfájl

Az alábbi példa egy .csproj .NET Core 3.1-et használó projektfájl a 3.x verzión:

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

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

Ezek a lépések egy helyi C#-projektet feltételeznek, és ha az alkalmazás ehelyett C# szkriptet (.csx fájlokat) használ, a folytatás előtt át kell alakítania a projektmodellt .

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

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

Program.cs fájl

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

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

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

host.Run();

Ez a példa ASP.NET Core-integrációt is tartalmaz, amely javítja a teljesítményt, és ismerős programozási modellt biztosít, amikor az alkalmazás HTTP-eseményindítókat használ. Ha nem kíván HTTP-eseményindítókat használni, a hívás ConfigureFunctionsWebApplication lecserélhető a következő hívásra ConfigureFunctionsWorkerDefaults: . Ha így tesz, eltávolíthatja a hivatkozásokat Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore a projektfájlból. A legjobb teljesítmény érdekében azonban még a más triggertípusokkal rendelkező függvények esetében is meg kell tartania a FrameworkReference ASP.NET Core-t.

A Program.cs fájl lecserél minden olyan fájlt, amely rendelkezik az FunctionsStartup attribútummal, amely általában egy Startup.cs fájl. Azokban a helyeken, ahol a FunctionsStartup kód hivatkoznaIFunctionsHostBuilder.Services, ehelyett hozzáadhat utasításokat a .ConfigureServices() metóduson belül a Program.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.

local.settings.json fájl

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

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

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

Feljegyzés

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

host.json fájl

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

Osztálynévváltozások

Egyes kulcsosztályok módosították a neveket a verziók között. Ezek a módosítások a .NET API-k változásainak vagy a folyamaton belüli és az izolált feldolgozói folyamat közötti különbségeknek a eredményeképpen jönnek létre. Az alábbi táblázat a Functions által használt legfontosabb .NET-osztályokat jelzi, amelyek a migrálás során változhatnak:

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

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

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

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

JSON-szerializálás

Alapértelmezés szerint az izolált feldolgozói modell JSON-szerializálást használ System.Text.Json . A szerializáló beállításainak testreszabásához vagy a JSON.NET (Newtonsoft.Json) váltáshoz tekintse meg ezeket az utasításokat.

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

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

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

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

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

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

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

            return new OkObjectResult(responseMessage);
        }
    }
}

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

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

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

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

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

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

A projekt frissítése az Azure Functions 4.x-hez:

  1. Frissítse az 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ényeinek csomagját 2.x vagy újabb verzióra. További információ: kompatibilitástörő változások.

  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 Python 3.6-ot használ, lépjen az egyik támogatott verzióra.

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

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

  1. Az Azure Portalon 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épelniFunctions 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, győződjön meg arról, hogy a módosításokat a Functions-futtatókörnyezet 4.x verziójával ellenőrzi, akár helyileg, az Azure Functions Core Tools 4-es verziójával, akár egy átmeneti pont használatával.

A függvényalkalmazás frissítése az Azure-ban

A migrált projekt közzététele előtt frissítenie kell az Azure-beli függvényalkalmazás-gazdagép futtatókörnyezetét a 4.x verzióra. A Functions-gazdagép által használt futtatókörnyezeti verziót az FUNCTIONS_EXTENSION_VERSION alkalmazásbeállítás szabályozza, de bizonyos esetekben más beállításokat is frissíteni kell. A kódmódosításokhoz és az alkalmazásbeállítások módosításához is újra kell indítani a függvényalkalmazást.

A legegyszerűbb megoldás, ha pontok nélkül frissít, majd újból közzéteheti az alkalmazásprojektet. Emellett minimalizálhatja az állásidőt az alkalmazásban, és leegyszerűsítheti a visszaállítást a pontok használatával történő frissítéssel.

Frissítés pontok nélkül

A legegyszerűbben úgy frissíthet v4.x verzióra, ha az alkalmazásbeállítást ~4 az FUNCTIONS_EXTENSION_VERSION Azure-beli függvényalkalmazásban állítja be. Más eljárást kell követnie egy olyan webhelyen, amelyen pontok találhatóak.

az functionapp config appsettings set --settings FUNCTIONS_EXTENSION_VERSION=~4 -g <RESOURCE_GROUP_NAME> -n <APP_NAME>

Másik beállítást is be kell állítania, amely a Windows és a Linux között különbözik.

Windows rendszeren való futtatáskor engedélyeznie kell a .NET 6.0-t is, amelyet a futtatókörnyezet 4.x-es verziója igényel.

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

A .NET 6 szükséges a Windowson futó bármely nyelven futó függvényalkalmazásokhoz.

Ebben a példában cserélje le <APP_NAME> a függvényalkalmazás nevére és <RESOURCE_GROUP_NAME> az erőforráscsoport nevére.

Most már újra közzéteheti a 4.x-es verzióra migrált alkalmazásprojektet.

Frissítés pontok használatával

Az üzembehelyezési pontok használatával frissítheti a függvényalkalmazást egy korábbi verzió v4.x futtatókörnyezetére. Átmeneti pont használatával futtathatja az alkalmazást az előkészítési ponton található új futtatókörnyezeti verzión, és az ellenőrzés után éles környezetbe válthat. A bővítőhelyek lehetővé teszik az állásidő minimalizálását is a frissítés során. Ha minimalizálnia kell az állásidőt, kövesse a minimális állásidő frissítésének lépéseit.

Miután ellenőrizte az alkalmazást a frissített ponton, felcserélheti az alkalmazást és az új verzióbeállításokat éles környezetbe. Ehhez a felcseréléshez be kell állítani WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 az éles pontban. A beállítás hozzáadása befolyásolja a frissítéshez szükséges állásidőt.

Standard frissítés

Ha a pontalapú függvényalkalmazás képes kezelni a teljes újraindítás állásidejét, frissítheti a WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS beállítást közvetlenül az éles pontban. Mivel a beállítás közvetlenül az éles pontban való módosítása olyan újraindítást okoz, amely hatással van a rendelkezésre állásra, fontolja meg ezt a módosítást a csökkentett forgalom idején. Ezután felcserélheti a frissített verziót az előkészítési pontról.

A Update-AzFunctionAppSetting PowerShell-parancsmag jelenleg nem támogatja a tárolóhelyeket. Az Azure CLI-t vagy az Azure Portalt kell használnia.

  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
    

Kompatibilitástörő változások 3.x és 4.x között

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

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

Futtatókörnyezet

  • Az Azure Functions-proxyk az Azure Functions-futtatókörnyezet 1.x és 3.x verzióinak örökölt funkciói. A Függvény-proxyk támogatása újra engedélyezhető a 4.x verzióban, így sikeresen frissítheti a függvényalkalmazásokat a legújabb futtatókörnyezeti verzióra. A lehető leghamarabb váltson inkább a függvényalkalmazások Azure API Managementtel való integrálására. Az API Management lehetővé teszi, hogy kihasználja a függvényalapú API-k meghatározásához, biztonságossá tételéhez, kezeléséhez és értékesítéséhez használható funkciók egy teljesebb készletét. További információ: API Management-integráció. Ha tudni szeretné, hogyan engedélyezheti újra a Proxyk támogatását a Functions 4.x verziójában, olvassa el a Proxyk újbóli engedélyezését a Functions v4.x verziójában.

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

  • Az Azure Functions 4.x mostantól a bővítmények minimális verziókövetelményeit érvényesíti. Frissítsen az érintett bővítmények legújabb verziójára. Non-.NET nyelvek esetén frissítsen a bővítménycsomag 2.x vagy újabb verziójára. (#1987)

  • Az alapértelmezett és a maximális időtúllépések mostantól 4.x-ben lesznek kényszerítve a Linuxon futó függvényalkalmazások esetében egy használatalapú csomagban. (#1915)

  • Az Azure Functions 4.x a Key Vault-szolgáltatót használja Azure.Identity és Azure.Security.KeyVault.Secrets elavulta a Microsoft.Azure.KeyVault használatát. A függvényalkalmazás beállításainak konfigurálásáról további információt a Key Vault titkos adattárakban található beállításában talál. (#2048)

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

  • Az Azure Functions 4.x támogatja a .NET 6 folyamatközi és izolált alkalmazásait.

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

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

  • Eltávolítás HttpClient 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)

  • Node.js 10-ben és 12-ben nem támogatott az Azure Functions 4.x. (#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)
  • A Python 3.6 nem támogatott az Azure Functions 4.x-ben. (#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