Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Функции Azure версии 4.x имеют высокую обратную совместимость с версией 3.x. Большинство приложений должны безопасно перенестися на 4.x, не требуя значительных изменений кода. Для получения дополнительной информации о версиях среды выполнения Functions см. Обзор версий среды выполнения Azure Functions.
Внимание
По состоянию на 13 декабря 2022 г. для приложений-функций, работающих в версиях 2.x и 3.x среды выполнения функций Azure, завершилась расширенная поддержка. Дополнительные сведения см. в разделе "Устаревшие версии".
В этой статье описывается процесс безопасной миграции функционального приложения для работы на версии 4.x среды выполнения Functions. Так как инструкции по миграции проекта зависят от языка, обязательно выберите язык разработки из селектора в верхней части статьи.
Определение функциональных приложений для миграции
Используйте следующий сценарий PowerShell для создания списка приложений-функций в подписке, предназначенных для версий 2.x или 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
Выбор целевой версии .NET
В среде выполнения Functions версии 3.x приложение-функция C# нацелено на .NET Core 3.1 с использованием внутрипроцессной модели или на .NET 5 с использованием модели изолированного рабочего процесса.
При переносе приложения-функции у вас есть возможность выбрать целевую версию .NET. Проект C# можно обновить до одной из следующих версий .NET, поддерживаемых функциями версии 4.x:
Версия .NET | Тип выпуска официальной политики поддержки .NET | Модельпроцесса функций 1,2 |
---|---|---|
.NET 9 | STS (окончание поддержки 12 мая 2026 г.) | Изолированная рабочая модель |
.NET 8 | LTS (окончание поддержки 10 ноября 2026 г.) |
Изолированная рабочая модель, Модель в процессе2 |
.NET Framework 4.8 | См. политику | Изолированная рабочая модель |
1 Изолированная модель рабочего процесса поддерживает долгосрочную поддержку (LTS) и стандартную поддержку (STS) версий .NET, а также версии платформы .NET Framework. Модель в процессе поддерживает только LTS-выпуски .NET, заканчивая .NET 8. Для полного сравнения функций и возможностей двух моделей см. в разделе «Различия между встроенными и изолированными рабочими процессами .NET Функции Azure».
2 Поддержка заканчивается для текущей модели 10 ноября 2026 года. Для получения дополнительной информации см. это объявление о поддержке. Для непрерывной поддержки следует перенести приложения в изолированную рабочую модель.
Совет
Рекомендуется обновить до .NET 8 в изолированной рабочей модели. .NET 8 — это полностью выпущенная версия с самым длинным окном поддержки из .NET.
Хотя вместо этого можно использовать модель в процессе, мы не рекомендуем использовать этот подход, если его можно избежать. Поддержка будет завершена для модели в процессе 10 ноября 2026 года, поэтому перед этим вам потребуется перейти к изолированной рабочей модели. Это при миграции на версию 4.x уменьшит общее количество необходимых усилий, и изолированная рабочая модель даст вашему приложению дополнительные преимущества, включая возможность более легко использовать будущие версии .NET. При переходе к изолированной рабочей модели помощник по обновлению .NET также может обрабатывать многие необходимые изменения кода.
В этом руководстве нет конкретных примеров для .NET 9. Если вам нужно настроить эту версию, можно адаптировать примеры .NET 8 для изолированной рабочей модели.
Подготовка к переносу
Если вы еще не сделали этого, определите список приложений, которые необходимо перенести в текущей подписке Azure с помощью Azure PowerShell.
Прежде чем перенести приложение в среду выполнения функций версии 4.x, выполните следующие задачи:
- Просмотрите список критических изменений между версиями 3.x и 4.x.
- Выполните действия, описанные в разделе "Миграция локального проекта", чтобы перенести локальный проект в версию 4.x.
- После переноса проекта протестируйте приложение локально, используя версию 4.x Azure Functions Core Tools для полного тестирования.
- Запустите валидатор перед обновлением на приложении, размещённом на Azure, и устраните все выявленные проблемы.
- Обновите функциональное приложение в Azure до новой версии. Если вам нужно свести к минимуму время простоя, рассмотрите возможность использования промежуточного слота для тестирования и проверки перенесенного приложения в Azure в новой версии среды выполнения. Затем можно развернуть приложение с обновленными параметрами версии в производственном слоте. Дополнительные сведения см. в разделе «Обновление с помощью слотов».
- Опубликуйте перенесенный проект в обновленном приложении-функции.
При использовании Visual Studio для публикации проекта версии 4.x в существующем приложении-функции в более низкой версии вам будет предложено разрешить Visual Studio обновить приложение-функцию до версии 4.x во время развертывания. Это обновление использует тот же процесс, определенный в Обновление без слотов.
Перенос локального проекта
Инструкции по обновлению зависят от языка. Если язык не отображается, выберите его из селектора в верхней части статьи.
Выберите вкладку, соответствующую целевой версии .NET, и требуемую модель процесса (внутрипроцессный или изолированный рабочий процесс).
Совет
При переходе на LTS или STS-версию .NET с помощью изолированной рабочей модели помощник по обновлению .NET можно использовать для автоматического внесения многих изменений, упомянутых в следующих разделах.
Файл проекта
В следующем примере представлен .csproj
файл проекта, использующий .NET Core 3.1 в версии 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>
Используйте одну из следующих процедур, чтобы обновить этот XML-файл для запуска в Функциях версии 4.x:
В этих шагах предполагается, что локальный проект C#; Если приложение вместо этого использует скрипт C# (CSX-файлы ), перед продолжением следует преобразовать в модель проекта .
В XML-файле проекта CSPROJ требуются следующие изменения:
Задайте значение
PropertyGroup
.TargetFramework
изменено наnet8.0
.Задайте значение
PropertyGroup
.AzureFunctionsVersion
изменено наv4
.Добавьте следующий
OutputType
элемент в :PropertyGroup
<OutputType>Exe</OutputType>
ItemGroup
в .PackageReference
список, замените ссылку на пакетMicrosoft.NET.Sdk.Functions
следующими ссылками:<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" />
Отметьте любые ссылки на другие пакеты в пространствах имен
Microsoft.Azure.WebJobs.*
. Вы замените эти пакеты на следующем шаге.Добавьте следующее новое:
ItemGroup
<ItemGroup> <Using Include="System.Threading.ExecutionContext" Alias="ExecutionContext"/> </ItemGroup>
После внесения этих изменений обновленный проект должен выглядеть следующим образом:
<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>
Изменения в пакете и пространстве имен
На основе модели, в которую выполняется миграция, может потребоваться обновить или изменить пакеты, на которые ссылается приложение. При внедрении целевых пакетов необходимо обновить пространство имен инструкций using и некоторые типы, на которые вы ссылаетесь. Вы можете увидеть влияние этих изменений пространства имен на using
директивы в примерах шаблона триггера HTTP в дальнейшем в этой статье.
Если вы еще не сделали этого, обновите проект, чтобы ссылаться на последние стабильные версии:
В зависимости от триггеров и привязок, которые использует приложение, может потребоваться ссылаться на другой набор пакетов. В следующей таблице показаны замены некоторых наиболее часто используемых расширений:
Сценарий | Изменения ссылок на пакеты |
---|---|
Триггер по таймеру | Добавить Microsoft.Azure.Functions.Worker.Extensions.Timer |
Привязки хранилища | ЗаменитьMicrosoft.Azure.WebJobs.Extensions.Storage на Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs, Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues и Microsoft.Azure.Functions.Worker.Extensions.Tables |
Привязки больших двоичных объектов | Замена ссылок наMicrosoft.Azure.WebJobs.Extensions.Storage.Blobs с последней версией Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs |
Привязки очередей | Замена ссылок наMicrosoft.Azure.WebJobs.Extensions.Storage.Queues с последней версией Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues |
Привязки таблиц | Замена ссылок наMicrosoft.Azure.WebJobs.Extensions.Tables с последней версией Microsoft.Azure.Functions.Worker.Extensions.Tables |
Привязки Cosmos DB | Замена ссылок наMicrosoft.Azure.WebJobs.Extensions.CosmosDB и (или) Microsoft.Azure.WebJobs.Extensions.DocumentDB с последней версией Microsoft.Azure.Functions.Worker.Extensions.CosmosDB |
Привязки служебной шины | Замена ссылок наMicrosoft.Azure.WebJobs.Extensions.ServiceBus с последней версией Microsoft.Azure.Functions.Worker.Extensions.ServiceBus |
Привязки Центров событий | Замена ссылок наMicrosoft.Azure.WebJobs.Extensions.EventHubs с последней версией Microsoft.Azure.Functions.Worker.Extensions.EventHubs |
Привязки сетки событий | Замена ссылок наMicrosoft.Azure.WebJobs.Extensions.EventGrid с последней версией Microsoft.Azure.Functions.Worker.Extensions.EventGrid |
Привязки Службы SignalR | Замена ссылок наMicrosoft.Azure.WebJobs.Extensions.SignalRService с последней версией Microsoft.Azure.Functions.Worker.Extensions.SignalRService |
Устойчивые функции | Замена ссылок наMicrosoft.Azure.WebJobs.Extensions.DurableTask с последней версией Microsoft.Azure.Functions.Worker.Extensions.DurableTask |
Устойчивые функции (поставщик хранилища SQL) |
Замена ссылок наMicrosoft.DurableTask.SqlServer.AzureFunctions с последней версией Microsoft.Azure.Functions.Worker.Extensions.DurableTask.SqlServer |
Устойчивые функции (поставщик хранилища Netherite) |
Замена ссылок наMicrosoft.Azure.DurableTask.Netherite.AzureFunctions с последней версией Microsoft.Azure.Functions.Worker.Extensions.DurableTask.Netherite |
Привязки SendGrid | Замена ссылок наMicrosoft.Azure.WebJobs.Extensions.SendGrid с последней версией Microsoft.Azure.Functions.Worker.Extensions.SendGrid |
Привязки Kafka | Замена ссылок наMicrosoft.Azure.WebJobs.Extensions.Kafka с последней версией Microsoft.Azure.Functions.Worker.Extensions.Kafka |
Привязки RabbitMQ | Замена ссылок наMicrosoft.Azure.WebJobs.Extensions.RabbitMQ с последней версией Microsoft.Azure.Functions.Worker.Extensions.RabbitMQ |
Внедрение зависимостей и конфигурация запуска |
Удаление ссылок наMicrosoft.Azure.Functions.Extensions (Изолированная рабочая модель предоставляет эту функцию по умолчанию.) |
Ознакомьтесь с поддерживаемыми привязками для полного списка расширений, которые следует рассмотреть, и ознакомьтесь с документацией по каждому расширению, чтобы получить полные инструкции по установке для изолированной модели процесса. Не забудьте установить последнюю стабильную версию всех целевых пакетов.
Совет
Любые изменения версий расширений в ходе этого процесса могут потребовать, чтобы вы также обновили файл host.json
. Обязательно ознакомьтесь с документацией по каждому используемому расширению.
Например, расширение служебная шина имеет критические изменения в структуре между версиями 4.x и 5.x. Для получения дополнительной информации см. Привязки Служебной шины Azure для Функций Azure.
Приложение изолированной рабочей модели не должно ссылаться на пакеты в Microsoft.Azure.WebJobs.*
пространствах имен или Microsoft.Azure.Functions.Extensions
. Если у вас есть оставшиеся ссылки на них, их следует удалить.
Совет
Ваше приложение также может зависеть от типов Azure SDK, как часть триггеров и привязок, так и как автономная зависимость. Следует воспользоваться этой возможностью, чтобы тоже обновить их. Последние версии расширений функций работают с последними версиями пакета SDK Azure для .NET, почти все пакеты, для которых представлены в форме Azure.*
.
файл Program.cs
При миграции на выполнение в изолированном рабочем процессе необходимо добавить следующий файл program.cs в проект:
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();
Этот пример включает интеграцию ASP.NET Core для повышения производительности и предоставления знакомой модели программирования при использовании триггеров HTTP в приложении. Если вы не планируете использовать триггеры HTTP, можно заменить вызов на вызов ConfigureFunctionsWebApplication
ConfigureFunctionsWorkerDefaults
. При этом можно удалить ссылку Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore
на файл проекта. Однако для оптимальной производительности даже для функций с другими типами триггеров следует сохранить FrameworkReference
ASP.NET Core.
Файл Program.cs заменяет любой файл с FunctionsStartup
атрибутом, который обычно является файлом Startup.cs. В местах, где ваш код FunctionsStartup
будет ссылаться на IFunctionsHostBuilder.Services
, можно вместо этого добавить инструкции в метод .ConfigureServices()
класса HostBuilder
в вашем файле Program.cs. Дополнительные сведения о работе с Program.cs см. в руководстве по запуску и настройке в изолированной рабочей модели.
Примеры Program.cs по умолчанию включают настройку Application Insights. В Program.cs необходимо также настроить фильтрацию журналов, которая должна применяться к журналам, поступающим из кода в проекте. В изолированной рабочей модели файл host.json управляет событиями, создаваемыми средой выполнения узла функций. Если правила фильтрации не настроены в Program.cs, могут возникнуть различия в уровнях журнала, присутствующих для различных категорий телеметрии.
Хотя вы можете зарегистрировать пользовательские источники конфигурации в рамках HostBuilder
, они аналогично применяются только к коду в вашем проекте. Платформа также нуждается в настройке триггера и привязки, и это должно быть предоставлено с помощью параметров приложения, ссылок на Key Vault или ссылок на конфигурацию приложений .
После того как вы переместите все из любых существующих FunctionsStartup
в файл Program.cs, можно удалить атрибут FunctionsStartup
и класс, к которому он был применён.
файл local.settings.json
Файл local.settings.json используется только при локальном запуске. Дополнительные сведения см. в файле локальных параметров.
При переходе на версию 4.x убедитесь, что файл local.settings.json содержит по крайней мере следующие элементы:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "AzureWebJobsStorageConnectionStringValue",
"FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
}
}
Примечание.
При переходе от работы в одном процессе к работе в изолированном рабочем процессе необходимо изменить значение параметра FUNCTIONS_WORKER_RUNTIME
на "dotnet-isolated".
файл host.json
Вам не нужно вносить изменения в файл host.json
. Однако, если конфигурация Application Insights в этом файле относится к вашей внутренней модели проекта, возможно, вам потребуется внести другие изменения в файл Program.cs
. Файл host.json
управляет ведением журнала только из среды выполнения узла Функций и в изолированной рабочей модели некоторые из этих журналов приходят непосредственно из приложения, что дает вам больше контроля. Дополнительные сведения об фильтрации этих журналов см. в статье "Управление уровнями журналов в изолированной рабочей модели ".
Изменения имени класса
Некоторые классы ключей изменили имена между версиями. Эти изменения являются результатом либо изменений в .NET API, либо различий между внутрипроцессом и изолированным рабочим процессом. В следующей таблице указаны ключевые классы .NET, используемые функциями, которые могут измениться при миграции:
.NET Core 3.1. | .NET 5 | .NET 8 |
---|---|---|
FunctionName (атрибут) |
Function (атрибут) |
Function (атрибут) |
ILogger |
ILogger |
ILogger , ILogger<T> |
HttpRequest |
HttpRequestData |
HttpRequestData , HttpRequest (с использованием интеграции ASP.NET Core) |
IActionResult |
HttpResponseData |
HttpResponseData , IActionResult (с использованием интеграции ASP.NET Core) |
FunctionsStartup (атрибут) |
Вместо этого используется Program.cs |
Вместо этого используется Program.cs |
В привязках также могут быть различия имен классов. Дополнительные сведения см. в справочных статьях по конкретным привязкам.
Другие изменения кода
В этом разделе рассматриваются другие изменения кода, которые следует учитывать при работе с миграцией. Эти изменения не требуются для всех приложений, но следует оценить, имеют ли какие-либо значения для ваших сценариев. Не забудьте проверить критические изменения между 3.x и 4.x для других изменений, которые могут потребоваться внести в проект.
Сериализация JSON
По умолчанию изолированная рабочая модель использует System.Text.Json для сериализации JSON. Сведения о настройке параметров сериализатора или переключении на JSON.NET (Newtonsoft.Json) см. в разделе "Настройка сериализации JSON".
Уровни логов и фильтрация в Application Insights
Можно отправлять журналы в Application Insights как из среды выполнения хоста функций, так и из кода вашего проекта. host.json позволяет настраивать правила ведения журнала хоста, но для управления журналами, поступающими из вашего кода, необходимо настроить правила фильтрации в рамках Program.cs. Дополнительные сведения об фильтрации этих журналов см. в статье "Управление уровнями журналов в изолированной рабочей модели ".
Шаблон триггера HTTP
Различия между процессом и изолированным рабочим процессом можно увидеть в триггерных функциях HTTP. Шаблон триггера HTTP для версии 3.x (в процессе) выглядит следующим образом:
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);
}
}
}
Шаблон триггера HTTP для перенесенной версии выглядит следующим образом:
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"]}!");
}
}
}
Чтобы обновить проект до версии 4.x службы "Функции Azure":
Обновите локальную установку Azure Functions Core Tools до версии 4.x.
Обновите пакет расширений Функций Azure приложения до версии 2.x или более поздней версии. Дополнительные сведения см. в разделе Критические изменения.
При необходимости перейдите к одной из версий Java, поддерживаемых в версии 4.x.
Обновите файл приложения
POM.xml
, чтобы изменить параметрFUNCTIONS_EXTENSION_VERSION
на~4
, как показано в следующем примере:<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>
- При необходимости перейдите к одной из версий Node.js, поддерживаемых в версии 4.x.
- Воспользуйтесь этой возможностью для обновления до PowerShell 7.2, что рекомендуется. Дополнительные сведения см. в разделах версий PowerShell.
- Если вы используете Python 3.6, перейдите на одну из поддерживаемых версий.
Запуск средства проверки перед обновлением
Функции Azure предоставляет средство проверки перед обновлением, которое поможет выявить потенциальные проблемы при переносе приложения-функции в версию 4.x. Чтобы запустить средство проверки перед обновлением:
На портале Azure перейдите к своему приложению-функции.
Откройте страницу Диагностика и решение проблем
В диагностике приложения-функции начните вводить
Functions 4.x Pre-Upgrade Validator
и выберите его из списка.После завершения проверки просмотрите рекомендации и устраните выявленные проблемы в приложении. Если необходимо внести изменения в приложение, убедитесь, что они корректно работают в среде выполнения Functions версии 4.x, протестировав их локально с помощью Azure Functions Core Tools версии 4 или на промежуточном слоте.
Обновите ваше функциональное приложение в Azure
Перед публикацией перенесенного проекта необходимо обновить среду выполнения узла приложения-функции в Azure до версии 4.x. Версия среды выполнения, используемая узлом функций, управляется FUNCTIONS_EXTENSION_VERSION
параметром приложения, но в некоторых случаях другие параметры также должны быть обновлены. Изменения кода и изменения параметров приложения требуют перезапуска приложения-функции.
Самый простой способ — обновить без слотов , а затем повторно опубликовать проект приложения. Вы также можете свести к минимуму время простоя в вашем приложении и упростить откат, обновляя с использованием слотов.
Обновление без слотов
Самый простой способ обновления до версии 4.x — задать параметр приложения FUNCTIONS_EXTENSION_VERSION
на ~4
в функции приложения в Azure. На сайте со слотами необходимо выполнить другую процедуру.
az functionapp config appsettings set --settings FUNCTIONS_EXTENSION_VERSION=~4 -g <RESOURCE_GROUP_NAME> -n <APP_NAME>
Необходимо также задать другой параметр, который отличается от Windows и Linux.
При запуске в Windows также необходимо включить .NET 6.0, что требуется для среды выполнения версии 4.x.
az functionapp config set --net-framework-version v6.0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME>
.NET 6 требуется для приложений-функций на любом языке, работающем в Windows.
В этом примере замените <APP_NAME>
именем приложения-функции и <RESOURCE_GROUP_NAME>
именем группы ресурсов.
Теперь вы можете повторно опубликовать проект приложения, перенесенный для запуска в версии 4.x.
Обновление с помощью слотов
Использование слотов развертывания — это хороший способ обновить приложение-функцию до среды выполнения версии 4.x из предыдущей версии. С помощью промежуточного слота можно запустить приложение в новой версии среды выполнения в промежуточном слоте и перейти в рабочую среду после проверки. Слоты также позволяют свести к минимуму время простоя во время обновления. Если необходимо свести к минимуму время простоя, выполните действия, описанные в разделе "Минимальное время простоя".
После проверки приложения в обновленном слоте вы можете перевести приложение и новые параметры версии в рабочую среду. Для этого переключения требуется установить параметр WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0
в рабочем слоте. Добавление этого параметра влияет на время простоя, необходимое для обновления.
Стандартное обновление
Если для приложения-функции с поддержкой слотов допустимо время простоя, необходимое для полного перезапуска, можно обновить параметр WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS
непосредственно в рабочем слоте. Так как изменение этого параметра непосредственно в рабочем слоте приводит к перезапуску, влияющему на доступность, рекомендуется выполнять это изменение в период пониженного трафика. Затем можно заменить обновленную версию из промежуточного слота.
Командлет PowerShell Update-AzFunctionAppSetting
на данный момент не поддерживает слоты. Необходимо использовать Azure CLI или портал Azure.
Используйте следующую команду, чтобы задать
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>
В этом примере замените
<APP_NAME>
именем приложения-функции и<RESOURCE_GROUP_NAME>
именем группы ресурсов. Эта команда приводит к перезапуску приложения, запущенного в рабочем слоте.Используйте следующую команду, чтобы также задать
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS
в промежуточном слоте:az functionapp config appsettings set --settings WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME>
Используйте следующую команду, чтобы изменить
FUNCTIONS_EXTENSION_VERSION
и обновить промежуточный слот до новой версии среды выполнения:az functionapp config appsettings set --settings FUNCTIONS_EXTENSION_VERSION=~4 -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME>
Для среды выполнения функций версии 4.x требуется .NET 6 в Windows. В Linux приложения .NET также должны обновляться до .NET 6. Используйте следующую команду, чтобы среда выполнения была запущена в .NET 6:
При запуске в Windows также необходимо включить .NET 6.0, что требуется для среды выполнения версии 4.x.
az functionapp config set --net-framework-version v6.0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME>
.NET 6 требуется для приложений-функций на любом языке, работающем в Windows.
В этом примере замените
<APP_NAME>
именем приложения-функции и<RESOURCE_GROUP_NAME>
именем группы ресурсов.Если вашему проекту кода потребовались обновления, чтобы запускаться на версии 4.x, внедрите эти обновления на промежуточный слот.
Убедитесь, что приложение-функция работает правильно в обновленной промежуточной среде перед переключением.
Используйте следующую команду, чтобы переключить обновленный слот подготовки на продакшн.
az functionapp deployment slot swap -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME> --target-slot production
Обновление для минимального простоя
Чтобы свести к минимуму время простоя в рабочем приложении, можно переключить параметр WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS
из промежуточного слота в рабочую среду. После этого можно переключить обновленную версию из предварительно созданного промежуточного слота.
Используйте следующую команду, чтобы задать
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>
Используйте следующие команды, чтобы переключить слот с новым параметром в рабочую среду и одновременно восстановить параметр версии в промежуточном слоте.
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>
В период между переключением и восстановлением версии этапа выполнения в промежуточном слоте могут появляться ошибки. Эта ошибка может произойти, если
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0
существует только в промежуточной среде во время переключения, что приводит к удалению параметраFUNCTIONS_EXTENSION_VERSION
в этой среде. Без параметра версии слот находится в плохом состоянии. Обновление версии в промежуточном слоте сразу после переключения должно привести слот в исправное состояние. При необходимости можно откатить изменения. Однако любая отмена обмена также требует непосредственного удаленияWEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0
из рабочего окружения до повторного обмена, чтобы предотвратить такие же ошибки в рабочей среде, как и в промежуточной. Это изменение в рабочем параметре приведет к перезапуску.Используйте следующую команду, чтобы вновь установить
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>
На этом этапе в обоих слотах установлено
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0
.Используйте следующую команду, чтобы изменить
FUNCTIONS_EXTENSION_VERSION
и обновить промежуточный слот до новой версии среды выполнения:az functionapp config appsettings set --settings FUNCTIONS_EXTENSION_VERSION=~4 -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME>
Для среды выполнения функций версии 4.x требуется .NET 6 в Windows. В Linux приложения .NET также должны обновляться до .NET 6. Используйте следующую команду, чтобы среда выполнения была запущена в .NET 6:
При запуске в Windows также необходимо включить .NET 6.0, что требуется для среды выполнения версии 4.x.
az functionapp config set --net-framework-version v6.0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME>
.NET 6 требуется для приложений-функций на любом языке, работающем в Windows.
В этом примере замените
<APP_NAME>
именем приложения-функции и<RESOURCE_GROUP_NAME>
именем группы ресурсов.Если вашему проекту кода потребовались обновления, чтобы запускаться на версии 4.x, внедрите эти обновления на промежуточный слот.
Убедитесь, что приложение-функция работает правильно в обновленной промежуточной среде перед переключением.
Используйте следующую команду, чтобы заменить обновленный и предварительно подготовленный слот промежуточной среды на производственную среду.
az functionapp deployment slot swap -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME> --target-slot production
Важные изменения между версиями 3.x и 4.x
Ниже приведены ключевые критические изменения, которые следует учесть перед обновлением приложения 3.x до версии 4.x, включая критические изменения, относящиеся к языку. Полный список приведен в разделе о проблемах GitHub Функций Azure под названием Критическое изменение: утверждено.
Если вы не видите свой язык программирования, выберите его в списке в верхней части страницы.
Время выполнения
Azure Functions Прокси — это устаревшая функция для версий 1.x до 3.x среды выполнения Azure Functions. Поддержка прокси-серверов функций может быть повторно включена в версии 4.x, чтобы можно было успешно обновить приложения-функции до последней версии среды выполнения. Как можно скорее следует переключиться на интеграцию приложений-функций с Azure Управление API. Управление API позволяет воспользоваться преимуществами более полного набора функций для определения, защиты, администрации и монетизации API на основе Функций. Дополнительные сведения см. в разделе Управление API интеграции. Дополнительные сведения о том, как повторно включить поддержку прокси-серверов в Функциях версии 4.x, см. в статье "Повторное включение прокси-серверов" в Функциях версии 4.x.
Логирование в Azure Storage с помощью AzureWebJobsDashboard больше не поддерживается в версии 4.x. Вместо этого следует использовать Application Insights. (#1923)
Функции Azure 4.x теперь устанавливают требования к минимальной версии для расширений. Обновите до последней версии затронутых расширений. Для языков non-.NET обновите пакет расширений версии 2.x или более поздней версии. (#1987)
Таймауты по умолчанию и максимальные таймауты теперь применяются в версии 4.x для приложений-функций, работающих на Linux в плане потребления. (#1915)
Функции Azure 4.x используют
Azure.Identity
иAzure.Security.KeyVault.Secrets
для поставщика Хранилища ключей, а использование Microsoft.Azure.KeyVault устарело. Дополнительные сведения о настройке параметров приложения-функции см. в разделе "Управление хранилищем ключей". (#2048)Функциональные приложения, которые совместно используют учетные записи хранения, теперь не запускаются, если их идентификаторы хостов совпадают. Дополнительные сведения см. в разделе Рекомендации в отношении идентификаторов узла. (#2049)
Функции Azure 4.x поддерживает более новые версии .NET. См. Поддерживаемые языки в Azure Functions для полного списка версий.
InvalidHostServicesException
теперь является фатальной ошибкой. (#2045)EnableEnhancedScopes
включен по умолчанию. (#1954)Удалите
HttpClient
в качестве зарегистрированной службы. (#1911)
- Количество потоков по умолчанию обновлено. Функции, которые не являются потокобезопасными или имеют высокий объем памяти, могут быть затронуты. (#1962)