Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Penting
Dukungan untuk model dalam proses berakhir pada 10 November 2026. Kami sangat menyarankan Agar Anda memigrasikan aplikasi Anda ke model pekerja yang terisolasi dengan mengikuti instruksi dalam artikel ini.
Artikel ini memandu Anda melalui proses migrasi aplikasi fungsi .NET Anda dengan aman dari model dalam proses ke model pekerja yang terisolasi. Untuk mempelajari tentang perbedaan secara umum antara model ini, lihat perbandingan mode eksekusi.
Panduan ini mengasumsikan bahwa aplikasi Anda berjalan pada versi 4.x dari runtime Functions. Jika tidak, Anda harus menggunakan panduan berikut untuk meningkatkan versi host Anda. Panduan migrasi versi host ini juga membantu Anda bermigrasi ke model pekerja yang terisolasi saat Anda bekerja melaluinya.
- Memigrasikan aplikasi dari Azure Functions versi 2.x dan 3.x ke versi 4.x
- Memigrasikan aplikasi dari Azure Functions versi 1.x ke versi 4.x
Jika didukung, artikel ini memanfaatkan integrasi ASP.NET Core dalam model pekerja yang terisolasi, yang meningkatkan performa dan menyediakan model pemrograman yang familier saat aplikasi Anda menggunakan pemicu HTTP.
Mengidentifikasi aplikasi fungsi untuk dimigrasikan
Gunakan skrip Azure PowerShell berikut untuk menghasilkan daftar aplikasi fungsi dalam langganan Anda yang saat ini menggunakan model dalam proses.
Skrip menggunakan langganan yang saat ini dikonfigurasi oleh Azure PowerShell untuk digunakan. Anda dapat mengubah langganan dengan terlebih dahulu menjalankan Set-AzContext -Subscription '<YOUR SUBSCRIPTION ID>'
dan mengganti <YOUR SUBSCRIPTION ID>
dengan ID langganan yang ingin Anda evaluasi.
$FunctionApps = Get-AzFunctionApp
$AppInfo = @{}
foreach ($App in $FunctionApps)
{
if ($App.Runtime -eq 'dotnet')
{
$AppInfo.Add($App.Name, $App.Runtime)
}
}
$AppInfo
Pilih versi .NET yang Anda targetkan
Pada versi 4.x dari runtime Functions, aplikasi fungsi .NET Anda menargetkan .NET 6 atau .NET 8 saat menggunakan model dalam proses.
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 | Pemodelan proses fungsi1,2 |
---|---|---|
.NET 9 | STS (akhir dukungan 12 Mei 2026) | Model pekerja terisolasi |
.NET 8 | LTS (akhir 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 .NET hingga .NET 8. Untuk perbandingan fitur dan fungsionalitas lengkap antara kedua model, lihat Perbedaan antara proses dalam memori dan proses terisolisasi .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.
Tip
Kami merekomendasikan untuk memperbarui ke .NET 8 pada model pekerja yang terisolasi. Ini menyediakan jalur migrasi cepat ke versi yang dirilis sepenuhnya dengan jendela dukungan terpanjang dari .NET.
Panduan ini tidak menyajikan contoh spesifik untuk .NET 9. Jika Anda perlu menargetkan versi tersebut, Anda dapat menyesuaikan contoh .NET 8.
Penyiapan untuk migrasi
Sebelum memigrasikan aplikasi ke model pekerja yang terisolasi, Anda harus meninjau konten panduan ini secara menyeluruh. Anda juga harus membiasakan diri dengan fitur model pekerja yang terisolasi dan perbedaan antara kedua model.
Untuk memigrasikan aplikasi:
- Migrasikan proyek lokal Anda ke model pekerja yang terisolasi dengan mengikuti langkah-langkah dalam Memigrasikan proyek lokal Anda.
- Setelah memigrasikan proyek Anda, uji sepenuhnya aplikasi secara lokal menggunakan versi 4.x dari Azure Functions Core Tools.
- Perbarui aplikasi fungsi Anda di Azure ke model terisolasi.
Memigrasikan proyek lokal Anda
Bagian ini menguraikan berbagai perubahan yang perlu Anda lakukan pada proyek lokal Anda untuk memindahkannya ke model pekerja yang terisolasi. Beberapa langkah berubah berdasarkan versi target .NET Anda. Gunakan tab untuk memilih instruksi yang cocok dengan versi yang Anda inginkan.
Tip
Jika Anda pindah ke versi LTS atau STS .NET, Asisten Peningkatan .NET dapat digunakan untuk secara otomatis membuat banyak perubahan yang disebutkan di bagian berikut.
Pertama, konversikan file proyek dan perbarui dependensi Anda. Ketika Anda melakukannya, Anda melihat kesalahan kompilasi untuk proyek tersebut. Dalam langkah-langkah berikutnya, Anda akan membuat perubahan yang sesuai untuk menghapus kesalahan ini.
File proyek
Contoh berikut adalah file proyek .csproj yang menggunakan .NET 8 pada versi 4.x:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<AzureFunctionsVersion>v4</AzureFunctionsVersion>
<RootNamespace>My.Namespace</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="4.1.1" />
</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 dalam model pekerja yang terisolasi:
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 :
Atur nilai .
PropertyGroup
TargetFramework
kenet8.0
.Atur nilai .
PropertyGroup
AzureFunctionsVersion
kev4
.Tambahkan elemen berikut
OutputType
kePropertyGroup
:<OutputType>Exe</OutputType>
Di dalam
ItemGroup
.PackageReference
daftar, ganti referensi paket keMicrosoft.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 ke paket lain di namespaces
Microsoft.Azure.WebJobs.*
. Anda akan mengganti paket ini di langkah selanjutnya.Tambahkan yang baru berikut ini
ItemGroup
:<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>
Mengubah kerangka kerja target proyek Anda mungkin juga memerlukan perubahan pada bagian toolchain Anda, di luar kode proyek. Misalnya, di Visual Studio Code, Anda mungkin perlu memperbarui azureFunctions.deploySubpath
pengaturan ekstensi melalui pengaturan pengguna atau file .vscode/settings.json proyek Anda. Periksa dependensi apa pun pada versi kerangka kerja yang mungkin ada di luar kode proyek Anda, sebagai bagian dari langkah build atau alur CI/CD.
Referensi Paket
Saat bermigrasi ke model pekerja yang terisolasi, Anda perlu mengubah paket referensi aplikasi Anda.
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 | MenggantikanMicrosoft.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 keMicrosoft.Azure.WebJobs.Extensions.Storage.Blobs dengan versi terbaru Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs |
Pengikatan antrean | Ganti referensi keMicrosoft.Azure.WebJobs.Extensions.Storage.Queues dengan versi terbaru Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues |
Pengikatan tabel | Ganti referensi keMicrosoft.Azure.WebJobs.Extensions.Tables dengan versi terbaru Microsoft.Azure.Functions.Worker.Extensions.Tables |
Penghubung Cosmos DB | Ganti referensi keMicrosoft.Azure.WebJobs.Extensions.CosmosDB dan/atau Microsoft.Azure.WebJobs.Extensions.DocumentDB dengan versi terbaru Microsoft.Azure.Functions.Worker.Extensions.CosmosDB |
pengikatan Bus Layanan | Ganti referensi keMicrosoft.Azure.WebJobs.Extensions.ServiceBus dengan versi terbaru Microsoft.Azure.Functions.Worker.Extensions.ServiceBus |
Pengikatan pada Event Hubs | Ganti acuan keMicrosoft.Azure.WebJobs.Extensions.EventHubs dengan versi terbaru Microsoft.Azure.Functions.Worker.Extensions.EventHubs |
Pengikatan Event Grid | Ganti referensi keMicrosoft.Azure.WebJobs.Extensions.EventGrid dengan versi terbaru Microsoft.Azure.Functions.Worker.Extensions.EventGrid |
Pengikatan Layanan SignalR | Ganti referensi keMicrosoft.Azure.WebJobs.Extensions.SignalRService dengan versi terbaru Microsoft.Azure.Functions.Worker.Extensions.SignalRService |
Fungsi Tahan Lama | Ganti referensi keMicrosoft.Azure.WebJobs.Extensions.DurableTask dengan versi terbaru Microsoft.Azure.Functions.Worker.Extensions.DurableTask |
Fungsi Tahan Lama (Penyedia penyimpanan SQL) |
Ganti referensi keMicrosoft.DurableTask.SqlServer.AzureFunctions dengan versi terbaru Microsoft.Azure.Functions.Worker.Extensions.DurableTask.SqlServer |
Fungsi Berkelanjutan (Penyedia penyimpanan netherite) |
Ganti referensi keMicrosoft.Azure.DurableTask.Netherite.AzureFunctions dengan versi terbaru Microsoft.Azure.Functions.Worker.Extensions.DurableTask.Netherite |
Pengikatan SendGrid | Ganti acuan keMicrosoft.Azure.WebJobs.Extensions.SendGrid dengan versi terbaru Microsoft.Azure.Functions.Worker.Extensions.SendGrid |
Pengikatan Kafka | Ganti referensi keMicrosoft.Azure.WebJobs.Extensions.Kafka dengan versi terbaru Microsoft.Azure.Functions.Worker.Extensions.Kafka |
Pengikatan RabbitMQ | Ganti referensi keMicrosoft.Azure.WebJobs.Extensions.RabbitMQ dengan versi terbaru Microsoft.Azure.Functions.Worker.Extensions.RabbitMQ |
Injeksi dependensi dan konfigurasi inisialisasi |
Hapus referensi keMicrosoft.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.
Tip
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 Service Bus memiliki perubahan signifikan dalam struktur antara versi 4.x dan 5.x. Untuk informasi selengkapnya, lihat Bindings Layanan Azure Bus untuk Azure Functions.
Aplikasi model pekerja terisolasi Anda tidak boleh menggunakan paket apa pun di Microsoft.Azure.WebJobs.*
namespace atau Microsoft.Azure.Functions.Extensions
. Jika Anda memiliki referensi yang tersisa untuk ini, referensi tersebut harus dihapus.
Tips
Aplikasi Anda mungkin juga bergantung pada jenis Azure SDK, baik sebagai bagian dari pemicu dan pengikatan Anda atau sebagai dependensi mandiri. Anda sebaiknya memanfaatkan kesempatan ini untuk memperbarui semuanya juga. Versi terbaru dari ekstensi Functions kompatibel dengan versi terbaru dari Azure SDK untuk .NET, hampir semua paket tersebut dalam bentuk Azure.*
.
Program.cs file
Saat bermigrasi untuk berjalan dalam proses pekerja yang terisolasi, Anda harus menambahkan file Program.cs ke proyek Anda dengan konten berikut:
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.
Perubahan tanda tangan fungsi
Beberapa jenis kunci berubah antara model dalam proses dan model pekerja yang terisolasi. Banyak dari ini berkaitan dengan atribut, parameter, dan jenis pengembalian yang membentuk tanda tangan fungsi. Untuk setiap fungsi, Anda harus membuat perubahan pada:
- Atribut fungsi, yang juga mengatur nama fungsi
- Bagaimana fungsi memperoleh
ILogger
/ILogger<T>
- Atribut dan parameter pemicu dan pengikatan
Bagian selanjutnya memandu Anda melalui masing-masing langkah ini.
Atribut fungsi
Atribut Function
dalam model pekerja yang terisolasi menggantikan FunctionName
atribut . Atribut baru memiliki tanda tangan yang sama, dan satu-satunya perbedaan adalah dalam nama. Oleh karena itu, Anda hanya dapat melakukan penggantian string di seluruh proyek Anda.
Pencatatan
Dalam model dalam proses, Anda dapat menyertakan parameter opsional ILogger
untuk fungsi Anda, atau Anda dapat menggunakan injeksi dependensi untuk mendapatkan ILogger<T>
. Jika aplikasi Anda sudah menggunakan injeksi dependensi, mekanisme yang sama berfungsi dalam model pekerja yang terisolasi.
Namun, untuk Fungsi apa pun yang bergantung pada ILogger
parameter metode, Anda perlu membuat perubahan. Kami menyarankan agar Anda menggunakan injeksi dependensi untuk mendapatkan ILogger<T>
. Gunakan langkah-langkah berikut untuk memigrasikan mekanisme pengelogan fungsi:
Di kelas fungsi Anda, tambahkan
private readonly ILogger<MyFunction> _logger;
properti, gantiMyFunction
dengan nama kelas fungsi Anda.Buat konstruktor untuk kelas fungsi Anda yang mengambil
ILogger<T>
sebagai parameter:public MyFunction(ILogger<MyFunction> logger) { _logger = logger; }
Ganti kedua instans
MyFunction
dalam cuplikan kode sebelumnya dengan nama kelas fungsi Anda.Untuk operasi pengelogan dalam kode fungsi Anda, ganti referensi ke
ILogger
parameter dengan_logger
.ILogger
Hapus parameter dari tanda tangan fungsi Anda.
Untuk mempelajari selengkapnya, lihat Pencatatan pada model pekerja terisolasi.
Memicu dan mengikat perubahan
Saat mengubah referensi paket pada langkah sebelumnya, Anda memperkenalkan kesalahan untuk pemicu dan pengikatan yang sekarang dapat Anda perbaiki:
Hapus pernyataan apa pun
using Microsoft.Azure.WebJobs;
.using Microsoft.Azure.Functions.Worker;
Tambahkan pernyataan.Untuk setiap atribut pengikatan, ubah nama atribut seperti yang ditentukan dalam dokumentasi referensinya, yang dapat Anda temukan di indeks Pengikatan yang didukung. Secara umum, nama atribut berubah sebagai berikut:
- Pemicu biasanya tetap diberi nama dengan cara yang sama. Misalnya,
QueueTrigger
adalah nama atribut untuk kedua model. - Pengikatan input biasanya perlu
Input
ditambahkan ke namanya. Misalnya, jika Anda menggunakanCosmosDB
atribut pengikatan input dalam model dalam proses, atributnya sekarang adalahCosmosDBInput
. - Pengikatan output biasanya perlu
Output
ditambahkan ke namanya. Misalnya, jika Anda menggunakanQueue
atribut pengikatan output dalam model dalam proses, atribut ini sekarang akan menjadiQueueOutput
.
- Pemicu biasanya tetap diberi nama dengan cara yang sama. Misalnya,
Perbarui parameter atribut untuk mencerminkan versi model pekerja yang terisolasi, seperti yang ditentukan dalam dokumentasi referensi pengikatan.
Misalnya, dalam model pemrosesan, atribut
[Blob(...)]
mewakili pengikatan output blob yang menyertakan propertiAccess
. Dalam model pekerja yang terisolasi, atribut output blob adalah[BlobOutput(...)]
. Pengikatan tidak lagi memerlukanAccess
properti , sehingga parameter dapat dihapus. Jadi[Blob("sample-images-sm/{fileName}", FileAccess.Write, Connection = "MyStorageConnection")]
akan menjadi[BlobOutput("sample-images-sm/{fileName}", Connection = "MyStorageConnection")]
.Pindahkan pengikatan output dari daftar parameter fungsi. Jika Anda hanya memiliki satu pengikatan output, Anda dapat menerapkan ini ke jenis pengembalian fungsi. Jika Anda memiliki beberapa output, buat kelas baru dengan properti untuk setiap output, dan terapkan atribut ke properti tersebut. Untuk mempelajari selengkapnya, lihat Pengikatan output ganda.
Lihat dokumentasi referensi setiap pengikatan untuk jenis yang memungkinkan Anda untuk mengikat. Dalam beberapa kasus, Anda mungkin perlu mengubah jenisnya. Untuk pengikatan output, jika versi model dalam proses menggunakan
IAsyncCollector<T>
, Anda dapat mengganti ini dengan pengikatan ke array jenis target:T[]
. Anda juga bisa mempertimbangkan mengganti pengikatan output dengan objek klien untuk layanan yang diwakilinya, baik sebagai tipe pengikatan untuk pengikatan input jika ada, atau dengan menyuntikkan klien sendiri.Jika fungsi Anda menyertakan
IBinder
parameter, hapus. Ganti fungsionalitas dengan objek klien untuk layanan yang diwakilinya, baik sebagai jenis pengikatan untuk pengikatan input jika tersedia, atau dengan menyuntikkan klien sendiri.Perbarui kode fungsi untuk bekerja dengan jenis baru apa pun.
local.settings.json file
File local.settings.json hanya digunakan saat berjalan secara lokal. Untuk informasi lebih lanjut, lihat file pengaturan lokal File.
Saat bermigrasi dari menjalankan dalam satu proses ke menjalankan dalam proses pekerja yang terisolasi, Anda perlu mengubah nilai FUNCTIONS_WORKER_RUNTIME
menjadi dotnet-isolated. Pastikan file local.settings.json Anda memiliki setidaknya elemen berikut:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
}
}
Nilai yang Anda miliki AzureWebJobsStorage
mungkin berbeda. Anda tidak perlu mengubah nilainya sebagai bagian dari migrasi.
file host.json
Tidak diperlukan perubahan pada file host.json Anda. Namun, jika konfigurasi Application Insights Anda ada dalam file ini dari proyek model dalam proses, Anda mungkin ingin membuat perubahan tambahan dalam file Program.cs Anda. File host.json hanya mengontrol pencatatan log dari Functions host runtime, dan dalam model pekerja yang terisolasi, beberapa log ini berasal dari aplikasi Anda secara langsung, memberikan Anda kendali lebih besar. Lihat Mengelola tingkat log dalam model pekerja yang terisolasi untuk detail cara memfilter log ini.
Perubahan kode lainnya
Bagian ini menggarisbawahi perubahan kode lain yang perlu dipertimbangkan saat Anda melalui proses migrasi. Perubahan ini tidak diperlukan oleh semua aplikasi, tetapi Anda harus mengevaluasi apakah ada yang relevan dengan skenario 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.
Tingkatan log dan penyaringan pada 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 pada model pekerja yang terisolasi untuk informasi lebih lengkap tentang cara memfilter log ini.
Contoh migrasi fungsi
Contoh pemicu HTTP
Pemicu HTTP untuk model dalam proses mungkin terlihat seperti contoh berikut:
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;
namespace Company.Function
{
public static class HttpTriggerCSharp
{
[FunctionName("HttpTriggerCSharp")]
public static IActionResult Run(
[HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
return new OkObjectResult($"Welcome to Azure Functions, {req.Query["name"]}!");
}
}
}
Pemicu HTTP untuk versi yang dimigrasikan mungkin 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"]}!");
}
}
}
Memperbarui aplikasi fungsi Anda di Azure
Memperbarui aplikasi fungsi Anda ke model terisolasi melibatkan dua perubahan yang harus diselesaikan bersama-sama, karena jika Anda hanya menyelesaikannya, aplikasi berada dalam status kesalahan. Kedua perubahan ini juga menyebabkan proses aplikasi dimulai ulang. Untuk alasan ini, Anda harus melakukan pembaruan menggunakan slot pemuatan. Slot penahapan membantu meminimalkan waktu henti untuk aplikasi Anda dan memungkinkan Anda menguji dan memverifikasi kode yang dimigrasikan dengan konfigurasi yang diperbarui di Azure. Anda kemudian dapat menyebarkan aplikasi yang telah dimigrasikan sepenuhnya ke slot produksi melalui operasi pertukaran.
Penting
Saat payload yang disebarkan aplikasi tidak cocok dengan runtime yang dikonfigurasi, itu dalam status kesalahan. Selama proses migrasi, Anda memasukkan aplikasi ke dalam status ini, idealnya hanya untuk sementara. Slot penyebaran membantu mengurangi efek ini, karena status kesalahan akan diselesaikan di lingkungan penahapan (nonproduksi) Anda sebelum perubahan diterapkan sebagai pembaruan tunggal ke lingkungan produksi Anda. Slot juga melindungi dari kesalahan apa pun dan memungkinkan Anda mendeteksi masalah lain sebelum masuk ke produksi.
Selama proses, Anda mungkin masih melihat kesalahan dalam log yang berasal dari slot penahapan (nonproduksi) Anda. Ini diharapkan, meskipun ini harus hilang saat Anda melanjutkan melalui langkah-langkah. Sebelum Anda melakukan operasi pertukaran slot, Anda harus mengonfirmasi bahwa kesalahan ini berhenti dimunculkan dan bahwa aplikasi Anda berfungsi seperti yang diharapkan.
Gunakan langkah-langkah berikut untuk menggunakan slot penyebaran untuk memperbarui aplikasi fungsi Anda ke model pekerja yang terisolasi:
Buatlah slot penyebaran jika Anda belum melakukannya. Anda mungkin juga ingin membiasakan diri dengan proses pertukaran slot dan memastikan bahwa Anda dapat membuat pembaruan pada aplikasi yang ada dengan gangguan minimal.
Ubah konfigurasi slot penahapan (nonproduksi) untuk menggunakan model pekerja terisolasi dengan menetapkan pengaturan aplikasi
FUNCTIONS_WORKER_RUNTIME
kedotnet-isolated
.FUNCTIONS_WORKER_RUNTIME
seharusnya tidak ditandai sebagai pengaturan slot.Jika Anda juga menargetkan versi .NET yang berbeda sebagai bagian dari pembaruan, Anda juga harus mengubah konfigurasi tumpukan. Untuk melakukannya, lihat Memperbarui konfigurasi tumpukan. Anda dapat menggunakan instruksi yang sama untuk pembaruan versi .NET di masa mendatang yang Anda buat.
Jika Anda memiliki penyediaan infrastruktur otomatis seperti alur CI/CD, pastikan bahwa otomatisasi juga diperbarui untuk memastikan
FUNCTIONS_WORKER_RUNTIME
tetap diatur kedotnet-isolated
dan menargetkan versi .NET yang benar.Terbitkan proyek yang telah dimigrasikan ke slot penahapan (bukan produksi) pada aplikasi fungsi Anda.
Jika Anda menggunakan Visual Studio untuk menerbitkan proyek model pekerja yang terisolasi ke aplikasi atau slot yang ada yang menggunakan model dalam proses, itu juga dapat menyelesaikan langkah sebelumnya untuk Anda secara bersamaan. Jika Anda tidak menyelesaikan langkah sebelumnya, Visual Studio akan meminta Anda untuk memperbarui aplikasi fungsi selama penyebaran. Visual Studio menyajikan ini sebagai operasi tunggal, tetapi ini masih dua operasi terpisah. Anda mungkin masih melihat kesalahan dalam log Anda dari slot penahapan (nonproduksi) selama status sementara.
Pastikan bahwa aplikasi Anda berfungsi sesuai harapan dalam slot staging (nonproduksi).
Lakukan operasi pertukaran slot untuk menerapkan perubahan yang Anda buat di slot penahapan (nonproduksi) Anda ke slot produksi. Pertukaran slot terjadi sebagai pembaruan tunggal, yang menghindari terjadinya kesalahan sementara di lingkungan produksi Anda.
Konfirmasikan bahwa aplikasi Anda berfungsi seperti yang diharapkan dalam slot produksi.
Setelah Anda menyelesaikan langkah-langkah ini, migrasi selesai, dan aplikasi Anda berjalan pada model yang terisolasi. Selamat! Ulangi langkah-langkah dari panduan ini seperlunya untuk aplikasi lain yang memerlukan migrasi.