Перевод приложений с Функций Azure версии 3.x на версию 4.x
Функции Azure версии 4.x имеют высокую обратную совместимость с версией 3.x. Большинство приложений должны безопасно перенестися на 4.x, не требуя значительных изменений кода. Дополнительные сведения о версиях среды выполнения функций см. в Функции Azure обзоре версий среды выполнения.
Внимание
По состоянию на 13 декабря 2022 г. для приложений-функций, работающих в версиях 2.x и 3.x среды выполнения функций Azure, завершилась расширенная поддержка. Дополнительные сведения см. в разделе "Устаревшие версии".
В этой статье описывается процесс безопасной миграции приложения-функции для запуска в среде выполнения Функций версии 4.x. Так как инструкции по миграции проекта зависят от языка, обязательно выберите язык разработки из селектора в верхней части статьи.
Определение приложений-функций для миграции
Используйте следующий сценарий 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
В среде выполнения Функций версии 3.x приложение-функция C# предназначено для .NET Core 3.1 с помощью модели внутрипроцессной или .NET 5 с помощью изолированной рабочей модели.
При переносе приложения-функции у вас есть возможность выбрать целевую версию .NET. Проект C# можно обновить до одной из следующих версий .NET, поддерживаемых функциями версии 4.x:
Версия .NET | Тип выпуска политики поддержки .NET | Модельпроцесса функций 1,2 |
---|---|---|
.NET 9 | Предварительная версия3 | Изолированная рабочая модель |
.NET 8 | LTS (окончание поддержки 10 ноября 2026 г.) | Изолированная рабочая модель, Модель в процессе2 |
.NET 6 | LTS (окончание поддержки 12 ноября 2024 г.) | Изолированная рабочая модель, Модель в процессе2 |
.NET Framework 4.8 | См. политику | Изолированная рабочая модель |
1 Изолированная рабочая модель поддерживает долгосрочную поддержку (LTS) и стандартные версии .NET, а также платформа .NET Framework. Модель в процессе поддерживает только LTS-выпуски .NET, заканчивая .NET 8. Полное сравнение функций и функций двух моделей см. в разделе "Различия между процессом и изоляцией рабочего процесса .NET Функции Azure".
2 Поддержка заканчивается для модели в процессе 10 ноября 2026 года. Дополнительные сведения см . в этом объявлении о поддержке. Для непрерывной поддержки следует перенести приложения в изолированную рабочую модель.
3 . Дополнительные сведения о поддержке, текущих ограничениях и инструкциях по использованию предварительной версии см . в предварительной версии .NET в изолированной рабочей модели .
Совет
Рекомендуется обновить до .NET 8 в изолированной рабочей модели. .NET 8 — это полностью выпущенная версия с самым длинным окном поддержки из .NET.
Хотя вместо этого можно использовать модель в процессе, это не рекомендуется, если ее можно избежать. Поддержка будет завершена для модели в процессе 10 ноября 2026 года, поэтому перед этим вам потребуется перейти к изолированной рабочей модели. Это при миграции на версию 4.x уменьшит общее количество необходимых усилий, и изолированная рабочая модель даст вашему приложению дополнительные преимущества, включая возможность более легко использовать будущие версии .NET. При переходе к изолированной рабочей модели помощник по обновлению .NET также может обрабатывать многие необходимые изменения кода.
Это руководство не содержит конкретных примеров для .NET 6. Если вам нужно использовать эту версию, можно адаптировать примеры .NET 8.
Подготовка к переносу
Если вы еще не сделали этого, определите список приложений, которые необходимо перенести в текущей подписке Azure с помощью Azure PowerShell.
Прежде чем перенести приложение в среду выполнения функций версии 4.x, выполните следующие задачи:
- Просмотрите список критических изменений между версиями 3.x и 4.x.
- Выполните действия, описанные в разделе "Миграция локального проекта", чтобы перенести локальный проект в версию 4.x.
- После переноса проекта полностью протестируйте приложение локально с помощью версии 4.x Функции Azure 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 |
Привязки хранилища | ReplaceMicrosoft.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
управляет ведением журнала только из среды выполнения узла Функций и в изолированной рабочей модели некоторые из этих журналов приходят непосредственно из приложения, что дает вам больше контроля. Дополнительные сведения об фильтрации этих журналов см. в статье "Управление уровнями журналов в изолированной рабочей модели ".
Изменения имени класса
Некоторые классы ключей изменили имена между версиями. Эти изменения являются результатом изменений в API .NET или в различиях между процессом и изолированным рабочим процессом. В следующей таблице указаны ключевые классы .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
) см . в этих инструкциях.
Уровни журналов 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.
- Если вы используете Python 3.6, перейдите на одну из поддерживаемых версий.
Запуск средства проверки перед обновлением
Функции Azure предоставляет средство проверки перед обновлением, которое поможет выявить потенциальные проблемы при переносе приложения-функции в версию 4.x. Чтобы запустить средство проверки перед обновлением:
На портале Azure перейдите к своему приложению-функции.
Откройте страницу Диагностика и решение проблем
В средстве диагностики приложения-функция начните вводить текст
Functions 4.x Pre-Upgrade Validator
и выберите соответствующий пункт из списка.После завершения проверки просмотрите рекомендации и устраните выявленные проблемы в приложении. Если необходимо внести изменения в приложение, обязательно проверьте изменения в среде выполнения Функций версии 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 прокси-серверы — это устаревшая функция для версий 1.x до 3.x среды выполнения Функции Azure. Поддержка прокси-серверов функций может быть повторно включена в версии 4.x, чтобы можно было успешно обновить приложения-функции до последней версии среды выполнения. Как можно скорее следует переключиться на интеграцию приложений-функций с Azure Управление API. Управление API позволяет воспользоваться преимуществами более полного набора функций для определения, защиты, администрации и монетизации API на основе Функций. Дополнительные сведения см. в разделе Управление API интеграции. Дополнительные сведения о том, как повторно включить поддержку прокси-серверов в Функциях версии 4.x, см. в статье "Повторное включение прокси-серверов" в Функциях версии 4.x.
Ведение журнала для службы хранилища Azure с помощью 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
для поставщика Key Vault, а использование Microsoft.Azure.KeyVault не рекомендуется. Дополнительные сведения о настройке параметров приложения-функции см. в разделе "Управление хранилищем ключей". (#2048)Приложения-функции, совместно использующие учетные записи хранения, не запускаются, если их идентификаторы узлов совпадают. Дополнительные сведения см. в разделе Рекомендации в отношении идентификаторов узла. (#2049)
- Количество потоков по умолчанию обновлено. Функции, которые не являются потокобезопасными или имеют высокий объем памяти, могут быть затронуты. (#1962)