Megosztás a következőn keresztül:


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 a .NET-keretrendszert célozza meg.

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 Funkciók folyamatmodell1,2
.NET 10 LTS (a támogatás megszűnésének dátuma: 2028. november 14.) Izolált dolgozói modell
.NET 9 STS (támogatás megszűnése 2026. november 10.)3 Izolált dolgozói modell
.NET 8 LTS (támogatás vége 2026. november 10.) Izolált munkavállalói modell
Folyamatközi modell2
.NET-keretrendszer 4.8 Szabályzat megtekintése Izolált dolgozói modell

1 Az izolált feldolgozói modell támogatja a .NET hosszú távú támogatási (LTS) és standard távú támogatási (STS) verzióit, valamint .NET-keretrendszer. A folyamaton belüli modell csak a .NET LTS-kiadásait támogatja, a .NET 8 végződéssel. A két modell teljes funkció-összehasonlítását lásd a In-processz és izolált folyamat .NET Azure Functions közötti különbségek című részben.

2 A folyamaton belüli modell támogatása 2026. november 10-én megszűnik. További információkért tekintse meg ezt a támogatási közleményt. A folyamatos teljes körű támogatás érdekében Önnek az alkalmazásokat át kell helyeznie az izolált munkaerő modellbe.

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

Tipp.

Ha az alkalmazás nem függ olyan könyvtártól vagy API-tól, amely csak a .NET-keretrendszerben érhető el, javasoljuk, hogy frissítsen a .NET 8-ra az izolált munkamodellen. Az 1.x verziójú alkalmazások közül sok a .NET-keretrendszert célozza meg, mert a létrehozásukkor csak 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 munkavállalói modellre vált, a .NET Upgrade Assistant az Ön által szükséges kódmódosítások nagy részét is képes kezelni.

Ez az útmutató nem mutat be konkrét példákat a .NET 10 -hez (előzetes verzió) vagy a .NET 9-hez. Ha az egyik verziót meg kell céloznia, a .NET 8-példákat is módosíthatja.

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 csökkenteni szeretné az állásidőt, érdemes lehet egy tesztelőhelyet használni a migrált alkalmazás tesztelésére és ellenőrzésére az Azure-ban az új futtatókörnyezet verziójában. Ezután üzembe helyezheti az alkalmazást a frissített verzió beállításaival az éles környezetbe. További információt a következőben talál: Frissítés helyek használatával.
  5. Tegye közzé a migrált projektet a frissített függvényalkalmazásban.

Ha a Visual Studio használatával 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, mint a Frissítés helyek 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; ha az alkalmazás ehelyett C# szkriptet (.csx fájlokat) használ, a folytatás előtt át kell alakítania a projektmodellt .

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

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

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

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

    <OutputType>Exe</OutputType>
    
  4. ItemGroup-ban/ben. PackageReference 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 using található utasításokra a jelen cikk későbbi részében látható.

Ha még nem tette meg, frissítse a projektet, hogy a következő stabil verziókra hivatkozzon:

Az alkalmazás által használt eseményindítóktól és kötésektől függően előfordulhat, hogy az alkalmazásnak más csomagokra kell hivatkoznia. Az alábbi táblázat a leggyakrabban használt bővítmények cseréjét mutatja be:

Forgatókönyv Csomaghivatkozások módosítása
Időzítő-eseményindító Hozzáad
Microsoft.Azure.Functions.Worker.Extensions.Timer
Tárkötések Cserélje ki
Microsoft.Azure.WebJobs.Extensions.Storage
nevű és
Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs,
Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues és
Microsoft.Azure.Functions.Worker.Extensions.Tables
Blobkötések Hivatkozás cseréje erre:
Microsoft.Azure.WebJobs.Extensions.Storage.Blobs
a legújabb verzióval
Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs
Üzenetsorkötések Hivatkozás cseréje erre:
Microsoft.Azure.WebJobs.Extensions.Storage.Queues
a legújabb verzióval
Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues
Táblakötések Hivatkozás cseréje erre:
Microsoft.Azure.WebJobs.Extensions.Tables
a legújabb verzióval
Microsoft.Azure.Functions.Worker.Extensions.Tables
Cosmos DB-kötések Hivatkozás cseréje erre:
Microsoft.Azure.WebJobs.Extensions.CosmosDB
és/vagy
Microsoft.Azure.WebJobs.Extensions.DocumentDB
a legújabb verzióval
Microsoft.Azure.Functions.Worker.Extensions.CosmosDB
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-kapcsolatok Hivatkozás cseréje erre:
Microsoft.Azure.WebJobs.Extensions.SignalRService
a legújabb verzióval
Microsoft.Azure.Functions.Worker.Extensions.SignalRService
Durable Functions Hivatkozás cseréje erre:
Microsoft.Azure.WebJobs.Extensions.DurableTask
a legújabb verzióval
Microsoft.Azure.Functions.Worker.Extensions.DurableTask
Durable Functions
(SQL Storage-szolgáltató)
Hivatkozás cseréje erre:
Microsoft.DurableTask.SqlServer.AzureFunctions
a legújabb verzióval
Microsoft.Azure.Functions.Worker.Extensions.DurableTask.SqlServer
Durable Functions
(netherite tárhely szolgáltató)
Hivatkozás cseréje erre:
Microsoft.Azure.DurableTask.Netherite.AzureFunctions
a legújabb verzióval
Microsoft.Azure.Functions.Worker.Extensions.DurableTask.Netherite
SendGrid-kötések Hivatkozás cseréje erre:
Microsoft.Azure.WebJobs.Extensions.SendGrid
a legújabb verzióval
Microsoft.Azure.Functions.Worker.Extensions.SendGrid
Kafka-kötések Hivatkozás cseréje erre:
Microsoft.Azure.WebJobs.Extensions.Kafka
a legújabb verzióval
Microsoft.Azure.Functions.Worker.Extensions.Kafka
RabbitMQ-kötések Hivatkozás cseréje erre:
Microsoft.Azure.WebJobs.Extensions.RabbitMQ
a legújabb verzióval
Microsoft.Azure.Functions.Worker.Extensions.RabbitMQ
Függőséginjektálás
és indítási konfiguráció
Hivatkozások eltávolítása
Microsoft.Azure.Functions.Extensions
(Az izolált feldolgozói modell alapértelmezés szerint ezt a funkciót biztosítja.)

A megfontolandó bővítmények teljes listájáért tekintse meg a támogatott kötéseket , és tekintse meg az egyes bővítmények dokumentációját az izolált folyamatmodellre vonatkozó teljes telepítési utasításokért. Mindenképpen telepítse a megcélzott csomagok legújabb stabil verzióját.

Tipp.

Előfordulhat, hogy a folyamat során a bővítményverziók módosításai szükségessé teszik a(z) host.json fájl frissítését is. Mindenképpen olvassa el a használt bővítmények dokumentációját. A Service Bus-bővítmény például a 4.x és az 5.x verzió közötti struktúrában 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 Microsoft.Azure.WebJobs.* és Microsoft.Azure.Functions.Extensions névterekből származó csomagokra. 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, érdemes a FrameworkReference ASP.NET Core-t megtartani.

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 az alkalmazásbeállítások, a Key Vault-hivatkozások vagy az alkalmazáskonfigurációs referenciák funkcióin keresztül kell megadni.

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

host.json fájl

A host.json fájl beállításai helyileg és az Azure-ban egyaránt érvényesek a függvényalkalmazás szintjén. Az 1.x verzióban a host.json fájl üres, vagy olyan beállításokat tartalmaz, amelyek a függvényalkalmazás összes függvényére vonatkoznak. További információ: Host.json v1. Ha a host.json fájl beállítási értékekkel rendelkezik, tekintse át a host.json v2 formátumot a módosításokért.

A 4.x verzió futtatásához hozzá kell adnia "version": "2.0" a host.json fájlhoz. Érdemes megfontolnia, hogy a logging-t is hozzáadja a konfigurációjához, ahogyan az alábbi példák mutatják:

{
    "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 egy elkülönített feldolgozói folyamatba migrál, az FUNCTIONS_WORKER_RUNTIME értéket "dotnet-isolált" értékre kell módosítania.

Osztálynévváltozások

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

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: JSON-szerializálás testreszabása.

Az Application Insights naplószintjei és szűrése

A naplók elküldhetők az Application Insightsnak a Functions-gazdagép futtatókörnyezetéből és a projekt kódjából is. A host.json lehetővé teszi a gazdagép naplózás szabályainak konfigurálását, azonban a kódból érkező naplók ellenőrzéséhez a Program.cs részeként kell konfigurálnia a szűrési szabályokat. A naplók szűrésének részleteiért tekintse meg az izolált feldolgozói modell naplószintjeinek kezelését ismertető cikket.

HTTP-trigger sablon

Az 1.x és a 4.x verzió közötti kódváltozások többsége a HTTP által aktivált függvényekben látható. Az 1.x verzió HTTP-eseményindító sablonja a következő példához hasonlóan néz ki:

using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;

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

            // parse query parameter
            string name = req.GetQueryNameValuePairs()
                .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
                .Value;

            if (name == null)
            {
                // Get request body
                dynamic data = await req.Content.ReadAsAsync<object>();
                name = data?.name;
            }

            return name == null
                ? req.CreateResponse(HttpStatusCode.BadRequest, 
                    "Please pass a name on the query string or in the request body")
                : req.CreateResponse(HttpStatusCode.OK, "Hello " + name);
        }
    }
}

A 4.x verzióban a HTTP-eseményindító sablon a következő példához hasonlóan néz ki:

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

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

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

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

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

A projekt frissítése 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á mindkét elemet, version és extensionBundle a host.json fájlhoz, hogy az a következő példában látható módon nézzen ki.

    {
        "version": "2.0",
        "extensionBundle": {
            "id": "Microsoft.Azure.Functions.ExtensionBundle",
            "version": "[3.3.0, 4.0.0)"
        }
    }
    

    Az extensionBundle elemre azért van szükség, mert az 1.x verzió után a kötések külső csomagként maradnak fenn. További információ: Bővítménykötegek.

  4. Frissítse a local.settings.json fájlt úgy, hogy legalább a következő elemeket tartalmazza:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "node"
        }
    }
    

    A AzureWebJobsStorage beállítás lehet az Azurite Storage 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 slotok használatával történő frissítéssel.

Frissítés pontok nélkül

A legegyszerűbb módja a v4.x verzióra való frissítésnek, ha az Azure-beli függvényalkalmazásában az alkalmazásbeállítást FUNCTIONS_EXTENSION_VERSION értékről ~4 értékre állítja. 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 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>

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 slotban, átválthatja az alkalmazást és az új verzió beállításait éles környezetbe. Ehhez a felcseréléshez be kell állítani WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 az éles pontban. A beállítás hozzáadásának módja befolyásolja a frissítéshez szükséges leállási időt.

Standard frissítés

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

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

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

    az functionapp config appsettings set --settings WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0  -g <RESOURCE_GROUP_NAME>  -n <APP_NAME> 
    

    Ebben a példában cserélje le <APP_NAME> a függvényalkalmazás nevére és <RESOURCE_GROUP_NAME> az erőforráscsoport nevére. Ez a parancs az éles pontban futó alkalmazás újraindítását okozza.

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

    az functionapp config appsettings set --settings WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 -g <RESOURCE_GROUP_NAME>  -n <APP_NAME> --slot <SLOT_NAME>
    
  3. A következő paranccsal módosítsa FUNCTIONS_EXTENSION_VERSION és frissítse az előkészítési pontot az új futtatókörnyezeti verzióra:

    az functionapp config appsettings set --settings FUNCTIONS_EXTENSION_VERSION=~4 -g <RESOURCE_GROUP_NAME>  -n <APP_NAME> --slot <SLOT_NAME>
    
  4. A Functions-futtatókörnyezet 4.x verziójához .NET 6 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 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>
    

    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 előkészítési szakasz éles környezetbe való áthelyezése érdekében használja a következő parancsot:

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

Minimális állásidő-frissítés

Az alkalmazás állásidejének minimalizálása érdekében átviheti a WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS beállítást az előkészítési környezetből az éles környezetbe. Ezután felcserélheti a frissített verziót egy előre elkészített előkészítési pontról.

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

    az functionapp config appsettings set --settings WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 -g <RESOURCE_GROUP_NAME>  -n <APP_NAME> --slot <SLOT_NAME>
    
  2. Az alábbi parancsokkal felcserélheti a pontot az új beállítással az éles környezetbe, és ezzel egyidejűleg visszaállíthatja a verzióbeállítást az előkészítési ponton.

    az functionapp deployment slot swap -g <RESOURCE_GROUP_NAME>  -n <APP_NAME> --slot <SLOT_NAME> --target-slot production
    az functionapp config appsettings set --settings FUNCTIONS_EXTENSION_VERSION=~3 -g <RESOURCE_GROUP_NAME>  -n <APP_NAME> --slot <SLOT_NAME>
    

    Az előkészítési pont hibái a felcserélés és az előkészítéskor visszaállított futtatókörnyezeti verzió közötti időszakban jelenhetnek meg. Ez a hiba azért fordulhat elő, mert ha a WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 csak a helyettesítés során van jelen az előkészítési környezetben, az eltávolítja a FUNCTIONS_EXTENSION_VERSION beállítást az előkészítési környezetből. Verzióbeállítás nélkül a foglalat rossz helyzetben van. A staging slotban lévő verzió frissítése közvetlenül a csere után vissza kell hoznia a slotot egy jó állapotba, és szükség esetén vissza kell állítania a módosításokat. Azonban a felcserélés visszaállításához el kell távolítania WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0-t a termelésből még a visszacserélés előtt, hogy megelőzze az előkészítés során tapasztalt hibák éles környezetben való megjelenését. Ez a változás a produkciós környezetben újraindítást eredményezne.

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

    az functionapp config appsettings set --settings WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 -g <RESOURCE_GROUP_NAME>  -n <APP_NAME> --slot <SLOT_NAME>
    

    Ezen a ponton mindkét hely be van WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 állítva.

  4. A következő paranccsal módosítsa FUNCTIONS_EXTENSION_VERSION és frissítse az előkészítési pontot az új futtatókörnyezeti verzióra:

    az functionapp config appsettings set --settings FUNCTIONS_EXTENSION_VERSION=~4 -g <RESOURCE_GROUP_NAME>  -n <APP_NAME> --slot <SLOT_NAME>
    
  5. A Functions-futtatókörnyezet 4.x verziójához .NET 6 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 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>
    

    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 melegített staging slot éles környezetre cseréléséhez használja az alábbi parancsot:

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

Viselkedésváltozások az 1.x verzió után

Ez a szakasz az 1.x verzió után végrehajtott módosításokat ismerteti mind az eseményindítók, mind a kötések viselkedésében, valamint az alapvető Functions-funkciókban és -viselkedésekben.

A triggerek és kötések változásai

A 2.x verziótól kezdve telepítenie kell az alkalmazás függvényei által használt egyes triggerekhez és kötésekhez tartozó bővítményeket. A HTTP és az időzítő eseményindítók az egyetlen kivételek, amelyek nem igényelnek bővítményt. További információ: Kötésbővítmények regisztrálása és telepítése.

A függvény function.json vagy attribútumaiban is van néhány változás a verziók között. Az Event Hubs path tulajdonság most már például eventHubName. Az egyes kötések dokumentációjának hivatkozásait a meglévő kötéstáblában találja.

Funkciók és működés változásai

Az 1.x verzió után néhány funkció el lett távolítva, frissítve vagy lecserélve. Ez a szakasz az 1.x verzió használata után a későbbi verziókban megjelenő módosításokat ismerteti.

A 2.x verzióban a következő módosítások történtek:

  • A HTTP-végpontok hívásához használt kulcsokat a rendszer mindig titkosítva tárolja az Azure Blob Storage-ban. Az 1.x verzióban a kulcsok alapértelmezés szerint az Azure Filesban lettek tárolva. Amikor egy alkalmazást az 1.x verzióról a 2.x verzióra migrál, az Azure Filesban lévő meglévő titkos kódok alaphelyzetbe állnak.

  • A 2.x-es verziójú futtatókörnyezet nem tartalmaz beépített támogatást a webhookszolgáltatók számára. Ez a módosítás a teljesítmény javítása érdekében történt. Továbbra is használhat HTTP-eseményindítókat végpontként a webhookokhoz.

  • A monitorozás javítása érdekében a webjobs-irányítópult a portálon, amely a AzureWebJobsDashboard beállítást használta, a Azure-alkalmazás Insightsra cserélődik, amely 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. Amikor létrehoz egy függvényalkalmazást, ki kell választania egy futtatókörnyezetet az alkalmazáshoz. A futtatókörnyezet vermet az FUNCTIONS_WORKER_RUNTIME alkalmazásbeállításokban megadott érték határozza meg. Ez a követelmény a lábnyom és az indítási idő javítása érdekében lett hozzáadva. Helyi fejlesztéskor ezt a beállítást is be kell foglalnia a local.settings.json fájlba.

  • Az App Service-csomagban lévő függvények alapértelmezett időtúllépése 30 percre módosul. Az időtúllépést manuálisan korlátlanra módosíthatja a host.json függvényTimeout beállításával.

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

  • A .NET 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 MaxDurationMs, MinDurationMs, é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