Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Importante
Java não é compatível com a versão 1.x do runtime do Azure Functions. Talvez você esteja procurando migrar seu aplicativo Java da versão 3.x para a versão 4.x. Se você estiver migrando um aplicativo de funções versão 1.x, selecione acima C# ou JavaScript.
Importante
O TypeScript não é compatível com a versão 1.x do runtime do Azure Functions. Provavelmente seria melhor migrar seu aplicativo TypeScript da versão 3.x para a versão 4.x. Se você estiver migrando um aplicativo de funções versão 1.x, selecione acima C# ou JavaScript.
Importante
O PowerShell não tem suporte na versão 1.x do runtime do Azure Functions. Provavelmente seria melhor migrar seu aplicativo PowerShell da versão 3.x para a versão 4.x. Se você estiver migrando um aplicativo de funções versão 1.x, selecione acima C# ou JavaScript.
Importante
Python não é compatível com a versão 1.x do runtime do Azure Functions. Talvez você esteja procurando migrar seu aplicativo Python da versão 3.x para a versão 4.x. Se você estiver migrando um aplicativo de funções versão 1.x, selecione acima C# ou JavaScript.
Importante
Support terminará para a versão 1.x do runtime do Azure Functions em 14 de setembro de 2026. É altamente recomendável migrar seus aplicativos para a versão 4.x seguindo as instruções neste artigo.
Este artigo descreve o processo de migração segura do aplicativo de funções para execução na versão 4.x do runtime do Functions. Como as instruções de migração de projeto são dependentes de linguagem, escolha a linguagem de desenvolvimento no seletor na parte superior do artigo.
Se você estiver executando a versão 1.x do runtime em Azure Stack Hub, consulte Considerations para Azure Stack Hub primeiro.
Identificar aplicativos de funções a serem migrados
Execute o seguinte script do PowerShell em Azure Cloud Shell para gerar uma lista de aplicativos de funções em sua assinatura que atualmente tem como destino a versão 1.x:
$FunctionApps = Get-AzFunctionApp
$AppInfo = @{}
foreach ($App in $FunctionApps)
{
$AppSettings = Get-AzFunctionAppSetting -Name $App.Name -ResourceGroupName $App.ResourceGroupName
if ($AppSettings.FUNCTIONS_EXTENSION_VERSION -like '*1*')
{
$AppInfo.Add($App.Name, $AppSettings.FUNCTIONS_EXTENSION_VERSION)
}
}
$AppInfo
Se você executar fora do Cloud Shell, primeiro deverá definir a assinatura ativa:
$Subscription = '<SUBSCRIPTION_ID>'
Set-AzContext -Subscription $Subscription | Out-Null
Neste exemplo, substitua '<SUBSCRIPTION_ID>' pela ID da sua assinatura.
Escolha sua versão de .NET de destino
Na versão 1.x do runtime do Functions, seu aplicativo de funções C# tem como destino .NET Framework.
Ao migrar seu aplicativo de funções, você tem a oportunidade de escolher a versão de destino do .NET. Você pode atualizar seu projeto em C# para uma das seguintes versões de .NET compatíveis com o Functions versão 4.x:
| .NET versão | Política Oficial de Suporte para Tipo de Versão do .NET | Modelo de processo de funções1,2 |
|---|---|---|
| .NET 10 | LTS (fim do suporte em 14 de novembro de 2028) | Modelo de trabalho isolado |
| .NET 9 | STS (fim do suporte 10 de novembro de 2026)3 | Modelo de trabalho isolado |
| .NET 8 | LTS (fim do suporte em 10 de novembro de 2026) |
Modelo de trabalho isolado, Modelo em processo2 |
| .NET Framework 4.8 | Consultar política | Modelo de trabalho isolado |
1 O modelo de trabalho isolado dá suporte a versões de LTS (Suporte a Longo Prazo) e STS (Suporte a Prazo Padrão) de .NET, bem como .NET Framework. O modelo in-process dá suporte apenas a versões LTS de .NET, terminando com .NET 8. Para obter uma comparação completa de recursos e funcionalidades entre os dois modelos, consulte as "Diferenças entre Funções do Azure .NET com o processo em execução e o processo de trabalho isolado".
2 O suporte para o modelo em processo termina em 10 de novembro de 2026. Para obter mais informações, confira este comunicado de suporte. Para obter suporte completo contínuo, você deve migrar seus aplicativos para o modelo de trabalho isolado.
3 .NET 9 anteriormente tinha uma data de fim de suporte esperada para 12 de maio de 2026. Durante a janela de serviço do .NET 9, a equipe do .NET estendeu o suporte para as versões STS para 24 meses, começando com o .NET 9. Para obter mais informações, consulte a postagem no blog.
Dica
A menos que seu aplicativo dependa de uma biblioteca ou API disponível apenas para .NET Framework, recomendamos atualizar para .NET 8 no modelo de trabalho isolado. Muitos aplicativos na versão 1.x têm como destino .NET Framework apenas porque era isso que estava disponível quando eles foram criados. Recursos adicionais estão disponíveis para versões mais recentes do .NET e, se o aplicativo não for forçado a permanecer no .NET Framework devido a uma dependência, você deverá direcionar uma versão mais recente. .NET 8 é a versão totalmente lançada com a janela de suporte mais longa do .NET.
Embora você possa optar por usar o modelo em processo, isso não é recomendado se ele puder ser evitado. O suporte terminará para o modelo em processo em 10 de novembro de 2026, portanto, você precisará migrar para o modelo de trabalho isolado antes disso. Ao fazer isso durante a migração para a versão 4.x, diminuirá o esforço total necessário, e o modelo de trabalhador isolado fornecerá ao seu aplicativo benefícios adicionais, incluindo a capacidade de direcionar mais facilmente versões futuras de .NET. Se você estiver migrando para o modelo de trabalho isolado, o .NET Assistente de Atualização também poderá lidar com muitas das alterações de código necessárias para você.
Este guia não apresenta exemplos específicos para .NET 10 (versão prévia) ou .NET 9. Se você precisar almejar uma dessas versões, poderá adaptar os exemplos do .NET 8.
Preparar para a migração
Caso ainda não tenha feito isso, identifique a lista de aplicativos que precisam ser migrados em sua assinatura de Azure atual usando o Azure PowerShell.
Antes de migrar um aplicativo para a versão 4.x do runtime do Functions, realize as seguintes tarefas:
- Revise a lista de alterações de comportamento após a versão 1.x. A migração da versão 1.x para a versão 4.x também pode afetar associações.
- Conclua as etapas em Migrar seu projeto local para migrar seu projeto local para a versão 4.x.
- Depois de migrar seu projeto, teste totalmente o aplicativo localmente usando a versão 4.x do Azure Functions Core Tools.
- Atualize seu aplicativo de funções em Azure para a nova versão. Se você precisar minimizar o tempo de inatividade, considere usar um slot staging para testar e verificar seu aplicativo migrado em Azure na nova versão de runtime. Em seguida, você pode implantar o aplicativo com as configurações de versão atualizadas no slot de produção. Para saber mais, consulte Atualizar usando slots.
- Publique seu projeto migrado para o aplicativo de funções atualizado.
Quando você usa Visual Studio para publicar um projeto versão 4.x em um aplicativo de funções existente em uma versão inferior, é solicitado que você permita que Visual Studio atualizar o aplicativo de funções para a versão 4.x durante a implantação. Essa atualização usa o mesmo processo definido em Atualizar sem slots.
Migrar seu projeto local
As seções a seguir descrevem as atualizações que você deve fazer nos arquivos de projeto do C# para poder executar em uma das versões com suporte do .NET no Functions versão 4.x. As atualizações mostradas são comuns à maioria dos projetos. O código do projeto pode exigir atualizações ignoradas neste artigo, especialmente ao usar pacotes NuGet personalizados.
Migrar um aplicativo de funções C# da versão 1.x para a versão 4.x do runtime do Functions exige que você faça alterações no código do projeto. Muitas dessas alterações são resultado de alterações na linguagem C# e apis de .NET.
Escolha a guia que corresponde à versão de destino do .NET e ao modelo de processo desejado (processo de trabalho em processo ou isolado).
Dica
Se você estiver migrando para uma versão LTS ou STS de .NET usando o modelo de trabalho isolado, o .NET Upgrade Assistant poderá ser usado para fazer muitas das alterações mencionadas automaticamente nas seções a seguir.
Arquivo do Projeto
O exemplo a seguir é um arquivo de projeto .csproj executado na versão 1.x:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net48</TargetFramework>
<AzureFunctionsVersion>v1</AzureFunctionsVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="1.0.24" />
</ItemGroup>
<ItemGroup>
<Reference Include="Microsoft.CSharp" />
</ItemGroup>
<ItemGroup>
<None Update="host.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="local.settings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<CopyToPublishDirectory>Never</CopyToPublishDirectory>
</None>
</ItemGroup>
</Project>
Use um dos procedimentos a seguir para atualizar esse arquivo XML a fim de executá-lo no Functions versão 4.x:
Essas etapas pressupõem um projeto em C# local; se seu aplicativo, em vez disso, usa o script C# (arquivos .csx ), você deve converter no modelo de projeto antes de continuar.
As seguintes alterações são necessárias no arquivo de projeto XML .csproj :
Defina o valor de
PropertyGroup:TargetFrameworkparanet8.0.Defina o valor de
PropertyGroup:AzureFunctionsVersionparav4.Adicione o seguinte elemento
OutputTypeaoPropertyGroup:<OutputType>Exe</OutputType>No
ItemGroup.PackageReferencelista, substitua a referência do pacote paraMicrosoft.NET.Sdk.Functionspelas seguintes referências:<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" />Anote todas as referências a outros pacotes nos namespaces
Microsoft.Azure.WebJobs.*. Você substituirá esses pacotes em uma etapa posterior.Adicione o novo
ItemGroupa seguir:<ItemGroup> <Using Include="System.Threading.ExecutionContext" Alias="ExecutionContext"/> </ItemGroup>
Depois que você fizer essas alterações, o projeto atualizado será semelhante ao seguinte exemplo:
<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>
Alterações de pacote e namespace
Com base no modelo para o qual você está migrando, talvez seja necessário atualizar ou alterar os pacotes aos quais o aplicativo faz referência. Ao adotar os pacotes de destino, talvez seja necessário atualizar o namespace das instruções de uso e alguns tipos que você referencia. Veja o efeito dessas alterações de namespace nas instruções using nos exemplos de modelos de gatilho HTTP mais adiante neste artigo.
Atualize seu projeto, caso ainda não tenha feito isso, para referenciar as versões estáveis mais recentes de:
Dependendo dos gatilhos e associações que seu aplicativo usa, talvez ele precise fazer referência a um conjunto diferente de pacotes. A seguinte tabela mostra as substituições de algumas das extensões mais usadas:
| Cenário | Alterações nas referências de pacote |
|---|---|
| Disparador de temporizador | Adicionar Microsoft.Azure. Functions.Worker.Extensions.Timer |
| Vinculações de armazenamento | SubstituaMicrosoft.Azure.WebJobs.Extensions.Storagepor Microsoft.Azure. Functions.Worker.Extensions.Storage.Blobs, Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues e Microsoft.Azure.Functions.Worker.Extensions.Tables |
| Vinculações de blob | Substitua referências aMicrosoft.Azure.WebJobs.Extensions.Storage.Blobspela versão mais recente de Microsoft.Azure. Functions.Worker.Extensions.Storage.Blobs |
| Vinculações de fila | Substitua referências aMicrosoft.Azure.WebJobs.Extensions.Storage.Queuespela versão mais recente de Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues |
| Vinculações de tabela | Substitua referências aMicrosoft.Azure.WebJobs.Extensions.Tablespela versão mais recente de Microsoft.Azure.Functions.Worker.Extensions.Tables |
| Vinculações do Cosmos DB | Substitua referências aMicrosoft.Azure.WebJobs.Extensions.CosmosDBe/ou Microsoft.Azure.WebJobs.Extensions.DocumentDBpela versão mais recente de Microsoft.Azure. Functions.Worker.Extensions.CosmosDB |
| vinculações Barramento de Serviço | Substitua referências aMicrosoft.Azure.WebJobs.Extensions.ServiceBuscom a versão mais recente de Microsoft.Azure. Functions.Worker.Extensions.ServiceBus |
| Vinculações dos Hubs de Eventos | Substitua referências aMicrosoft.Azure.WebJobs.Extensions.EventHubscom a versão mais recente de Microsoft.Azure. Functions.Worker.Extensions.EventHubs |
| Associações do Event Grid | Substitua referências aMicrosoft.Azure.WebJobs.Extensions.EventGridpela versão mais recente de Microsoft.Azure. Functions.Worker.Extensions.EventGrid |
| vinculações do Serviço SignalR | Substitua referências aMicrosoft.Azure.WebJobs.Extensions.SignalRServiceCom a versão mais recente de Microsoft.Azure. Functions.Worker.Extensions.SignalRService |
| Durable Functions | Substitua referências aMicrosoft.Azure.WebJobs.Extensions.DurableTaskcom a versão mais recente de Microsoft.Azure.Functions.Worker.Extensions.DurableTask |
| Durable Functions (provedor de armazenamento SQL) |
Substitua referências aMicrosoft.DurableTask.SqlServer.AzureFunctionscom a versão mais recente de Microsoft.Azure. Functions.Worker.Extensions.DurableTask.SqlServer |
| Funções Duráveis (Durable Functions) (provedor de armazenamento Netherite) |
Substitua referências aMicrosoft.Azure.DurableTask.Netherite.AzureFunctionspela versão mais recente de Microsoft.Azure. Functions.Worker.Extensions.DurableTask.Netherite |
| Vinculações do SendGrid | Substitua referências aMicrosoft.Azure.WebJobs.Extensions.SendGridcom a versão mais recente de Microsoft.Azure. Functions.Worker.Extensions.SendGrid |
| Vinculações do Kafka | Substitua referências aMicrosoft.Azure.WebJobs.Extensions.Kafkacom a versão mais recente de Microsoft.Azure. Functions.Worker.Extensions.Kafka |
| Configurações de bindings do RabbitMQ | Substitua referências aMicrosoft.Azure.WebJobs.Extensions.RabbitMQpela versão mais recente de Microsoft.Azure. Functions.Worker.Extensions.RabbitMQ |
| Injeção de dependência e configuração de inicialização |
Remover referências aMicrosoft.Azure.Functions.Extensions(O modelo de trabalho isolado fornece essa funcionalidade por padrão.) |
Confira as Associações com suporte para obter uma lista completa das extensões a serem consideradas, e confira a documentação de cada extensão para obter as instruções completas de instalação para o modelo de processo isolado. Certifique-se de instalar a versão estável mais recente de quaisquer pacotes que você estiver focando.
Dica
Quaisquer alterações nas versões de extensão durante esse processo podem exigir que você atualize seu arquivo host.json também. Certifique-se de ler a documentação de cada extensão que você usa.
Por exemplo, a extensão Barramento de Serviço tem alterações significativas na estrutura entre as versões 4.x e 5.x. Para obter mais informações, consulte Barramento de Serviço do Azure associações para Azure Functions.
Seu aplicativo de modelo de trabalho isolado não deve fazer referência a nenhum pacote nos namespaces Microsoft.Azure.WebJobs.* ou Microsoft.Azure.Functions.Extensions. Se você ainda tiver referências a eles, é preciso removê-las.
Dica
Seu aplicativo também pode depender de tipos de SDK do Azure, como parte de seus gatilhos e associações ou como uma dependência autônoma. Você também deve aproveitar essa oportunidade para atualizá-los. As versões mais recentes das extensões do Functions funcionam com as versões mais recentes do SDK do Azure para .NET, quase todos os pacotes dos quais estão no formato Azure.*.
Os Hubs de Notificação e as associações de Aplicativos Móveis são compatíveis apenas com a versão 1.x do runtime. Ao atualizar para a versão 4.x do runtime, você precisa remover essas associações para trabalhar com esses serviços diretamente usando seus SDKs.
Arquivo Program.cs
Na maioria dos casos, a migração exige que você adicione o seguinte arquivo program.cs ao seu projeto:
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();
Este exemplo inclui ASP.NET Core integração para melhorar o desempenho e fornecer um modelo de programação familiar quando seu aplicativo usa gatilhos HTTP. Se você não pretende usar gatilhos HTTP, pode substituir a chamada a ConfigureFunctionsWebApplication por uma chamada a ConfigureFunctionsWorkerDefaults. Se você fizer isso, poderá remover a referência a Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore do arquivo de projeto. No entanto, para obter o melhor desempenho, mesmo para funções com outros tipos de gatilho, você deve manter o FrameworkReference para ASP.NET Core.
O arquivo Program.cs substitui qualquer arquivo que tenha o FunctionsStartup atributo, que normalmente é um arquivo Startup.cs . Em locais onde seu FunctionsStartup código faria referência a IFunctionsHostBuilder.Services, você pode adicionar instruções dentro do método .ConfigureServices() do HostBuilder em seu Program.cs. Para saber mais sobre como trabalhar com Program.cs, consulte Inicialização e configuração no guia de modelo de trabalho isolado.
Os exemplos de Program.cs padrão descritos anteriormente incluem a instalação do Application Insights. Em seu Program.cs, você também deve configurar qualquer filtragem de log que deve ser aplicada a logs provenientes do código em seu projeto. No modelo de trabalho isolado, o arquivo host.json controla apenas os eventos emitidos pelo runtime do host do Functions. Se você não configurar regras de filtragem em Program.cs, poderá ver diferenças nos níveis de log presentes para várias categorias em sua telemetria.
Embora você possa registrar fontes de configuração personalizadas como parte da HostBuilder, elas se aplicam somente ao código em seu projeto. A plataforma também precisa de configuração de disparador e vínculo, e isso deve ser fornecido por meio das configurações do aplicativo, referências do Key Vault ou referências de App Configuration.
Depois de mover tudo de qualquer arquivo existente FunctionsStartup para o Program.cs , você pode excluir o FunctionsStartup atributo e a classe à qual ele foi aplicado.
Arquivo host.json
As configurações no arquivo host.json se aplicam no nível do aplicativo de funções, localmente e em Azure. Na versão 1.x, o arquivo host.json está vazio ou contém algumas configurações que se aplicam a todas as funções no aplicativo de funções. Para obter mais informações, confira Host.json v1. Se o arquivo host.json tiver valores de configuração, revise o formato host.json v2 para ver se há alterações.
Para executar na versão 4.x, você deve adicionar "version": "2.0" ao arquivo host.json. Você também deve considerar adicionar logging à sua configuração, como nos seguintes exemplos:
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
},
"enableLiveMetricsFilters": true
}
}
}
O arquivo host.json controla apenas o log do runtime do host do Functions e, no modelo de trabalhador isolado, alguns desses logs vêm diretamente da sua aplicação, oferecendo mais controle. Confira Gerenciamento de níveis de log no modelo de trabalho isolado para obter detalhes sobre como filtrar esses logs.
Arquivo local.settings.json
O arquivo local.settings.json só é usado durante a execução local. Para obter informações, confira Arquivo de configurações local. Na versão 1.x, o arquivo local.settings.json tem apenas dois valores necessários:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "AzureWebJobsStorageConnectionStringValue",
"AzureWebJobsDashboard": "AzureWebJobsStorageConnectionStringValue"
}
}
Ao migrar para a versão 4.x, verifique se o arquivo local.settings.json tem pelo menos os seguintes elementos:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "AzureWebJobsStorageConnectionStringValue",
"FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
}
}
Observação
Ao migrar da execução em processo para a execução em um processo de trabalho isolado, você precisa alterar o valor FUNCTIONS_WORKER_RUNTIME para "dotnet-isolated".
Alterações de nome de classe
Algumas classes de chave alteraram os nomes entre a versão 1.x e a versão 4.x. Essas alterações são resultado de mudanças nas APIs do .NET ou de diferenças entre o processo em execução e o processo de trabalho isolado. A tabela a seguir indica as principais classes de .NET usadas pelo Functions que podem ser alteradas ao migrar:
| Versão 1.x | .NET 8 |
|---|---|
FunctionName (atributo) |
Function (atributo) |
TraceWriter |
ILogger<T>, ILogger |
HttpRequestMessage |
HttpRequestData, HttpRequest (usando ASP.NET Core integration) |
HttpResponseMessage |
HttpResponseData, IActionResult (usando ASP.NET Core integration) |
Também pode haver diferenças de nome da classe nos vínculos. Para saber mais, consulte os artigos de referência das vinculações específicas.
Outras alterações de código
Esta seção destaca outras alterações de código a serem consideradas à medida que você trabalha com a migração. Essas alterações não são necessárias para todos os aplicativos, mas você deve avaliar se alguma é relevante para seus cenários. Verifique se há alterações de comportamento após a versão 1.x para obter alterações adicionais que talvez seja necessário fazer ao seu projeto.
Serialização JSON
Por padrão, o modelo de trabalho isolado usa System.Text.Json para serialização JSON. Para personalizar opções do serializador ou alternar para JSON.NET (Newtonsoft.Json), consulte Personalizando a serialização JSON.
Níveis de log e filtragem do Application Insights
Os logs podem ser enviados ao Application Insights tanto do runtime do host das Funções quanto do código em seu projeto. O host.json permite que você configure regras para log do host, mas para controlar os logs provenientes do seu código, você precisa configurar regras de filtragem como parte do Program.cs. Confira Gerenciamento de níveis de log no modelo de trabalho isolado para obter detalhes sobre como filtrar esses logs.
Modelo de gatilho HTTP
A maioria das alterações de código entre a versão 1.x e a versão 4.x pode ser vista em funções disparadas por HTTP. O modelo de gatilho HTTP para a versão 1.x é semelhante ao exemplo a seguir:
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
namespace Company.Function
{
public static class HttpTriggerCSharp
{
[FunctionName("HttpTriggerCSharp")]
public static async Task<HttpResponseMessage>
Run([HttpTrigger(AuthorizationLevel.AuthLevelValue, "get", "post",
Route = null)]HttpRequestMessage req, TraceWriter log)
{
log.Info("C# HTTP trigger function processed a request.");
// parse query parameter
string name = req.GetQueryNameValuePairs()
.FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
.Value;
if (name == null)
{
// Get request body
dynamic data = await req.Content.ReadAsAsync<object>();
name = data?.name;
}
return name == null
? req.CreateResponse(HttpStatusCode.BadRequest,
"Please pass a name on the query string or in the request body")
: req.CreateResponse(HttpStatusCode.OK, "Hello " + name);
}
}
}
Na versão 4.x, o modelo de gatilho HTTP é semelhante ao seguinte exemplo:
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"]}!");
}
}
}
Para atualizar seu projeto para Azure Functions 4.x:
Atualize a instalação local do Azure Functions Core Tools para a versão 4.x.
Mover para uma das versões do Node.js com suporte na versão 4.x.
Adicione elementos
versioneextensionBundleao host.json para que ele se pareça com o exemplo a seguir:{ "version": "2.0", "extensionBundle": { "id": "Microsoft.Azure.Functions.ExtensionBundle", "version": "[3.3.0, 4.0.0)" } }O elemento
extensionBundleé necessário porque, após a versão 1.x, as associações são mantidas como pacotes externos. Para obter mais informações, consulte Pacotes de extensão.Atualize o arquivo local.settings.json para que ele tenha pelo menos elementos a seguir:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "node" } }A configuração
AzureWebJobsStoragepode ser o emulador de armazenamento do Azurite ou uma conta de armazenamento Azure real. Para obter mais informações, confira Emulador de armazenamento local.
Atualizar seu aplicativo de funções no Azure
Você precisa atualizar o runtime do host do aplicativo de funções no Azure para a versão 4.x antes de publicar o projeto migrado. A versão de runtime usada pelo host do Functions é controlada pela configuração de aplicativo FUNCTIONS_EXTENSION_VERSION, mas em alguns casos outras configurações também precisam ser atualizadas. As alterações de código e as alterações nas configurações de aplicativo exigem que o aplicativo de funções seja reiniciado.
A maneira mais fácil é atualizar sem slots e, em seguida, republicar o projeto do aplicativo. Minimize também o tempo de inatividade no aplicativo e simplifique a reversão com a atualização por meio de slots.
Atualização sem slots
A maneira mais simples de atualizar para v4.x é definir a configuração do aplicativo FUNCTIONS_EXTENSION_VERSION como ~4 em seu aplicativo de funções em Azure. Siga um procedimento diferente em um site com slots.
az functionapp config appsettings set --settings FUNCTIONS_EXTENSION_VERSION=~4 -g <RESOURCE_GROUP_NAME> -n <APP_NAME>
Você também deve definir outra configuração, que difere entre Windows e Linux.
Ao executar no Windows, você também precisa habilitar .NET 8.0, que é exigido pela versão 4.x do runtime.
az functionapp config set --net-framework-version v8.0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME>
.NET 6 é necessário para aplicativos de funções em qualquer idioma em execução no Windows.
Neste exemplo, substitua <APP_NAME> pelo nome do aplicativo de funções e <RESOURCE_GROUP_NAME> pelo nome do grupo de recursos.
Agora você pode publicar novamente seu projeto de aplicativo que foi migrado para ser executado na versão 4.x.
Atualizar usando slots
Usar slots de implantação é uma boa maneira de atualizar seu aplicativo de funções para a execução v4.x a partir de uma versão anterior. Ao usar um slot de preparo, você pode executar seu aplicativo na nova versão do ambiente de execução no slot de preparo e alternar para a produção após a verificação. Os slots também fornecem uma maneira de minimizar o tempo de inatividade durante a atualização. Se precisar minimizar o tempo de inatividade, siga as etapas em Atualização com tempo de inatividade mínimo.
Depois de verificar o aplicativo no slot atualizado, você pode trocar o aplicativo e as configurações da nova versão para produção. Essa troca requer a configuração WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 no slot de produção. A maneira como você adiciona essa configuração afeta a quantidade de tempo de inatividade necessário para a atualização.
Atualização padrão
Se o aplicativo de funções habilitado para slots puder lidar com o tempo de inatividade de uma reinicialização completa, você poderá atualizar a configuração WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS diretamente no slot de produção. Como alterar essa configuração diretamente no slot de produção causa uma reinicialização que afeta a disponibilidade, considere fazer a alteração em um momento de tráfego reduzido. Em seguida, você pode inserir a versão atualizada a partir do slot de preparo.
No momento, o cmdlet do PowerShell Update-AzFunctionAppSetting não dá suporte a slots. Você deve usar CLI do Azure ou o portal Azure.
Use o seguinte comando para definir
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0no slot de produção:az functionapp config appsettings set --settings WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME>Neste exemplo, substitua
<APP_NAME>pelo nome do aplicativo de funções e<RESOURCE_GROUP_NAME>pelo nome do grupo de recursos. Esse comando faz com que o aplicativo em execução no slot de produção seja reiniciado.Use o seguinte comando para também definir
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONSno slot de preparo:az functionapp config appsettings set --settings WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME>Use o seguinte comando para alterar
FUNCTIONS_EXTENSION_VERSIONe atualizar o slot de teste para a nova versão do runtime:az functionapp config appsettings set --settings FUNCTIONS_EXTENSION_VERSION=~4 -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME>A versão 4.x do runtime do Functions requer .NET 6 em Windows. No Linux, .NET aplicativos também devem ser atualizados para .NET 6. Use o seguinte comando para que o runtime possa ser executado no .NET 6:
Ao executar no Windows, você também precisa habilitar .NET 8.0, que é exigido pela versão 4.x do runtime.
az functionapp config set --net-framework-version v8.0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME>.NET 6 é necessário para aplicativos de funções em qualquer idioma em execução no Windows.
Neste exemplo, substitua
<APP_NAME>pelo nome do aplicativo de funções e<RESOURCE_GROUP_NAME>pelo nome do grupo de recursos.Se o projeto de software necessitou de alguma atualização para ser executado na versão 4.x, implante essas atualizações no slot de teste agora.
Confirme se o aplicativo de função é executado corretamente no ambiente de teste atualizado antes da troca.
Use o seguinte comando para trocar o slot de preparação atualizado para a produção.
az functionapp deployment slot swap -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME> --target-slot production
Atualização com tempo de inatividade mínimo
Para minimizar o tempo de inatividade em seu aplicativo de produção, troque a configuração WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS do slot de preparação para a produção. Depois disso, você pode trocar pela versão atualizada de um slot de preparo pré-aquecido.
Use o seguinte comando para configurar
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0no slot de preparo:az functionapp config appsettings set --settings WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME>Use os comandos a seguir para colocar o slot com a nova configuração em produção e, ao mesmo tempo, restaurar a configuração da versão no slot de teste.
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>Você poderá ver erros do slot de preparo durante o período entre a troca e a versão de tempo de execução sendo restaurada no slot de preparo. Isso pode acontecer porque ter
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0apenas no ambiente de estágio durante uma substituição remove a configuraçãoFUNCTIONS_EXTENSION_VERSIONno ambiente de estágio. Sem a configuração da versão, o slot fica em um estado ruim. Atualizar a versão no slot de preparo depois da troca deve restaurar o slot para um estado adequado, e você pode reverter suas alterações se necessário. No entanto, qualquer reversão da troca também exige que você removaWEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0diretamente da produção antes de reverter para evitar os mesmos erros na produção observados na fase de testes. Essa alteração na configuração de produção causaria uma reinicialização.Use o seguinte comando para definir
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0novamente no slot de preparação:az functionapp config appsettings set --settings WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME>Neste ponto, ambos os slots têm
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0definido.Use o seguinte comando para alterar
FUNCTIONS_EXTENSION_VERSIONe atualizar o slot de teste para a nova versão do runtime:az functionapp config appsettings set --settings FUNCTIONS_EXTENSION_VERSION=~4 -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME>A versão 4.x do runtime do Functions requer .NET 6 em Windows. No Linux, .NET aplicativos também devem ser atualizados para .NET 6. Use o seguinte comando para que o runtime possa ser executado no .NET 6:
Ao executar no Windows, você também precisa habilitar .NET 8.0, que é exigido pela versão 4.x do runtime.
az functionapp config set --net-framework-version v8.0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME>.NET 6 é necessário para aplicativos de funções em qualquer idioma em execução no Windows.
Neste exemplo, substitua
<APP_NAME>pelo nome do aplicativo de funções e<RESOURCE_GROUP_NAME>pelo nome do grupo de recursos.Se o projeto de software necessitou de alguma atualização para ser executado na versão 4.x, implante essas atualizações no slot de teste agora.
Confirme se o aplicativo de função é executado corretamente no ambiente de teste atualizado antes da troca.
Use o seguinte comando para colocar o slot de preparo atualizado e pré-aquecido na produção:
az functionapp deployment slot swap -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME> --target-slot production
Alterações de comportamento após a versão 1.x
Esta seção detalha as alterações feitas após a versão 1.x em comportamentos de gatilho e de associação, bem como nos principais recursos e comportamentos do Functions.
Alterações nos gatilhos e associações
A partir da versão 2.x, é necessário instalar as extensões de ligações e gatilhos específicos usadas pelas funções em seu aplicativo. A única exceção para isso são os gatilhos de temporizador e HTTP, que não exigem uma extensão. Para obter mais informações, confira Registrar e instalar extensões de associação.
Também há algumas alterações no function.json ou em atributos da função entre as versões. Por exemplo, a propriedade path do Hubs de Eventos agora é eventHubName. Veja a tabela de associação existente para obter links para a documentação de cada associação.
Alterações nos recursos e funcionalidades
Alguns recursos foram removidos, atualizados ou substituídos após a versão 1.x. Esta seção detalha as mudanças aplicadas às versões mais recentes após ter usado a versão 1.x.
As seguintes alterações foram feitas na versão 2.x:
As chaves para chamar endpoints HTTP são sempre armazenadas criptografadas no Armazenamento Blob do Azure. Na versão 1.x, as chaves eram armazenadas em Arquivos do Azure por padrão. Quando você migra um aplicativo da versão 1.x para a versão 2.x, os segredos existentes que estão em Arquivos do Azure são redefinidos.
A versão 2.x do runtime não inclui suporte embutido para provedores de webhook. Essa alteração foi feita para melhorar o desempenho. Você ainda pode usar gatilhos HTTP como pontos de extremidade para webhooks.
Para melhorar o monitoramento, o painel WebJobs no portal, que usou a configuração
AzureWebJobsDashboard, é substituído por Aplicativo Azure Insights, que usa a configuraçãoAPPINSIGHTS_INSTRUMENTATIONKEY. Para obter mais informações, consulte Monitor Azure Functions.Todas as funções em um aplicativo de funções devem compartilhar a mesma linguagem de programação. Quando você cria um aplicativo de funções, você deve escolher para ele uma pilha de runtime. A pilha de runtime é especificada pelo valor
FUNCTIONS_WORKER_RUNTIMEnas configurações do aplicativo. Esse requisito foi adicionado para melhorar a pegada e o tempo de inicialização. Ao desenvolver localmente, você também deve incluir essa configuração no arquivo local.settings.json.O tempo limite padrão para as funções em um plano do Serviço de Aplicativo foi alterado para 30 minutos. Você pode alterar manualmente o tempo limite para ilimitado, usando a configuração functionTimeout em host.json.
Restrições de simultaneidade HTTP são implementadas por padrão para funções de plano de consumo, com um padrão de 100 solicitações simultâneas por instância. Você pode alterar esse comportamento na configuração
maxConcurrentRequestsno arquivo host.json.Devido às limitações do .NET Core, o suporte para funções de script F# (arquivos
.fsx) foi removido. Funções F# compiladas (.fs) ainda são compatíveis.O formato da URL dos webhooks de acionador da Grade de Eventos foi alterado para seguir este padrão:
https://{app}/runtime/webhooks/{triggerName}.Os nomes de algumas métricas personalizadas predefinidas foram alterados após a versão 1.x.
Durationfoi substituído porMaxDurationMs,MinDurationMseAvgDurationMs.Success Ratetambém foi renomeadoSuccess Rate.
Considerações sobre Azure Stack Hub
App Service no Azure Stack Hub não dá suporte à versão 4.x de Azure Functions. Ao planejar uma migração da versão 1.x em Azure Stack Hub, você pode escolher uma das seguintes opções:
- Migre para a versão 4.x hospedada na nuvem pública Azure Functions usando as instruções neste artigo. Em vez de atualizar seu aplicativo existente, você criaria um novo aplicativo usando a versão 4.x e, em seguida, implantaria seu projeto modificado nele.
- Alterne para WebJobs hospedado em um plano do Serviço de Aplicativo no Azure Stack Hub.