Bagikan melalui


Memigrasikan aplikasi dari Azure Functions versi 3.x ke versi 4.x

Azure Functions versi 4.x memiliki kompatibilitas yang sangat baik ke versi 3.x. Sebagian besar aplikasi harus bermigrasi dengan aman ke 4.x tanpa memerlukan perubahan kode yang signifikan. Untuk informasi selengkapnya tentang versi runtime Functions, lihat Gambaran umum versi runtime Azure Functions.

Penting

Mulai 13 Desember 2022, aplikasi fungsi yang berjalan pada versi 2.x dan 3.x dari runtime Azure Functions telah mencapai akhir dukungan perpanjangan. Untuk informasi selengkapnya, lihat Versi yang dihentikan.

Artikel ini memandu Anda melalui proses migrasi aplikasi fungsi anda dengan aman untuk berjalan pada runtime Functions versi 4.x. Karena instruksi migrasi proyek bergantung pada bahasa, pastikan untuk memilih bahasa pengembangan Anda dari pemilih di bagian atas artikel.

Mengidentifikasi aplikasi fungsi untuk dimigrasikan

Gunakan skrip PowerShell berikut untuk menghasilkan daftar aplikasi fungsi di langganan Anda yang saat ini menargetkan versi 2.x atau 3.x:

$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

Pilih versi .NET target Anda

Pada versi 3.x dari runtime Functions, aplikasi fungsi C# Anda menargetkan .NET Core 3.1 menggunakan model dalam proses atau .NET 5 menggunakan model pekerja yang terisolasi.

Saat memigrasikan aplikasi fungsi, Anda memiliki kesempatan untuk memilih versi target .NET. Anda dapat memperbarui proyek C# Anda ke salah satu versi .NET berikut yang didukung oleh Functions versi 4.x:

Versi .NET Jenis rilis Kebijakan Dukungan Resmi .NET Model proses fungsi1,2
.NET 10 LTS (akhir masa dukungan 14 November 2028) Model pekerja terisolasi
.NET 9 STS (akhir dukungan 10 November 2026)3 Model pekerja terisolasi
.NET 8 LTS (akhir masa dukungan 10 November 2026) Model pekerja yang terisolasi
Model dalam proses2
.NET Framework 4.8 Lihat kebijakan Model pekerja terisolasi

1 Model pekerja terisolasi mendukung versi Dukungan Jangka Panjang (LTS) dan Dukungan Jangka Standar (STS) .NET, serta .NET Framework. Model in-process hanya mendukung rilis LTS dari .NET, dan dukungannya berakhir hingga .NET 8. Untuk perbandingan fitur dan fungsionalitas lengkap antara kedua model, lihat Perbedaan antara proses in-process dan proses pengisolasi pekerja .NET Azure Functions.

2 Dukungan berakhir untuk model dalam proses pada 10 November 2026. Untuk informasi selengkapnya, lihat pengumuman dukungan ini. Untuk dukungan penuh berkelanjutan, Anda harus memigrasikan aplikasi Anda ke model pekerja yang terisolasi.

3 .NET 9 sebelumnya memiliki tanggal akhir dukungan yang diharapkan 12 Mei 2026. Selama jendela layanan .NET 9, tim .NET memperluas dukungan untuk versi STS menjadi 24 bulan, dimulai dengan .NET 9. Untuk informasi selengkapnya, lihat posting blog.

Petunjuk / Saran

Sebaiknya perbarui ke .NET 8 pada model pekerja yang terisolasi. .NET 8 adalah versi yang dirilis sepenuhnya dengan jendela dukungan terpanjang dari .NET.

Meskipun Anda dapat memilih untuk menggunakan model dalam proses, kami tidak merekomendasikan pendekatan ini jika Anda dapat menghindarinya. Dukungan akan berakhir untuk model dalam proses pada 10 November 2026, jadi Anda harus pindah ke model pekerja yang terisolasi sebelum itu. Melakukannya saat bermigrasi ke versi 4.x akan mengurangi total upaya yang diperlukan, dan model pekerja yang terisolasi akan memberikan manfaat tambahan aplikasi Anda, termasuk kemampuan untuk lebih mudah menargetkan versi .NET di masa mendatang. Jika Anda pindah ke model pekerja yang terisolasi, Asisten Peningkatan .NET juga dapat menangani banyak perubahan kode yang diperlukan untuk Anda.

Panduan ini tidak menyajikan contoh spesifik untuk .NET 10 (pratinjau) atau .NET 9. Jika Anda perlu menargetkan salah satu versi tersebut, Anda dapat menyesuaikan contoh .NET 8.

Penyiapan untuk migrasi

Jika Anda belum melakukannya, identifikasi daftar aplikasi yang perlu dimigrasikan di Langganan Azure Anda saat ini dengan menggunakan Azure PowerShell.

Sebelum memigrasikan aplikasi ke versi 4.x dari runtime Functions, Anda harus melakukan tugas berikut:

  1. Tinjau daftar perubahan penting antara 3.x dan 4.x.
  2. Selesaikan langkah-langkah dalam Memigrasikan proyek lokal Anda untuk memigrasikan proyek lokal Anda ke versi 4.x.
  3. Setelah memigrasikan proyek Anda, uji sepenuhnya aplikasi secara lokal menggunakan versi 4.x dari Azure Functions Core Tools.
  4. Jalankan validator pra-peningkatan pada aplikasi yang dihosting di Azure, dan atasi masalah yang diidentifikasi.
  5. Perbarui aplikasi fungsi Anda di Azure ke versi baru. Jika Anda perlu meminimalkan waktu henti, pertimbangkan untuk menggunakan penahapan slot untuk menguji dan memverifikasi aplikasi Anda yang sudah dimigrasikan di Azure pada versi runtime baru. Anda kemudian dapat menyebarkan aplikasi dengan pengaturan versi yang diperbarui ke slot produksi. Untuk informasi selengkapnya, lihat Memperbarui menggunakan slot.
  6. Terbitkan proyek yang dimigrasikan ke aplikasi fungsi yang diperbarui.

Saat Anda menggunakan Visual Studio untuk menerbitkan proyek versi 4.x ke aplikasi fungsi yang ada pada versi yang lebih rendah, Anda diminta untuk mengizinkan Visual Studio memperbarui aplikasi fungsi ke versi 4.x selama penyebaran. Pembaruan ini menggunakan proses yang sama yang ditentukan dalam Pembaruan tanpa slot.

Memigrasikan proyek lokal Anda

Instruksi peningkatan bergantung pada bahasa. Jika Anda tidak melihat bahasa Anda, pilih dari pemilih di bagian atas artikel.

Pilih tab yang cocok dengan versi target .NET Anda dan model proses yang diinginkan (dalam proses atau proses pekerja terisolasi).

Petunjuk / Saran

Jika Anda pindah ke versi LTS atau STS .NET menggunakan model pekerja yang terisolasi, Asisten Peningkatan .NET dapat digunakan untuk secara otomatis membuat banyak perubahan yang disebutkan di bagian berikut.

File proyek

Contoh berikut adalah .csproj file proyek yang menggunakan .NET Core 3.1 pada versi 3.x:

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

Gunakan salah satu prosedur berikut untuk memperbarui file XML ini agar berjalan di Functions versi 4.x:

Langkah-langkah ini mengasumsikan proyek C# lokal; jika aplikasi Anda menggunakan skrip C# (file.csx ), Anda harus mengonversi ke model proyek sebelum melanjutkan.

Perubahan berikut diperlukan dalam file proyek XML .csproj :

  1. Atur nilai .PropertyGroup TargetFramework ke net8.0.

  2. Atur nilai .PropertyGroup AzureFunctionsVersion ke v4.

  3. Tambahkan elemen berikut OutputType ke PropertyGroup:

    <OutputType>Exe</OutputType>
    
  4. Dalam ItemGroup. PackageReference daftar, ganti referensi paket ke Microsoft.NET.Sdk.Functions dengan referensi berikut:

      <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" />
    

    Catat referensi apa pun kepada paket lain di dalam ruang nama Microsoft.Azure.WebJobs.*. Anda akan mengganti paket ini di langkah selanjutnya.

  5. Tambahkan ItemGroup baru berikut ini:

    <ItemGroup>
      <Using Include="System.Threading.ExecutionContext" Alias="ExecutionContext"/>
    </ItemGroup>
    

Setelah Anda membuat perubahan ini, proyek yang diperbarui akan terlihat seperti contoh berikut:

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

Perubahan paket dan namespace

Berdasarkan model yang Anda migrasikan, Anda mungkin perlu memperbarui atau mengubah paket referensi aplikasi Anda. Saat mengadopsi paket target, Anda kemudian perlu memperbarui namespace penggunaan pernyataan dan beberapa jenis yang Anda referensikan. Anda dapat melihat efek perubahan namespace ini pada using pernyataan dalam contoh templat pemicu HTTP nanti di artikel ini.

Jika Anda belum melakukannya, perbarui proyek Anda untuk mereferensikan versi stabil terbaru dari:

Bergantung pada pemicu dan pengikatan yang digunakan aplikasi Anda, aplikasi Anda mungkin perlu mereferensikan serangkaian paket yang berbeda. Tabel berikut ini memperlihatkan penggantian untuk beberapa ekstensi yang paling umum digunakan:

Skenario Perubahan pada referensi paket
Pemicu pengatur waktu Menambahkan
Microsoft.Azure.Functions.Worker.Extensions.Timer
Pengikatan penyimpanan Menggantikan
Microsoft.Azure.WebJobs.Extensions.Storage
dengan
Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs,
Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues, dan
Microsoft.Azure.Functions.Worker.Extensions.Tables
Pengikatan blob Ganti referensi ke
Microsoft.Azure.WebJobs.Extensions.Storage.Blobs
dengan versi terbaru
Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs
Pengikatan antrean Ganti referensi ke
Microsoft.Azure.WebJobs.Extensions.Storage.Queues
dengan versi terbaru
Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues
Pengikatan tabel Ganti referensi ke
Microsoft.Azure.WebJobs.Extensions.Tables
dengan versi terbaru
Microsoft.Azure.Functions.Worker.Extensions.Tables
Penghubung Cosmos DB Ganti referensi ke
Microsoft.Azure.WebJobs.Extensions.CosmosDB
dan/atau
Microsoft.Azure.WebJobs.Extensions.DocumentDB
dengan versi terbaru
Microsoft.Azure.Functions.Worker.Extensions.CosmosDB
Pengikatan Service Bus Ganti referensi ke
Microsoft.Azure.WebJobs.Extensions.ServiceBus
dengan versi terbaru
Microsoft.Azure.Functions.Worker.Extensions.ServiceBus
Pengikatan Azure Event Hubs Ganti referensi ke
Microsoft.Azure.WebJobs.Extensions.EventHubs
dengan versi terbaru
Microsoft.Azure.Functions.Worker.Extensions.EventHubs
Pengikatan Event Grid Ganti referensi ke
Microsoft.Azure.WebJobs.Extensions.EventGrid
dengan versi terbaru
Microsoft.Azure.Functions.Worker.Extensions.EventGrid
Penghubung Layanan SignalR Ganti referensi ke
Microsoft.Azure.WebJobs.Extensions.SignalRService
dengan versi terbaru
Microsoft.Azure.Functions.Worker.Extensions.SignalRService
Fungsi Tahan Lama Ganti referensi ke
Microsoft.Azure.WebJobs.Extensions.DurableTask
dengan versi terbaru
Microsoft.Azure.Functions.Worker.Extensions.DurableTask
Fungsi Tahan Lama
(Penyedia penyimpanan SQL)
Ganti referensi ke
Microsoft.DurableTask.SqlServer.AzureFunctions
dengan versi terbaru
Microsoft.Azure.Functions.Worker.Extensions.DurableTask.SqlServer
Fungsi Tahan Lama
(Penyedia penyimpanan netherite)
Ganti referensi ke
Microsoft.Azure.DurableTask.Netherite.AzureFunctions
dengan versi terbaru
Microsoft.Azure.Functions.Worker.Extensions.DurableTask.Netherite
Pengikatan SendGrid Ganti referensi ke
Microsoft.Azure.WebJobs.Extensions.SendGrid
dengan versi terbaru
Microsoft.Azure.Functions.Worker.Extensions.SendGrid
Pengikatan Kafka Ganti referensi ke
Microsoft.Azure.WebJobs.Extensions.Kafka
dengan versi terbaru
Microsoft.Azure.Functions.Worker.Extensions.Kafka
Pengikatan RabbitMQ Ganti referensi ke
Microsoft.Azure.WebJobs.Extensions.RabbitMQ
dengan versi terbaru
Microsoft.Azure.Functions.Worker.Extensions.RabbitMQ
Injeksi dependensi
dan konfigurasi inisial
Hapus referensi ke
Microsoft.Azure.Functions.Extensions
(Model pekerja yang terisolasi menyediakan fungsionalitas ini secara default.)

Lihat Pengikatan yang didukung untuk daftar lengkap ekstensi yang perlu dipertimbangkan, dan lihat dokumentasi setiap ekstensi untuk instruksi penginstalan lengkap untuk model proses yang terisolasi. Pastikan untuk menginstal versi stabil terbaru dari paket apa pun yang Anda targetkan.

Petunjuk / Saran

Setiap perubahan pada versi ekstensi selama proses ini mungkin mengharuskan Anda untuk memperbarui file Anda host.json juga. Pastikan untuk membaca dokumentasi setiap ekstensi yang Anda gunakan. Misalnya, ekstensi Bus Layanan memiliki perubahan yang merusak dalam struktur antara versi 4.x dan 5.x. Untuk informasi selengkapnya, lihat Pengikatan Azure Service Bus pada Azure Functions.

Aplikasi model pekerja terisolasi Anda tidak boleh mereferensikan paket apa pun di namespace Microsoft.Azure.WebJobs.* atau Microsoft.Azure.Functions.Extensions. Jika Anda memiliki referensi yang tersisa untuk ini, referensi tersebut harus dihapus.

Petunjuk / Saran

Aplikasi Anda mungkin juga bergantung pada jenis Azure SDK, baik sebagai bagian dari pemicu dan pengikatan Anda atau sebagai dependensi mandiri. Anda harus mengambil kesempatan ini untuk memperbarui ini juga. Versi terbaru ekstensi Functions berfungsi dengan versi terbaru Azure SDK untuk .NET, hampir semua paket yang merupakan formulir Azure.*.

file Program.cs

Saat bermigrasi untuk berjalan dalam proses pekerja yang terisolasi, Anda harus menambahkan file program.cs berikut ke proyek Anda:

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();

Contoh ini mencakup integrasi ASP.NET Core untuk meningkatkan performa dan menyediakan model pemrograman yang familier saat aplikasi Anda menggunakan pemicu HTTP. Jika Anda tidak berniat menggunakan pemicu HTTP, Anda dapat mengganti panggilan ke ConfigureFunctionsWebApplication dengan panggilan ke ConfigureFunctionsWorkerDefaults. Jika Anda melakukannya, Anda dapat menghapus referensi ke Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore dari file proyek Anda. Namun, untuk performa terbaik, bahkan untuk fungsi dengan jenis pemicu lainnya, Anda harus menyimpan FrameworkReference ke ASP.NET Core.

File Program.cs menggantikan file apa pun yang memiliki FunctionsStartup atribut , yang biasanya merupakan file Startup.cs . Di tempat-tempat di mana kode Anda FunctionsStartup akan mereferensikan IFunctionsHostBuilder.Services, Anda dapat menambahkan pernyataan dalam .ConfigureServices() metode HostBuilder di Program.cs Anda. Untuk mempelajari selengkapnya tentang bekerja dengan Program.cs, lihat Mulai dan konfigurasi dalam panduan model pekerja yang terisolasi.

Contoh Program.cs default yang dijelaskan sebelumnya termasuk penyiapan Application Insights. Di Program.cs, Anda juga harus mengonfigurasi pemfilteran log apa pun yang harus berlaku untuk log yang berasal dari kode di proyek Anda. Dalam model pekerja yang terisolasi, file host.json hanya mengontrol peristiwa yang dipancarkan oleh runtime host Functions. Jika Anda tidak mengonfigurasi aturan pemfilteran di Program.cs, Anda mungkin melihat perbedaan tingkat log yang ada untuk berbagai kategori dalam telemetri Anda.

Meskipun Anda dapat mendaftarkan sumber konfigurasi kustom sebagai bagian dari HostBuilder, ini juga hanya berlaku untuk kode dalam proyek Anda. Platform ini juga memerlukan konfigurasi pemicu dan pengikatan, dan ini harus disediakan melalui pengaturan aplikasi, referensi Key Vault, atau fitur referensi App Configuration .

Setelah memindahkan semuanya dari file yang ada FunctionsStartup ke file Program.cs , Anda dapat menghapus FunctionsStartup atribut dan kelas tempat atribut tersebut diterapkan.

file local.settings.json

File local.settings.json hanya digunakan saat berjalan secara lokal. Untuk informasi, lihat file pengaturan lokal.

Saat Anda bermigrasi ke versi 4.x, pastikan file local.settings.json Anda memiliki setidaknya elemen berikut:

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

Catatan

Saat bermigrasi dari menjalankan proses dalam ke menjalankan proses pekerja yang terisolasi, Anda perlu mengubah nilai FUNCTIONS_WORKER_RUNTIME menjadi "dotnet-isolated".

file host.json

Tidak ada perubahan yang diperlukan pada file Anda host.json . Namun, jika konfigurasi Application Insights Anda pada file ini berasal dari proyek model yang sedang berjalan, Anda mungkin ingin melakukan perubahan lain dalam file Anda Program.cs. File host.json hanya mengontrol pengelogan dari runtime host Functions, dan dalam model pekerja yang terisolasi, beberapa log ini berasal dari aplikasi Anda secara langsung, memberi Anda lebih banyak kontrol. Lihat Mengelola tingkat log dalam model pekerja yang terisolasi untuk detail tentang cara memfilter log ini.

Perubahan nama kelas

Beberapa kelas utama mengubah nama antar versi. Perubahan ini adalah hasil dari perubahan API .NET atau perbedaan antara proses dalam proses dan proses pekerja yang terisolasi. Tabel berikut menunjukkan kelas .NET kunci yang digunakan oleh Functions yang dapat berubah saat bermigrasi:

.NET Core 3.1 .NET 5 .NET 8
FunctionName (atribut) Function (atribut) Function (atribut)
ILogger ILogger ILogger, ILogger<T>
HttpRequest HttpRequestData HttpRequestData, HttpRequest (menggunakan integrasi ASP.NET Core)
IActionResult HttpResponseData HttpResponseData, IActionResult (menggunakan integrasi ASP.NET Core)
FunctionsStartup (atribut) Program.cs Gunakan sebagai gantinya Program.cs Gunakan sebagai gantinya

Mungkin juga ada perbedaan nama kelas dalam pengikatan. Untuk informasi selengkapnya, lihat artikel referensi untuk pengikatan tertentu.

Perubahan kode lainnya

Bagian ini menyoroti perubahan kode lain untuk dipertimbangkan saat Anda menjalani proses migrasi. Perubahan ini tidak diperlukan oleh semua aplikasi, tetapi Anda harus mengevaluasi apakah ada yang relevan dengan skenario Anda. Pastikan untuk memeriksa Perubahan penting antara 3.x dan 4.x untuk perubahan lain yang mungkin perlu Anda terapkan pada proyek Anda.

Serialisasi JSON

Secara default, model pekerja yang terisolasi menggunakan System.Text.Json untuk serialisasi JSON. Untuk menyesuaikan opsi serializer atau beralih ke JSON.NET (Newtonsoft.Json), lihat Menyesuaikan serialisasi JSON.

Tingkat pencatatan dan penyaringan di Application Insights

Log dapat dikirim ke Application Insights dari runtime host Functions dan kode dalam proyek Anda. host.json memungkinkan Anda mengonfigurasi aturan untuk pengelogan host, tetapi untuk mengontrol log yang berasal dari kode Anda, Anda perlu mengonfigurasi aturan pemfilteran sebagai bagian dari Program.cs Anda. Lihat Mengelola tingkat log dalam model pekerja yang terisolasi untuk detail tentang cara memfilter log ini.

Templat pemicu HTTP

Perbedaan antara proses dalam proses dan proses pekerja yang terisolasi dapat dilihat dalam fungsi yang dipicu HTTP. Templat pemicu HTTP untuk versi 3.x (dalam proses) terlihat seperti contoh berikut:

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);
        }
    }
}

Templat pemicu HTTP untuk versi yang dimigrasikan terlihat seperti contoh berikut:

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"]}!");
        }
    }
}

Untuk memperbarui proyek Anda ke Azure Functions 4.x:

  1. Perbarui penginstalan lokal Alat Utama Azure Functions ke versi 4.x.

  2. Perbarui paket ekstensi Azure Functions aplikasi Anda ke 2.x atau lebih tinggi. Untuk informasi selengkapnya, lihat melanggar perubahan.

  1. Jika diperlukan, pindahkan ke salah satu versi Java yang didukung pada versi 4.x.

  2. Perbarui file aplikasi POM.xml untuk mengubah FUNCTIONS_EXTENSION_VERSION pengaturan ke ~4, seperti dalam contoh berikut:

    <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. Jika diperlukan, pindahkan ke salah satu versi Node.js yang didukung pada versi 4.x.
  1. Ambil kesempatan ini untuk meningkatkan ke PowerShell 7.2, yang direkomendasikan. Untuk informasi selengkapnya, lihat Versi PowerShell.
  1. Jika Anda menggunakan Python 3.6, pindah ke salah satu versi yang didukung.

Menjalankan validator sebelum peningkatan

Azure Functions menyediakan validator pra-peningkatan untuk membantu Anda mengidentifikasi potensi masalah saat memigrasikan aplikasi fungsi ke 4.x. Untuk menjalankan validator pra-peningkatan:

  1. Di portal Microsoft Azure, navigasikan ke aplikasi fungsi Anda.

  2. Buka halaman Diagnosis dan selesaikan masalah.

  3. Di Diagnostik Aplikasi Fungsi, ketik Functions 4.x Pre-Upgrade Validator lalu pilih dari daftar.

  4. Setelah validasi selesai, tinjau rekomendasi dan atasi masalah apa pun di aplikasi Anda. Jika perlu membuat perubahan pada aplikasi Anda, pastikan untuk memvalidasi perubahan terhadap versi 4.x dari runtime Fungsi, baik secara lokal menggunakan Alat Utama Azure Functions v4 atau dengan menggunakan slot staging.

Memperbarui aplikasi fungsi Anda di Azure

Anda perlu memperbarui runtime host aplikasi fungsi di Azure ke versi 4.x sebelum menerbitkan proyek yang dimigrasikan. Versi runtime yang digunakan oleh host Functions dikontrol oleh FUNCTIONS_EXTENSION_VERSION pengaturan aplikasi, tetapi dalam beberapa kasus pengaturan lain juga harus diperbarui. Perubahan kode dan perubahan pada pengaturan aplikasi mengharuskan aplikasi fungsi Anda dimulai ulang.

Cara term mudah adalah memperbarui tanpa slot lalu menerbitkan ulang proyek aplikasi Anda. Anda juga dapat meminimalkan waktu henti di aplikasi dan menyederhanakan pemutaran kembali dengan memperbarui menggunakan slot.

Memperbarui tanpa slot

Cara paling sederhana untuk memperbarui ke v4.x adalah dengan mengatur FUNCTIONS_EXTENSION_VERSION pengaturan aplikasi ke ~4 pada aplikasi fungsi Anda di Azure. Anda harus mengikuti prosedur yang berbeda pada situs dengan slot.

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

Anda juga harus mengatur pengaturan lain, yang berbeda antara Windows dan Linux.

Saat berjalan di Windows, Anda juga perlu mengaktifkan .NET 8.0, yang diperlukan oleh versi 4.x dari runtime.

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

.NET 6 diperlukan untuk aplikasi fungsi dalam bahasa apa pun yang berjalan di Windows.

Dalam contoh ini, ganti <APP_NAME> dengan nama aplikasi fungsi Anda dan <RESOURCE_GROUP_NAME> dengan nama grup sumber daya.

Sekarang Anda dapat menerbitkan ulang proyek aplikasi yang telah dimigrasikan untuk berjalan pada versi 4.x.

Memperbarui menggunakan slot

Menggunakan slot penyebaran adalah cara yang baik untuk memperbarui aplikasi fungsi Anda ke runtime v4.x dari versi sebelumnya. Dengan menggunakan slot staging, Anda dapat menjalankan aplikasi pada versi runtime baru di slot staging dan beralih ke produksi setelah verifikasi. Slot juga menyediakan cara untuk meminimalkan waktu henti selama pembaruan. Jika Anda perlu meminimalkan waktu henti, ikuti langkah-langkah dalam Pembaruan dengan waktu henti minimum.

Setelah Anda memverifikasi aplikasi di slot yang telah diperbarui, Anda dapat mengalihkan aplikasi dan pengaturan versi baru ke produksi. Pertukaran ini memerlukan pengaturan WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 di slot produksi. Cara Anda menambahkan pengaturan ini memengaruhi jumlah waktu henti yang diperlukan untuk pembaruan.

Pembaruan standar

Jika aplikasi fungsi yang mendukung slot Anda dapat menangani waktu henti saat restart penuh, Anda dapat memperbarui pengaturan WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS langsung di slot produksi. Karena mengubah pengaturan ini secara langsung di slot produksi menyebabkan mulai ulang yang memengaruhi ketersediaan, pertimbangkan untuk melakukan perubahan ini saat lalu lintas berkurang. Anda dapat mengganti versi yang diperbarui dari slot penahapan.

Cmdlet PowerShell Update-AzFunctionAppSetting saat ini tidak mendukung slot. Anda harus menggunakan Azure CLI atau portal Microsoft Azure.

  1. Gunakan perintah berikut untuk mengatur WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 di slot produksi:

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

    Dalam contoh ini, ganti <APP_NAME> dengan nama aplikasi fungsi Anda dan <RESOURCE_GROUP_NAME> dengan nama grup sumber daya. Perintah ini menyebabkan aplikasi yang berjalan di slot produksi untuk memulai ulang.

  2. Gunakan perintah berikut untuk juga mengatur WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS di slot staging:

    az functionapp config appsettings set --settings WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 -g <RESOURCE_GROUP_NAME>  -n <APP_NAME> --slot <SLOT_NAME>
    
  3. Gunakan perintah berikut untuk mengubah FUNCTIONS_EXTENSION_VERSION dan memperbarui slot penahapan ke versi runtime baru:

    az functionapp config appsettings set --settings FUNCTIONS_EXTENSION_VERSION=~4 -g <RESOURCE_GROUP_NAME>  -n <APP_NAME> --slot <SLOT_NAME>
    
  4. Versi 4.x dari runtime Functions memerlukan .NET 6 di Windows. Di Linux, aplikasi .NET juga harus diperbarui ke .NET 6. Gunakan perintah berikut sehingga runtime dapat berjalan pada .NET 6:

    Saat berjalan di Windows, Anda juga perlu mengaktifkan .NET 8.0, yang diperlukan oleh versi 4.x dari runtime.

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

    .NET 6 diperlukan untuk aplikasi fungsi dalam bahasa apa pun yang berjalan di Windows.

    Dalam contoh ini, ganti <APP_NAME> dengan nama aplikasi fungsi Anda dan <RESOURCE_GROUP_NAME> dengan nama grup sumber daya.

  5. Jika proyek kode Anda memerlukan pembaruan apa pun untuk dijalankan pada versi 4.x, terapkan pembaruan tersebut ke slot staging sekarang.

  6. Konfirmasikan bahwa aplikasi fungsi Anda berjalan dengan benar di lingkungan staging yang diperbarui sebelum melakukan pertukaran.

  7. Gunakan perintah berikut untuk menukar slot penahapan yang diperbarui ke produksi:

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

Pembaruan dengan waktu henti minimal

Untuk meminimalkan waktu henti di aplikasi produksi, Anda dapat menukar pengaturan WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS dari slot staging ke slot produksi. Setelah itu, Anda dapat bertukar dalam versi yang diperbarui dari slot penahapan yang sudah ada sebelumnya.

  1. Gunakan perintah berikut untuk mengatur WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 di slot staging:

    az functionapp config appsettings set --settings WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 -g <RESOURCE_GROUP_NAME>  -n <APP_NAME> --slot <SLOT_NAME>
    
  2. Gunakan perintah berikut untuk menukar slot dengan pengaturan baru sehingga masuk ke dalam produksi, dan sekaligus mengembalikan pengaturan versi di slot staging.

    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>
    

    Anda mungkin melihat kesalahan dari slot staging selama waktu antara versi pertukaran dan runtime yang dipulihkan saat staging. Kesalahan ini dapat terjadi karena selama pertukaran, hanya memiliki WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 di penahapan menyebabkan pengaturan FUNCTIONS_EXTENSION_VERSION di penahapan dihapus. Tanpa pengaturan versi, slot Anda berada dalam kondisi yang buruk. Memperbarui versi di slot staging tepat setelah pertukaran akan mengembalikan slot ke kondisi yang baik, dan Anda dapat membatalkan perubahan jika diperlukan. Namun, setiap rollback pertukaran juga mengharuskan Anda untuk langsung menghapus WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 dari produksi sebelum pertukaran kembali untuk mencegah kesalahan yang sama dalam produksi yang terlihat pada staging. Perubahan dalam pengaturan produksi ini kemudian akan menyebabkan mulai ulang.

  3. Gunakan perintah berikut untuk mengatur lagi WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 di slot staging:

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

    Pada titik ini, kedua slot memiliki WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 yang ditetapkan.

  4. Gunakan perintah berikut untuk mengubah FUNCTIONS_EXTENSION_VERSION dan memperbarui slot penahapan ke versi runtime baru:

    az functionapp config appsettings set --settings FUNCTIONS_EXTENSION_VERSION=~4 -g <RESOURCE_GROUP_NAME>  -n <APP_NAME> --slot <SLOT_NAME>
    
  5. Versi 4.x dari runtime Functions memerlukan .NET 6 di Windows. Di Linux, aplikasi .NET juga harus diperbarui ke .NET 6. Gunakan perintah berikut sehingga runtime dapat berjalan pada .NET 6:

    Saat berjalan di Windows, Anda juga perlu mengaktifkan .NET 8.0, yang diperlukan oleh versi 4.x dari runtime.

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

    .NET 6 diperlukan untuk aplikasi fungsi dalam bahasa apa pun yang berjalan di Windows.

    Dalam contoh ini, ganti <APP_NAME> dengan nama aplikasi fungsi Anda dan <RESOURCE_GROUP_NAME> dengan nama grup sumber daya.

  6. Jika proyek kode Anda memerlukan pembaruan apa pun untuk dijalankan pada versi 4.x, terapkan pembaruan tersebut ke slot staging sekarang.

  7. Konfirmasikan bahwa aplikasi fungsi Anda berjalan dengan benar di lingkungan staging yang diperbarui sebelum melakukan pertukaran.

  8. Gunakan perintah berikut untuk menukar slot penahapan yang sudah diperbarui dan dipersiapkan ke produksi:

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

Menghentikan perubahan antara 3.x dan 4.x

Berikut ini adalah perubahan utama yang harus diperhatikan sebelum meningkatkan aplikasi 3.x ke 4.x, termasuk perubahan khusus bahasa. Untuk daftar lengkapnya, lihat masalah Azure Functions GitHub berlabel Menghentikan Perubahan: Disetujui.

Jika Anda tidak melihat bahasa pemrograman Anda, pilihlah dari bagian atas laman.

Waktu Operasi

  • Proksi Azure Functions adalah fitur dalam versi 1.x hingga 3.x dari runtime Azure Functions. Fitur ini tidak didukung di versi 4.x. Untuk informasi selengkapnya, lihat REST API Tanpa Server menggunakan Azure Functions.

  • Log ke Azure Storage menggunakan AzureWebJobsDashboard tidak lagi didukung dalam 4.x. Sebagai gantinya sebaiknya Anda menggunakan Application Insights. (#1923)

  • Azure Functions 4.x kini memberlakukan persyaratan versi minimum untuk ekstensi. Perbarui ke versi terbaru ekstensi yang terpengaruh. Untuk bahasa non-.NET, perbarui ke bundel ekstensi versi 2.x atau yang lebih baru. (#1987)

  • Batas waktu default dan maksimum sekarang diberlakukan di versi 4.x untuk aplikasi fungsi yang berjalan di Linux dalam rencana Konsumsi. (#1915)

  • Azure Functions 4.x menggunakan Azure.Identity dan Azure.Security.KeyVault.Secrets untuk penyedia Key Vault dan telah menghentikan penggunaan Microsoft.Azure.KeyVault. Untuk informasi selengkapnya tentang cara mengonfigurasi pengaturan aplikasi fungsi, lihat opsi Key Vault di Mengelola penyimpanan kunci. (#2048)

  • Aplikasi fungsi yang berbagi akun penyimpanan kini gagal dimulai jika ID host akun-akun tersebut sama. Untuk informasi selengkapnya, lihat Pertimbangan ID Host. (#2049)

  • Azure Functions 4.x mendukung versi .NET yang lebih baru. Lihat Bahasa yang didukung di Azure Functions untuk daftar lengkap versi.

  • InvalidHostServicesException sekarang menjadi kesalahan fatal. (#2045)

  • EnableEnhancedScopes diaktifkan secara default. (#1954)

  • Menghapus HttpClient sebagai layanan terdaftar. (#1911)

  • Gunakan pemuat kelas satu di Java 11. (#1997)

  • Berhenti memuat "worker jars" di Java 8. (#1991)

  • Node.js versi 10 dan 12 tidak didukung di Azure Functions 4.x. (#1999)

  • Serialisasi output di aplikasi Node.js diperbarui untuk mengatasi inkonsistensi sebelumnya. (#2007)

  • Jumlah rangkaian default telah diperbarui. Fungsi yang tidak aman bagi utas atau memiliki penggunaan memori yang tinggi dapat terpengaruh. (#1962)
  • Python 3.6 tidak didukung di Azure Functions 4.x. (#1999)

  • Transfer memori bersama diaktifkan secara default. (#1973)

  • Jumlah rangkaian default telah diperbarui. Fungsi yang tidak aman bagi utas atau memiliki penggunaan memori yang tinggi dapat terpengaruh. (#1962)

Langkah berikutnya