Partilhar via


Migrar aplicativos do plano de consumo para o plano Flex Consumption

Este artigo fornece instruções passo a passo para migrar seus aplicativos de função existentes hospedados no plano de Consumo no Azure Functions para, em vez disso, usar o plano de Consumo Flex.

A maneira como você migra seu aplicativo para o plano Flex Consumption depende se seu aplicativo é executado no Linux ou no Windows. Certifique-se de selecionar seu sistema operacional na parte superior do artigo.

Sugestão

O Azure Functions fornece comandos da CLI do Azure que az functionapp flex-migration automatizam a maioria das etapas necessárias para mover seu aplicativo Linux do plano Consumo para o plano Consumo Flex. Este artigo apresenta esses comandos, que atualmente são suportados apenas para aplicativos executados no Linux.

Quando você migra seus aplicativos sem servidor existentes, suas funções podem aproveitar estes benefícios do plano Flex Consumption:

  • Desempenho aprimorado: seus aplicativos se beneficiam de escalabilidade aprimorada e instâncias sempre prontas para reduzir os impactos de inicialização a frio.
  • Controlos melhorados: ajuste as suas funções com definições de escalonamento e simultaneidade por função.
  • Rede expandida: integração de rede virtual e terminais privados permitem-lhe executar as suas funções em redes públicas e privadas.
  • Investimento futuro na plataforma: como o principal plano de hospedagem sem servidor, os investimentos atuais e futuros são feitos no Flex Consumption primeiro para estabilidade, desempenho e recursos da plataforma.

O plano Flex Consumption é a opção de hospedagem sem servidor recomendada para suas funções no futuro. Para obter mais informações, consulte Benefícios do plano Flex Consumption. Para obter uma comparação detalhada entre os planos de hospedagem, consulte Opções de hospedagem do Azure Functions.

Considerações

Antes de iniciar uma migração, tenha estas considerações em mente:

  • Se estiver a executar aplicações da função Plano de consumo em regiões do Azure Governamental, reveja agora estas orientações para se preparar para a migração até que o Flex Consumption esteja ativado no Azure Government.

  • Devido às diferenças significativas de configuração e comportamento entre os dois planos, não é possível mudar um aplicativo de plano de consumo existente para o plano de consumo flexível. Em vez disso, o processo de migração faz com que você crie um novo aplicativo do plano Flex Consumption equivalente ao seu aplicativo atual. Este novo aplicativo é executado no mesmo grupo de recursos e com as mesmas dependências do seu aplicativo atual.

  • Você deve priorizar a migração de seus aplicativos que são executados em um plano de consumo no Linux.

  • Este artigo pressupõe que você tenha uma compreensão geral dos conceitos e arquiteturas do Functions e esteja familiarizado com os recursos de seus aplicativos que estão sendo migrados. Esses conceitos incluem gatilhos e associações, autenticação e personalização de rede.

  • Este artigo mostra como avaliar o aplicativo atual e implantar seu novo aplicativo do plano Flex Consumption usando o portal do Azure ou a CLI do Azure. Se a implantação atual do aplicativo for definida usando infraestrutura como código (IaC), você geralmente poderá seguir as mesmas etapas. Você pode executar as mesmas ações diretamente em seus modelos ARM ou arquivos Bicep, com estas considerações específicas de recursos:

Pré-requisitos

  • Acesso à assinatura do Azure que contém um ou mais aplicativos de função para migrar. A conta usada para executar comandos da CLI do Azure deve ser capaz de:

    • Crie e gerencie aplicativos funcionais e planos de hospedagem do Serviço de Aplicativo.
    • Atribua funções a identidades gerenciadas.
    • Crie e gerencie contas de armazenamento.
    • Crie e gerencie recursos do Application Insights.
    • Aceda a todos os recursos dependentes da sua aplicação, como o Azure Key Vault, o Azure Service Bus ou os Hubs de Eventos do Azure.

    Geralmente, ser atribuído às funções de Proprietário ou Colaborador no seu grupo de recursos fornece permissões suficientes.

  • CLI do Azure, versão v2.77.0 ou uma versão posterior. Os scripts são testados usando a CLI do Azure no Azure Cloud Shell.

  • A extensão resource-graph , que você pode instalar usando o az extension add comando:

    az extension add --name resource-graph
    
  • A jq ferramenta, que é usada para trabalhar com saída JSON.

Identificar potenciais aplicações para migrar

Use estas etapas para criar uma lista dos aplicativos de função que você precisa migrar. Nesta lista, anote seus nomes, grupos de recursos, locais e pilhas de tempo de execução. Em seguida, você pode repetir as etapas neste guia para cada aplicativo que decidir migrar para o plano Flex Consumption.

A maneira como as informações do aplicativo de função são mantidas depende se seu aplicativo é executado no Linux ou no Windows.

Para aplicativos de consumo do Linux, use o novo az functionapp flex-migration list comando para identificar aplicativos qualificados para migração:

az functionapp flex-migration list

Este comando verifica automaticamente sua assinatura e retorna duas matrizes:

  • eligible_apps: Aplicativos de consumo do Linux que podem ser migrados para o Flex Consumption. Estas aplicações são compatíveis com o Flex Consumption.
  • ineligible_apps: Aplicativos que não podem ser migrados, juntamente com os motivos específicos. As razões da incompatibilidade devem ser analisadas e abordadas antes de continuar.

A saída inclui o nome do aplicativo, o grupo de recursos, o local e a pilha de tempo de execução para cada aplicativo, juntamente com o status de elegibilidade e as informações de preparação para a migração.

Use este az graph query comando para listar todas as aplicações de função na sua subscrição que estão a ser executadas num Plano de Consumo.

az graph query -q "resources | where subscriptionId == '$(az account show --query id -o tsv)' \
   | where type == 'microsoft.web/sites' | where ['kind'] == 'functionapp' | where properties.sku == 'Dynamic' \
   | project name, location, resourceGroup" \
   --query data --output table

Este comando gera uma tabela com o nome da aplicação, a localização e o grupo de recursos para todas as aplicações de Consumo em execução no Windows na subscrição atual.

Você será solicitado a instalar a extensão de gráfico de recursos, se ela ainda não estiver instalada.

Avaliar seu aplicativo existente

Antes de migrar para o plano Flex Consumption, você deve executar estas verificações para garantir que seu aplicativo de função possa ser migrado com êxito:

Confirmar compatibilidade de região

Confirme se o plano Flex Consumption é atualmente suportado na mesma região que a aplicação Plano de consumo que pretende migrar.

Confirmado: Quando a saída do az functionapp flex-migration list comando tem seu aplicativo na eligible_apps lista, o plano Flex Consumption é suportado na mesma região usada pelo seu aplicativo Linux Consumption atual. Nesse caso, pode continuar a verificar a compatibilidade do stack de linguagem.

Ação necessária: Quando a saída do az functionapp flex-migration list comando tiver seu aplicativo na ineligible_apps lista, você verá uma mensagem de erro informando The site '<name>' is not in a region supported in Flex Consumption. Please see the list regions supported in Flex Consumption by running az functionapp list-flexconsumption-locations. Nesse caso, o plano Flex Consumption ainda não é suportado na região usada pelo seu aplicativo Linux Consumption atual.

Use este az functionapp list-flexconsumption-locations comando para listar todas as regiões onde o plano Flex Consumption está disponível:

az functionapp list-flexconsumption-locations --query "sort_by(@, &name)[].{Region:name}" -o table

Este comando gera uma tabela de regiões do Azure onde o plano Flex Consumption é suportado atualmente.

Se sua região não for suportada no momento e você ainda optar por migrar seu aplicativo funcional, seu aplicativo deverá ser executado em uma região diferente onde o plano Flex Consumption é suportado. No entanto, executar seu aplicativo em uma região diferente de outros serviços conectados pode introduzir latência extra. Certifique-se de que a nova região possa atender aos requisitos de desempenho do seu aplicativo antes de concluir a migração.

Verificar a compatibilidade do stack de linguagens

Os planos do Flex Consumption ainda não suportam todas as pilhas de linguagem do Functions. Esta tabela indica quais pilhas de idiomas são suportadas no momento:

Configuração da pilha Nome da pilha Suportado
dotnet-isolated .NET (modelo de trabalho isolado) ✅ Sim
node JavaScript/TypeScript ✅ Sim
java Java ✅ Sim
python Python ✅ Sim
powershell PowerShell ✅ Sim
dotnet .NET (modelo em processo) ❌ Não
custom Manipuladores personalizados ✅ Sim

Confirmado: Se o comando az functionapp flex-migration list incluiu a tua aplicação na lista eligible_apps, a tua aplicação Linux Consumption já está a utilizar um stack de linguagem suportado pelo Flex Consumption e podes continuar a verificar a compatibilidade da versão do stack.

Ação necessária: Se o az functionapp flex-migration list comando incluiu seu aplicativo na ineligible_apps lista com uma mensagem de erro informando Runtime '<name>' not supported for function apps on the Flex Consumption plan., seu aplicativo Linux Consumption ainda não está executando um tempo de execução suportado pelo Flex Consumption.

Se a sua aplicação de funções estiver a utilizar uma pilha de tempo de execução sem suporte:

Verificar a compatibilidade da versão da pilha

Antes de migrar, você deve certificar-se de que a versão da pilha de tempo de execução do seu aplicativo é suportada ao executar em um plano de consumo flexível na região atual.

Confirmado: Se o az functionapp flex-migration list comando incluiu seu aplicativo na eligible_apps lista, seu aplicativo de Consumo do Linux já está usando uma versão de pilha de idiomas suportada pelo Flex Consumption e você pode continuar a Verificar o uso de slots de implantação.

Ação necessária: Se o az functionapp flex-migration list comando incluiu seu aplicativo na ineligible_apps lista com uma mensagem de erro informando Invalid version {0} for runtime {1} for function apps on the Flex Consumption plan. Supported versions for runtime {1} are {2}., seu aplicativo Linux Consumption ainda não está executando um tempo de execução suportado pelo Flex Consumption.

Use este az functionapp list-flexconsumption-runtimes comando para verificar o suporte do plano Flex Consumption para sua versão da pilha de idiomas em uma região específica:

az functionapp list-flexconsumption-runtimes --location <REGION> --runtime <LANGUAGE_STACK> --query '[].{version:version}' -o tsv

Neste exemplo, substitua <REGION> pela sua região atual e <LANGUAGE_STACK> por um destes valores:

Pilha de idiomas Valor
C# (modelo de trabalhador isolado) dotnet-isolated
Java java
Javascript node
PowerShell powershell
Píton python
TypeScript node

Este comando exibe todas as versões da pilha de idiomas especificada suportada pelo plano Flex Consumption na sua região.

Se a sua aplicação de função usa uma versão de stack de linguagem sem suporte, deve primeiro atualizar o código da aplicação para uma versão suportada antes de migrar para o plano Flex Consumption.

Verificar o uso de slots de implementação

Os aplicativos de plano de consumo podem ter um slot de implantação definido. Para obter mais informações, consulte Slots de implantação do Azure Functions. No entanto, o plano Flex Consumption atualmente não suporta slots de implantação. Antes de migrar, você deve determinar se seu aplicativo tem um slot de implantação. Em caso afirmativo, você precisa definir uma estratégia de como gerenciar seu aplicativo sem slots de implantação ao executar em um plano Flex Consumption.

Confirmado: Quando a sua aplicação atual tem slots de implementação ativados, o comando az functionapp flex-migration list mostra a sua aplicação de função na lista eligible_apps sem aviso, continue para Verificar o uso de certificados.

Ação necessária: Seu aplicativo atual tem slots de implantação habilitados, o az functionapp flex-migration list comando mostra seu aplicativo de função na eligible_apps lista, mas adiciona um aviso que afirma: The site '<name>' has slots configured. This will not block migration, but please note that slots are not supported in Flex Consumption.

Use este az functionapp deployment slot list comando para listar todos os slots de implantação definidos em seu aplicativo de função:

az functionapp deployment slot list --name <APP_NAME> --resource-group <RESOURCE_GROUP> --output table

Neste exemplo, substitua <RESOURCE_GROUP> e <APP_NAME> pelo nome do grupo de recursos e nome do aplicativo, respectivamente. Se o comando retornar uma entrada, seu aplicativo terá slots de implantação habilitados.

Se a sua aplicação de funções estiver atualmente a usar slots de implantação, não poderá reproduzir esta funcionalidade no plano Flex Consumption. Antes de migrar, você deve:

  • Considere rearquitetar seu aplicativo para usar aplicativos de função separados. Dessa forma, você pode desenvolver, testar e implantar seu código de função em um segundo aplicativo de não produção em vez de usar slots, ou
  • Migre qualquer novo código ou funcionalidades do slot de implementação para o slot principal (produção).

Verificar o uso de certificados

Os certificados TLS (Transport Layer Security), anteriormente conhecidos como certificados SSL (Secure Sockets Layer), são usados para ajudar a proteger as conexões com a Internet. Os certificados TSL/SSL, que incluem certificados gerenciados, BYOC (traga seu próprio) ou certificados de chave pública, não são atualmente suportados pelo plano Flex Consumption.

Confirmado: Se o comando az functionapp flex-migration list incluiu o seu aplicativo na lista eligible_apps, o seu aplicativo de Consumo Linux já não está a usar certificados e pode continuar a verificar os seus disparadores de armazenamento de Blob .

Ação necessária: Se o az functionapp flex-migration list comando incluiu seu aplicativo na lista com uma mensagem de erro informando ineligible_apps ou The site '<name>' is using TSL/SSL certificates. TSL/SSL certificates are not supported in Flex Consumption., seu aplicativo Linux Consumption ainda não é compatível com o The site '<name>' has the WEBSITE_LOAD_CERTIFICATES app setting configured. Certificate loading is not supported in Flex Consumption. Flex Consumption.

Use o az webapp config ssl list comando para listar todos os certificados TSL/SSL disponíveis para seu aplicativo de função:

az webapp config ssl list --resource-group <RESOURCE_GROUP>  

Neste exemplo, substitua <RESOURCE_GROUP> pelo nome do grupo de recursos. Se esse comando produzir saída, é provável que seu aplicativo esteja usando certificados.

Se o seu aplicativo atualmente depende de certificados TSL/SSL, você não deve prosseguir com a migração até que o suporte para certificados seja adicionado ao plano Flex Consumption.

Verificar os gatilhos do Blob Storage

Atualmente, o plano Flex Consumption dá suporte apenas a gatilhos baseados em eventos para o armazenamento de Blob do Azure, que são definidos com uma Source configuração de EventGrid. Os gatilhos de armazenamento de blobs que usam a sondagem de contentores e uma configuração de Source não são suportados em LogsAndContainerScan no Flex Consumption. Como a sondagem de contentores é o padrão, você deve determinar se algum dos gatilhos para armazenamento Blob está usando a configuração de origem padrão LogsAndContainerScan. Para obter mais informações, consulte Gatilho num contentor de blobs.

Confirmado: Se o az functionapp flex-migration list comando incluiu a sua aplicação na eligible_apps lista, a sua aplicação de Consumo do Linux já não usa gatilhos de armazenamento de blobs com EventGrid como origem. Você pode continuar a considerar serviços dependentes.

Ação necessária: Se o az functionapp flex-migration list comando incluiu seu aplicativo na lista com uma mensagem de erro informando ineligible_apps, seu aplicativo Linux Consumption ainda não é compatível com o The site '<name>' has blob storage trigger(s) that don't use Event Grid as the source: <list> Flex Consumption only supports Event Grid-based blob triggers. Please convert these triggers to use Event Grid or replace them with Event Grid triggers before migration. Flex Consumption.

Use este comando [az functionapp function list] para determinar se seu aplicativo tem gatilhos de armazenamento de Blob que não usam a Grade de Eventos como origem:

az functionapp function list  --name <APP_NAME> --resource-group <RESOURCE_GROUP> \
  --query "[?config.bindings[0].type=='blobTrigger' && config.bindings[0].source!='EventGrid'].{Function:name,TriggerType:config.bindings[0].type,Source:config.bindings[0].source}" \
  --output table

Neste exemplo, substitua <RESOURCE_GROUP> e <APP_NAME> pelo nome do grupo de recursos e nome do aplicativo, respectivamente. Se o comando retornar linhas, haverá pelo menos um gatilho usando sondagem de contêiner em seu aplicativo de função.

Se a sua aplicação tiver gatilhos de armazenamento de Blob que não tenham uma fonte de Grelha de Eventos, deve mudar para uma fonte de Grelha de Eventos antes de migrar para o Plano de Consumo Flex.

As etapas básicas para alterar um gatilho de armazenamento de Blob existente para uma origem do Event Grid são:

  1. Adicione ou atualize a propriedade na definição de gatilho do seu armazenamento de Blob para source e reimplante a aplicação.

  2. Crie a URL do ponto de extremidade em seu aplicativo de função usado para ser usado pela assinatura do evento.

  3. Crie uma assinatura de evento em seu contêiner de armazenamento de Blob.

Para obter mais informações, consulte Tutorial: Acionar o Azure Functions em contêineres de blob usando uma assinatura de evento.

Considerar serviços dependentes

Como o Azure Functions é um serviço de computação, você deve considerar o efeito da migração nos dados e serviços a montante e a jusante do seu aplicativo.

Estratégias de proteção de dados

Aqui estão algumas estratégias para proteger os dados upstream e downstream durante a migração:

  • Idempotência: Certifique-se de que suas funções podem processar com segurança a mesma mensagem várias vezes sem efeitos colaterais negativos. Para obter mais informações, consulte Projetando o Azure Functions para entrada idêntica.
  • Registro e monitoramento: habilite o registro detalhado em ambos os aplicativos durante a migração para rastrear o processamento de mensagens. Para obter mais informações, consulte Monitorar execuções no Azure Functions.
  • Ponto de Verificação: Para gatilhos de streaming, como o gatilho do Hubs de Eventos, implemente comportamentos corretos de ponto de verificação para monitorar a posição de processamento. Para obter mais informações, consulte Processamento de eventos confiável do Azure Functions.
  • Processamento paralelo: considere executar temporariamente ambos os aplicativos em paralelo durante a substituição. Certifique-se de monitorar e validar cuidadosamente como os dados são processados a partir do serviço upstream. Para obter mais informações, consulte Padrão ativo-ativo para funções de disparador não-HTTPS.
  • Transferência gradual: para sistemas de alto volume, considere implementar uma substituição gradual redirecionando partes do tráfego para o novo aplicativo. Você pode gerenciar o roteamento de solicitações upstream de seus aplicativos usando serviços como o Gerenciamento de API do Azure ou o Gateway de Aplicativo do Azure.

Atenuações por tipo de gatilho

Você deve planejar estratégias de mitigação para proteger os dados para os gatilhos de função específicos que você pode ter em seu aplicativo:

Acionador Risco para os dados Estratégia
Armazenamento de Blobs em Azure Alto Crie um contêiner separado para o gatilho baseado em evento no novo aplicativo.
Com o novo aplicativo em execução, alterne os clientes para usar o novo contêiner.
Permita que o contêiner original seja processado completamente antes de parar o aplicativo antigo.
Azure Cosmos DB Alto Crie um contêiner de concessão dedicado especificamente para o novo aplicativo.
Defina este novo contentor de leasing como a configuração leaseCollectionName na sua nova aplicação.
Requer que as tuas funções sejam idempotentes ou que sejas capaz de lidar com os resultados do processamento de feed de alterações duplicado.
Defina a StartFromBeginning configuração como false no novo aplicativo para evitar o reprocessamento de todo o feed.
Grade de Eventos do Azure Médio Recrie a mesma assinatura de evento no novo aplicativo.
Requer que suas funções sejam idempotentes ou você deve ser capaz de lidar com os resultados do processamento de eventos duplicados.
Hubs de Eventos do Azure Médio Crie um novo grupo de consumidores para uso pelo novo aplicativo. Para obter mais informações, consulte Estratégias de migração para gatilhos de grade de eventos.
Barramento de Serviço do Azure Alto Crie um novo tópico ou fila para uso pelo novo aplicativo.
Atualize os remetentes e os clientes para usarem o novo tópico ou fila.
Depois que o tópico original estiver vazio, desligue o aplicativo antigo.
Fila de armazenamento do Azure Alto Crie uma nova fila para uso pelo novo aplicativo.
Atualize todos os remetentes e clientes para utilizarem a nova fila.
Depois que a fila original estiver vazia, desligue o aplicativo antigo.
HTTP Baixo Lembre-se de alternar clientes e outros aplicativos ou serviços para direcionar os novos pontos de extremidade HTTP após a migração.
Temporizador Baixo Durante a transição, certifique-se de compensar a programação do temporizador entre as duas aplicações para evitar execuções simultâneas de ambas as aplicações.
Desative o gatilho de temporizador no aplicativo antigo depois que o novo aplicativo for executado com êxito.

Iniciar a migração para Linux

O comando az functionapp flex-migration start coleta automaticamente informações de configuração do aplicativo e cria um novo aplicativo Flex Consumption com as mesmas configurações do aplicativo de origem. Use o comando como mostrado neste exemplo:

az functionapp flex-migration start \
    --source-name <SOURCE_APP_NAME> \
    --source-resource-group <SOURCE_RESOURCE_GROUP> \
    --name <NEW_APP_NAME> \
    --resource-group <RESOURCE_GROUP>

Neste exemplo, substitua esses espaços reservados pelos valores indicados:

Marcador de posição Valor
<SOURCE_APP_NAME> O nome do seu aplicativo original.
<SOURCE_RESOURCE_GROUP> O grupo de recursos do aplicativo original.
<NEW_APP_NAME> O nome do novo aplicativo.
<RESOURCE_GROUP> O grupo de recursos do novo aplicativo.

O az functionapp flex-migration start comando executa estas tarefas básicas:

  • Avalia a compatibilidade do seu aplicativo de origem com o plano de hospedagem Flex Consumption.
  • Cria um aplicativo de função no plano Flex Consumption.
  • Migra a maioria das configurações, incluindo configurações de aplicativos, atribuições de identidade, montagens de armazenamento, configurações de CORS, domínios personalizados e restrições de acesso.

Opções de comando

O comando migration suporta várias opções para personalizar a migração:

Opção Descrição
--storage-account Especificar uma conta de armazenamento diferente para o novo aplicativo
--maximum-instance-count Definir o número máximo de instâncias para dimensionamento
--skip-access-restrictions Ignorar as restrições de acesso IP durante a migração
--skip-cors Ignorar a migração de configurações de CORS
--skip-hostnames Ignorar a migração de domínios personalizados
--skip-managed-identities Ignorar a migração de configurações de identidade gerenciada
--skip-storage-mount Ignorar a migração de configurações de montagem de armazenamento

Para obter opções de comando completas, use az functionapp flex-migration start --help.

Depois de concluir a execução az functionapp flex-migration start com êxito, continue para Obter o pacote de implantação de código.

Tarefas de pré-migração

Antes de prosseguir com a migração, você deve coletar informações importantes e recursos usados pelo aplicativo Plano de consumo para ajudar a fazer uma transição suave para a execução no plano Flex Consumption.

Você deve concluir estas tarefas antes de migrar seu aplicativo para ser executado em um plano Flex Consumption:

Coletar configurações do aplicativo

Se você planeja usar o mesmo gatilho e vincula fontes e outras configurações das configurações do aplicativo, primeiro anote as configurações atuais do aplicativo em seu aplicativo de plano de consumo existente.

Use este az functionapp config appsettings list comando para retornar um app_settings objeto que contém a configuração de aplicativo existente como JSON:

app_settings=$(az functionapp config appsettings list --name `<APP_NAME>` --resource-group `<RESOURCE_GROUP>`)
echo $app_settings

Neste exemplo, substitua <RESOURCE_GROUP> e <APP_NAME> pelo nome do grupo de recursos e nome do aplicativo, respectivamente.

Atenção

As definições da aplicação contêm frequentemente chaves e outros segredos partilhados. Armazene sempre as definições das aplicações de forma segura, idealmente encriptadas. Para maior segurança, você deve usar a autenticação Microsoft Entra ID com identidades gerenciadas no novo aplicativo do plano Flex Consumption em vez de segredos compartilhados.

Coletar configurações de aplicativos

Existem outras configurações de aplicativos que não são encontradas nas configurações do aplicativo. Você também deve capturar essas configurações do seu aplicativo existente para ter certeza de recriá-las corretamente no novo aplicativo.

Reveja estas definições. Se algum deles existir no aplicativo atual, você deve decidir se eles também devem ser recriados no novo aplicativo do plano Flex Consumption:

Configuração Configurações Comentário
Configurações do CORS cors Determina quaisquer configurações existentes de compartilhamento de recursos entre origens (CORS) que seus clientes possam precisar.
Domínios personalizados Se o seu aplicativo estiver usando um domínio diferente do *.azurewebsites.net, você precisará substituir esse mapeamento de domínio personalizado por um mapeamento para o novo aplicativo.
Versão HTTP http20Enabled Determina se HTTP 2.0 é exigido pelo seu aplicativo.
Apenas HTTPS httpsOnly Determina se o TSL/SSL é necessário para acessar seu aplicativo.
Certificados de cliente recebidos clientCertEnabled
clientCertMode
clientCertExclusionPaths
Define requisitos para solicitações de cliente que usam certificados para autenticação.
Limite máximo de expansão WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT Define o limite de instâncias escaladas. O valor máximo padrão é 200. Esse valor é encontrado nas configurações do seu aplicativo, mas em um aplicativo do plano Flex Consumption ele é adicionado como uma configuração de site (maximumInstanceCount).
Versão mínima de entrada do TLS minTlsVersion Define uma versão mínima do TLS exigida pelo seu aplicativo.
Cifra TLS mínima de entrada minTlsCipherSuite Define um requisito mínimo de codificação TLS para seu aplicativo.
Compartilhamentos de Arquivos do Azure montados azureStorageAccounts Determina se existem compartilhamentos de arquivos montados explicitamente em seu aplicativo (somente Linux).
Credenciais de publicação de autenticação básica do SCM scm.allow Determina se o site descm publicação está ativado. Embora não seja recomendado para segurança, alguns métodos de publicação o exigem.

Use este script para obter as configurações de aplicativo relevantes do seu aplicativo existente:

# Set the app and resource group names
appName=<APP_NAME>
rgName=<RESOURCE_GROUP>

echo "Getting commonly used site settings..."
az functionapp config show --name $appName --resource-group $rgName \
    --query "{http20Enabled:http20Enabled, httpsOnly:httpsOnly, minTlsVersion:minTlsVersion, \
    minTlsCipherSuite:minTlsCipherSuite, clientCertEnabled:clientCertEnabled, \
    clientCertMode:clientCertMode, clientCertExclusionPaths:clientCertExclusionPaths}"

echo "Checking for SCM basic publishing credentials policies..."
az resource show --resource-group $rgName --name scm --namespace Microsoft.Web \
    --resource-type basicPublishingCredentialsPolicies --parent sites/$appName --query properties

echo "Checking for the maximum scale-out limit configuration..."
az functionapp config appsettings list --name $appName --resource-group $rgName \
    --query "[?name=='WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT'].value" -o tsv

echo "Checking for any file share mount configurations..."
az webapp config storage-account list --name $appName --resource-group $rgName

echo "Checking for any custom domains..."
az functionapp config hostname list --webapp-name $appName --resource-group $rgName --query "[?contains(name, 'azurewebsites.net')==\`false\`]" --output table

echo "Checking for any CORS settings..."
az functionapp cors show --name $appName --resource-group $rgName 

Neste exemplo, substitua <RESOURCE_GROUP> e <APP_NAME> pelo nome do grupo de recursos e nome do aplicativo, respectivamente. Se qualquer uma das configurações ou verificações do site retornar valores não nulos, anote eles.

Identificar identidades gerenciadas e acesso baseado em função

Antes de migrar, você deve documentar se seu aplicativo depende da identidade gerenciada atribuída pelo sistema ou de quaisquer identidades gerenciadas atribuídas pelo usuário. Você também deve determinar as permissões de controle de acesso baseado em função (RBAC) concedidas a essas identidades. Você deve recriar a identidade gerenciada atribuída ao sistema e todas as atribuições de função em seu novo aplicativo. Você deve ser capaz de reutilizar suas identidades gerenciadas atribuídas pelo usuário em seu novo aplicativo.

Este script verifica a identidade gerenciada atribuída pelo sistema e quaisquer identidades gerenciadas atribuídas pelo usuário associadas ao seu aplicativo:

appName=<APP_NAME>
rgName=<RESOURCE_GROUP>

echo "Checking for a system-assigned managed identity..."
systemUserId=$(az functionapp identity show --name $appName --resource-group $rgName --query "principalId" -o tsv) 

if [[ -n "$systemUserId" ]]; then
echo "System-assigned identity principal ID: $systemUserId"
echo "Checking for role assignments..."
az role assignment list --assignee $systemUserId --all
else
  echo "No system-assigned identity found."
fi

echo "Checking for user-assigned managed identities..."
userIdentities=$(az functionapp identity show --name $appName --resource-group $rgName --query 'userAssignedIdentities' -o json)
if [[ "$userIdentities" != "{}" && "$userIdentities" != "null" ]]; then
  echo "$userIdentities" | jq -c 'to_entries[]' | while read -r identity; do
    echo "User-assigned identity name: $(echo "$identity" | jq -r '.key' | sed 's|.*/userAssignedIdentities/||')"
	echo "Checking for role assignments..."
    az role assignment list --assignee $(echo "$identity" | jq -r '.value.principalId') --all --output json
    echo
  done
else
  echo "No user-assigned identities found."
fi

Neste exemplo, substitua <RESOURCE_GROUP> e <APP_NAME> pelo nome do grupo de recursos e nome do aplicativo, respectivamente. Anote todas as identidades e suas atribuições de função.

Identificar configurações de autenticação internas

Antes de migrar para o Flex Consumption, você deve coletar informações sobre quaisquer configurações de autenticação internas. Se você quiser que seu aplicativo use os mesmos comportamentos de autenticação de cliente, deverá recriá-los no novo aplicativo. Para obter mais informações, consulte Autenticação e autorização no Azure Functions.

Preste especial atenção aos URIs de redirecionamento, redirecionamentos externos permitidos e configurações de token para garantir uma transição suave para usuários autenticados.

Use este az webapp auth show comando para determinar se a autenticação interna está configurada em seu aplicativo de função:

az webapp auth show --name <APP_NAME> --resource-group <RESOURCE_GROUP>

Neste exemplo, substitua <RESOURCE_GROUP> e <APP_NAME> pelo nome do grupo de recursos e nome do aplicativo, respectivamente. Analise a saída para determinar se a autenticação está habilitada e quais provedores de identidade estão configurados.

Você deve recriar essas configurações em seu novo aplicativo pós-migração para que seus clientes possam manter o acesso usando seu provedor preferido.

Rever as restrições de acesso entrante

É possível definir restrições de acesso de entrada em aplicativos em um plano de consumo. Talvez você queira manter essas restrições em seu novo aplicativo. Para cada restrição definida, certifique-se de capturar estas propriedades:

  • Endereços IP ou intervalos CIDR
  • Valores de prioridade
  • Tipo de ação (Permitir/Negar)
  • Nomes das regras

Este az functionapp config access-restriction show comando retorna uma lista de quaisquer restrições de acesso baseadas em IP existentes:

az functionapp config access-restriction show --name <APP_NAME> --resource-group <RESOURCE_GROUP>

Neste exemplo, substitua <RESOURCE_GROUP> e <APP_NAME> pelo nome do grupo de recursos e nome do aplicativo, respectivamente.

Ao executar no plano Flex Consumption, você pode recriar essas restrições baseadas em IP de entrada. Você pode proteger ainda mais seu aplicativo implementando outras restrições de rede, como integração de rede virtual e pontos de extremidade privados de entrada. Para obter mais informações, consulte Integração de rede virtual.

Obtenha o pacote de implantação de código

Para poder reimplantar seu aplicativo, você deve ter os arquivos de origem do projeto ou o pacote de implantação. Idealmente, seus arquivos de projeto são mantidos no controle do código-fonte para que você possa facilmente reimplantar o código da função em seu novo aplicativo. Se você tiver seus arquivos de código-fonte, poderá ignorar esta seção e continuar para Capturar benchmarks de desempenho (opcional).

Se você não tiver mais acesso aos arquivos de origem do projeto, poderá baixar o pacote de implantação atual do aplicativo Plano de consumo existente no Azure. O local do pacote de implantação depende se você executa no Linux ou no Windows.

Os aplicativos de plano de consumo no Linux mantêm o arquivo de pacote zip de implantação em um destes locais:

  • Um contêiner de armazenamento de Blob do Azure nomeado scm-releases na conta de armazenamento de host padrão (AzureWebJobsStorage). Esse contêiner é a fonte de implantação padrão para um aplicativo de plano de consumo no Linux.

  • Se o seu aplicativo tiver uma WEBSITE_RUN_FROM_PACKAGE configuração que seja uma URL, o pacote estará em um local acessível externamente que você mantém. Um pacote externo deve ser hospedado em um contêiner de armazenamento de blob com acesso restrito. Para obter mais informações, consulte URL do pacote externo.

Sugestão

Se a sua conta de armazenamento estiver restrita apenas ao acesso de identidade gerida, talvez seja necessário conceder à sua conta do Azure acesso de leitura ao contentor de armazenamento adicionando-o à função Storage Blob Data Reader.

O pacote de implantação é compactado usando o formato squashfs. Para ver o que está dentro do pacote, você deve usar ferramentas que possam descompactar esse formato.

Use estas etapas para baixar o pacote de implantação do seu aplicativo atual:

  1. Use este az functionapp config appsettings list comando para obter a configuração do WEBSITE_RUN_FROM_PACKAGE aplicativo, se houver:

    az functionapp config appsettings list --name <APP_NAME> --resource-group <RESOURCE_GROUP> \
        --query "[?name=='WEBSITE_RUN_FROM_PACKAGE'].value" -o tsv
    

    Neste exemplo, substitua <RESOURCE_GROUP> e <APP_NAME> pelo nome do grupo de recursos e nome do aplicativo, respectivamente. Se esse comando retornar uma URL, você poderá baixar o arquivo do pacote de implantação desse local remoto e pular para a próxima seção.

  2. Se o valor de WEBSITE_RUN_FROM_PACKAGE for 1 ou não houver valor, use este script para obter o pacote de implementação da aplicação já existente:

    appName=<APP_NAME>
    rgName=<RESOURCE_GROUP>
    
    echo "Getting the storage account connection string from app settings..."
    storageConnection=$(az functionapp config appsettings list --name $appName --resource-group $rgName \
             --query "[?name=='AzureWebJobsStorage'].value" -o tsv)
    
    echo "Getting the package name..."
    packageName=$(az storage blob list --connection-string $storageConnection --container-name scm-releases \
    --query "[0].name" -o tsv)
    
    echo "Download the package? $packageName? (Y to proceed, any other key to exit)"
    read -r answer
    if [[ "$answer" == "Y" || "$answer" == "y" ]]; then
       echo "Proceeding with download..."
       az storage blob download --connection-string $storageConnection --container-name scm-releases \
    --name $packageName --file $packageName
    else
       echo "Exiting script."
       exit 0
    fi
    

    Novamente, substitua <RESOURCE_GROUP> e <APP_NAME> pelo nome do grupo de recursos e nome do aplicativo. O arquivo de .zip do pacote é baixado para o diretório a partir do qual você executou o comando.

O local dos arquivos de origem do projeto depende da configuração do WEBSITE_RUN_FROM_PACKAGE aplicativo da seguinte maneira:

WEBSITE_RUN_FROM_PACKAGE valor Local do arquivo de origem
1 Os ficheiros estão num ficheiro comprimido que é armazenado no partilhamento de Ficheiros do Azure da conta de armazenamento definida pela definição WEBSITE_CONTENTAZUREFILECONNECTIONSTRING. O nome do compartilhamento de arquivos é definido pela WEBSITE_CONTENTSHARE configuração.
URL de endpoint Os arquivos estão em um pacote zip em um local acessível externamente que você mantém. Um pacote externo deve ser hospedado em um contêiner de armazenamento de blob com acesso restrito. Para obter mais informações, consulte URL do pacote externo.
  1. Use este az functionapp config appsettings list comando para obter a configuração do WEBSITE_RUN_FROM_PACKAGE aplicativo, se houver:

    az functionapp config appsettings list --name <APP_NAME> --resource-group <RESOURCE_GROUP> \
        --query "[?name=='WEBSITE_RUN_FROM_PACKAGE'].value" -o tsv
    

    Neste exemplo, substitua <RESOURCE_GROUP> e <APP_NAME> pelo nome do grupo de recursos e nome do aplicativo, respectivamente. Se esse comando retornar uma URL, você poderá baixar o arquivo do pacote de implantação desse local remoto e pular para a próxima seção.

  2. Se o valor de WEBSITE_RUN_FROM_PACKAGE for 1 ou não houver valor, use este script para obter o pacote de implementação da aplicação já existente:

    appName=<APP_NAME>
    rgName=<RESOURCE_GROUP>
    
    echo "Getting the storage account connection string and file share from app settings..."
    json=$(az functionapp config appsettings list --name $appName --resource-group $rgName \
        --query "[?name=='WEBSITE_CONTENTAZUREFILECONNECTIONSTRING' || name=='WEBSITE_CONTENTSHARE'].value" -o json)
    
    storageConnection=$(echo "$json" | jq -r '.[0]')
    fileShare=$(echo "$json" | jq -r '.[1]')
    
    echo "Getting the package name..."
    packageName=$(az storage file list --share-name $fileShare --connection-string $storageConnection \
      --path "data/SitePackages" --query "[?ends_with(name, '.zip')] | sort_by(@, &properties.lastModified)[-1].name" \
      -o tsv) 
    
    echo "Download the package? $packageName? (Y to proceed, any other key to exit)"
    read -r answer
    if [[ "$answer" == "Y" || "$answer" == "y" ]]; then
        echo "Proceeding with download..."
        az storage file download --connection-string $storageConnection --share-name $fileShare \
    	--path "data/SitePackages/$packageName"
    else
        echo "Exiting script."
        exit 0
    fi
    

    Novamente, substitua <RESOURCE_GROUP> e <APP_NAME> pelo nome do grupo de recursos e nome do aplicativo. O arquivo de .zip do pacote é baixado para o diretório a partir do qual você executou o comando.

Capturar benchmarks de desempenho (opcional)

Se você planeja validar a melhoria de desempenho em seu aplicativo com base na migração para o plano Flex Consumption, você deve (opcionalmente) capturar os benchmarks de desempenho do seu plano atual. Em seguida, você pode compará-los com os mesmos benchmarks para seu aplicativo em execução em um plano Flex Consumption para comparação.

Sugestão

Sempre compare o desempenho em condições semelhantes, como hora do dia, dia da semana e carga do cliente. Tente executar os dois benchmarks o mais simultaneamente possível.

Aqui estão algumas referências a serem consideradas para seus testes de desempenho estruturados:

Benchmark sugerido Comentário
Arranque a frio Meça o tempo desde a primeira solicitação até a primeira resposta após um período ocioso.
Vazão Meça o máximo de solicitações por segundo usando ferramentas de teste de carga para determinar como o aplicativo lida com solicitações simultâneas.
Latência Acompanhe os tempos de resposta de P50, P95 e P99 sob várias condições de carga. Você pode monitorar essas métricas no Application Insights.

Você pode usar esta consulta Kusto para revisar os tempos de resposta de latência sugeridos no Application Insights:

requests
| where timestamp > ago(1d)
| summarize percentiles(duration, 50, 95, 99) by bin(timestamp, 1h)
| render timechart

Passos da Migração

A migração de suas funções de um aplicativo de plano de consumo para um aplicativo de plano de consumo flexível segue estas etapas principais:

Verificar se o aplicativo Flex Consumption foi criado e configurado

Depois de executar o comando az functionapp flex-migration start , você deve verificar se seu novo aplicativo Flex Consumption foi criado com êxito e configurado corretamente. Aqui estão algumas etapas para validar os resultados da migração:

  1. Verifique se o novo aplicativo existe e está em execução:

    az functionapp show --name <NEW_APP_NAME> --resource-group <RESOURCE_GROUP> \
         --query "{name:name, kind:kind, sku:properties.sku}" --output table
    
  2. Revise as configurações do aplicativo migrado:

    az functionapp config appsettings list --name <NEW_APP_NAME> --resource-group <RESOURCE_GROUP> \
         --output table
    

    Compare essas configurações com seu aplicativo de origem para garantir que as configurações críticas sejam transferidas.

  3. Verifique a configuração de identidade gerenciada:

    az functionapp identity show --name <NEW_APP_NAME> --resource-group <RESOURCE_GROUP>
    
  4. Verifique se todos os domínios personalizados foram migrados:

    az functionapp config hostname list --webapp-name <NEW_APP_NAME> --resource-group <RESOURCE_GROUP> \
         --output table
    

Rever o resumo da migração

O comando de migração automatizada deve ter transferido a maioria das configurações. No entanto, você deve verificar manualmente se esses itens não foram migrados e talvez precisem ser configurados manualmente:

  • Certificados: os certificados TSL/SSL ainda não são suportados no Flex Consumption
  • Slots de implantação: Não suportados no Flex Consumption
  • Configurações de autenticação integradas: elas precisam ser reconfiguradas manualmente
  • Configurações de CORS: podem precisar de verificação manual, dependendo da sua configuração

Se alguma configuração crítica estiver ausente ou incorreta, você poderá configurá-la manualmente usando as etapas descritas nas seções do processo de migração do Windows deste artigo.

Revisão final do plano

Antes de prosseguir com o processo de migração, reserve um momento para executar estas últimas etapas preparatórias:

  • Revise todas as informações coletadas: examine todas as anotações, detalhes de configuração e configurações do aplicativo que você documentou nas seções de avaliação e pré-migração anteriores. Se algo não estiver claro, execute novamente os comandos da CLI do Azure novamente ou obtenha as informações do portal.

  • Defina seu plano de migração: com base em suas descobertas, crie uma lista de verificação para sua migração que destaque:

    • Todas as configurações que precisam de atenção especial
    • Gatilhos e ligações ou outras dependências que podem ser afetadas durante a migração
    • Estratégia de teste para validação pós-migração
    • Plano de reversão se houver problemas inesperados
  • Planejamento de tempo de inatividade: considere quando parar o aplicativo de função original para evitar perda de dados e processamento duplicado de eventos, e como isso pode afetar seus usuários ou sistemas downstream. Em alguns casos, pode ser necessário desativar funções específicas antes de parar todo o aplicativo.

Uma revisão final cuidadosa ajuda a garantir um processo de migração mais suave e minimiza o risco de ignorar configurações importantes.

Criar uma aplicação no plano Flex Consumption

Há várias maneiras de criar um aplicativo de função no plano Flex Consumption junto com outros recursos necessários do Azure:

Criar opção Artigos de referência
Azure CLI (Interface de Linha de Comando da Azure) Criar um aplicativo Flex Consumption
portal do Azure Criar um aplicativo de função no portal do Azure
Infraestrutura como código Modelo ARM
AZD
Bíceps
Terraforma
Código do Visual Studio Implantação do Visual Studio Code
Visual Studio Implantação do Visual Studio

Sugestão

Quando possível, você deve usar o Microsoft Entra ID para autenticação em vez de cadeias de conexão, que contêm chaves compartilhadas. O uso de identidades gerenciadas é uma prática recomendada que melhora a segurança, eliminando a necessidade de armazenar segredos compartilhados diretamente nas configurações do aplicativo. Se o seu aplicativo original usava cadeias de conexão, o plano Flex Consumption foi projetado para oferecer suporte a identidades gerenciadas. A maioria desses links mostra como habilitar identidades gerenciadas em seu aplicativo de função.

Aplicar configurações migradas do aplicativo no novo aplicativo

Antes de implantar o seu código, deverá configurar a nova aplicação com as definições relevantes do plano Flex Consumption da sua aplicação de funções original.

Importante

Nem todas as configurações do aplicativo Plano de consumo são suportadas quando executadas em um plano Flex Consumption. Para obter mais informações, consulte Descontinuações do plano Flex Consumption.

Execute este script que executa estas tarefas:

  1. Obtém as configurações do aplicativo antigo, ignorando as configurações que não se aplicam em um plano Flex Consumption ou que já existem no novo aplicativo.
  2. Grava as configurações coletadas localmente em um arquivo temporário.
  3. Aplica as configurações do arquivo ao seu novo aplicativo.
  4. Exclui o arquivo temporário.
sourceAppName=<SOURCE_APP_NAME>
destAppName=<DESTINATION_APP_NAME>
rgName=<RESOURCE_GROUP>

echo "Getting app settings from the old app..."
app_settings=$(az functionapp config appsettings list --name $sourceAppName --resource-group $rgName)

# Filter out settings that don't apply to Flex Consumption apps or that will already have been created
filtered_settings=$(echo "$app_settings" | jq 'map(select(
  (.name | ascii_downcase) != "website_use_placeholder_dotnetisolated" and
  (.name | ascii_downcase | startswith("azurewebjobsstorage") | not) and
  (.name | ascii_downcase) != "website_mount_enabled" and
  (.name | ascii_downcase) != "enable_oryx_build" and
  (.name | ascii_downcase) != "functions_extension_version" and
  (.name | ascii_downcase) != "functions_worker_runtime" and
  (.name | ascii_downcase) != "functions_worker_runtime_version" and
  (.name | ascii_downcase) != "functions_max_http_concurrency" and
  (.name | ascii_downcase) != "functions_worker_process_count" and
  (.name | ascii_downcase) != "functions_worker_dynamic_concurrency_enabled" and
  (.name | ascii_downcase) != "scm_do_build_during_deployment" and
  (.name | ascii_downcase) != "website_contentazurefileconnectionstring" and
  (.name | ascii_downcase) != "website_contentovervnet" and
  (.name | ascii_downcase) != "website_contentshare" and
  (.name | ascii_downcase) != "website_dns_server" and
  (.name | ascii_downcase) != "website_max_dynamic_application_scale_out" and
  (.name | ascii_downcase) != "website_node_default_version" and
  (.name | ascii_downcase) != "website_run_from_package" and
  (.name | ascii_downcase) != "website_skip_contentshare_validation" and
  (.name | ascii_downcase) != "website_vnet_route_all" and
  (.name | ascii_downcase) != "applicationinsights_connection_string"
))')

echo "Settings to migrate..."
echo "$filtered_settings"

echo "Writing settings to a local a local file (app_settings_filtered.json)..."
echo "$filtered_settings" > app_settings_filtered.json

echo "Applying settings to the new app..."
output=$(az functionapp config appsettings set --name $destAppName --resource-group $rgName --settings @app_settings_filtered.json)

echo "Deleting the temporary settings file..."
rm -rf app_settings_filtered.json  

echo "Current app settings in the new app..."
az functionapp config appsettings list --name $destAppName --resource-group $rgName 

Neste exemplo, substitua <RESOURCE_GROUP>, <SOURCE_APP_NAME> e <DEST_APP_NAME> pelo nome do grupo de recursos, o antigo nome do aplicativo e o novo nome do aplicativo, respectivamente. Esse script pressupõe que ambos os aplicativos estejam no mesmo grupo de recursos.

Aplicar outras configurações de aplicativo

Encontre a lista de outras configurações de aplicativos do seu aplicativo antigo que você coletou durante a pré-migração e também as defina no novo aplicativo.

Neste script, defina o valor para qualquer configuração definida no aplicativo original e comente todos os comandos para qualquer configuração não definida (null):

appName=<APP_NAME>
rgName=<RESOURCE_GROUP>
http20Setting=<YOUR_HTTP_20_SETTING>
minTlsVersion=<YOUR_TLS_VERSION>
minTlsCipher=<YOUR_TLS_CIPHER>
httpsOnly=<YOUR_HTTPS_ONLY_SETTING>
certEnabled=<CLIENT_CERT_ENABLED>
certMode=<YOUR_CLIENT_CERT_MODE>
certExPaths=<CERT_EXCLUSION_PATHS>
scmAllowBasicAuth=<ALLOW_SCM_BASIC_AUTH>

# Apply HTTP version and minimum TLS settings
az functionapp config set --name $appName --resource-group $rgName --http20-enabled $http20Setting  
az functionapp config set --name $appName --resource-group $rgName --min-tls-version $minTlsVersion

# Apply the HTTPS-only setting
az functionapp update --name $appName --resource-group $rgName --set HttpsOnly=$httpsOnly

# Apply incoming client cert settings
az functionapp update --name $appName --resource-group $rgName --set clientCertEnabled=$certEnabled
az functionapp update --name $appName --resource-group $rgName --set clientCertMode=$certMode
az functionapp update --name $appName --resource-group $rgName --set clientCertExclusionPaths=$certExPaths

# Apply the TLS cipher suite setting
az functionapp update --name $appName --resource-group $rgName --set minTlsCipherSuite=$minTlsCipher

# Apply the allow scm basic auth configuration
az resource update --resource-group $rgName --name scm --namespace Microsoft.Web --resource-type basicPublishingCredentialsPolicies \
	--parent sites/$appName --set properties.allow=$scmAllowBasicAuth

Neste exemplo, substitua <RESOURCE_GROUP> e <APP_NAME> por seus nomes de aplicativo de função e grupo de recursos, respectivamente. Além disso, substitua os placeholders de quaisquer definições de variáveis para as configurações existentes que você deseja recriar no novo aplicativo e comente as configurações null.

Definir configurações de escala e simultaneidade

O plano Flex Consumption implementa o dimensionamento por função, onde cada função dentro do seu aplicativo pode ser dimensionada independentemente com base em sua carga de trabalho. O dimensionamento também está mais estritamente relacionado às configurações de simultaneidade, que são usadas para tomar decisões de dimensionamento com base nas execuções simultâneas atuais. Para obter mais informações, consulte Dimensionamento por função e Simultaneidade no artigo Plano de consumo flexível.

Considere as configurações de simultaneidade primeiro se quiser que seu novo aplicativo seja dimensionado de forma semelhante ao aplicativo original. A definição de valores de simultaneidade mais altos pode resultar na criação de menos instâncias para lidar com a mesma carga.

Se você tinha um limite de expansão personalizado definido em seu aplicativo original, também pode aplicá-lo ao novo aplicativo. Caso contrário, você pode pular para a próxima seção.

A contagem máxima de instâncias padrão é 100 e deve ser definida como um valor de 40 ou superior.

Use este az functionapp scale config set comando para definir a expansão máxima.

az functionapp scale config set --name <APP_NAME> --resource-group <RESOURCE_GROUP> \
    --maximum-instance-count <MAX_SCALE_SETTING>

Neste exemplo, substitua <RESOURCE_GROUP> e <APP_NAME> por seus nomes de aplicativo de função e grupo de recursos, respectivamente. Substitua <MAX_SCALE_SETTING> pelo valor máximo de escala que você está definindo.

Configurar quaisquer domínios personalizados e acesso CORS

Se o seu aplicativo original tinha domínios personalizados vinculados ou configurações de CORS definidas, recrie-os no novo aplicativo. Para obter mais informações sobre domínios personalizados, consulte Configurar um domínio personalizado existente no Serviço de Aplicativo do Azure.

  1. Use este az functionapp config hostname add comando para revincular quaisquer mapeamentos de domínio personalizados ao seu aplicativo:

    az functionapp config hostname add --name <APP_NAME> --resource-group <RESOURCE_GROUP> \
        --hostname <CUSTOM_DOMAIN>
    

    Neste exemplo, substitua <RESOURCE_GROUP> e <APP_NAME> por seus nomes de aplicativo de função e grupo de recursos, respectivamente. Substitua <CUSTOM_DOMAIN> pelo seu nome de domínio personalizado.

  2. Use este az functionapp cors add comando para substituir quaisquer configurações de CORS:

    az functionapp cors add --name <APP_NAME> --resource-group <RESOURCE_GROUP> \
        --allowed-origins <ALLOWED_ORIGIN_1> <ALLOWED_ORIGIN_2> <ALLOWED_ORIGIN_N>
    

    Neste exemplo, substitua <RESOURCE_GROUP> e <APP_NAME> por seus nomes de aplicativo de função e grupo de recursos, respectivamente. Substitua <ALLOWED_ORIGIN_*> pelas suas origens permitidas.

Configurar identidades gerenciadas e atribuir funções

A maneira como você configura identidades gerenciadas em seu novo aplicativo depende do tipo de identidade gerenciada:

Tipo de identidade gerida Criar identidade Atribuições de funções
Atribuída pelo utilizador Opcional Você pode continuar a usar as mesmas identidades gerenciadas atribuídas pelo usuário com o novo aplicativo. Você deve reatribuir essas identidades ao seu aplicativo Flex Consumption e verificar se elas ainda têm as atribuições de função corretas nos serviços remotos. Se você optar por criar novas identidades para o novo aplicativo, deverá atribuir as mesmas funções que as identidades existentes.
Atribuído pelo sistema Sim Como cada aplicativo de função tem sua própria identidade gerenciada atribuída ao sistema, você deve habilitar a identidade gerenciada atribuída ao sistema no novo aplicativo e reatribuir as mesmas funções que no aplicativo original.

Recriar as atribuições de função corretamente é fundamental para garantir que seu aplicativo de função tenha o mesmo acesso aos recursos do Azure após a migração.

Sugestão

Se o seu aplicativo original usava cadeias de conexão ou outros segredos compartilhados para autenticação, essa é uma ótima oportunidade para melhorar a segurança do seu aplicativo alternando para usar a autenticação do Microsoft Entra ID com identidades gerenciadas. Para obter mais informações, consulte Tutorial: Criar um aplicativo de função que se conecta aos serviços do Azure usando identidades em vez de segredos.

  1. Use este az functionapp identity assign comando para habilitar a identidade gerenciada atribuída ao sistema em seu novo aplicativo:

    az functionapp identity assign --name <APP_NAME> --resource-group <RESOURCE_GROUP>
    

    Neste exemplo, substitua <RESOURCE_GROUP> e <APP_NAME> por seus nomes de aplicativo de função e grupo de recursos, respectivamente.

  2. Use este script para obter o ID principal da identidade atribuída ao sistema e adicioná-lo às funções necessárias:

    # Get the principal ID of the system identity
    principalId=$(az functionapp identity show --name <APP_NAME> --resource-group <RESOURCE_GROUP> \
        --query principalId -o tsv)
    
    # Assign a role in a specific resource (scope) to the system identity
    az role assignment create --assignee $principalId --role "<ROLE_NAME>" --scope "<RESOURCE_ID>"
    

    Neste exemplo, substitua <RESOURCE_GROUP> e <APP_NAME> por seus nomes de aplicativo de função e grupo de recursos, respectivamente. Substitua <ROLE_NAME> e <RESOURCE_ID> pelo nome da função e recurso específico capturado do aplicativo original.

  3. Repita os comandos anteriores para cada função exigida pelo novo aplicativo.

Configurar restrições de acesso à rede

Se o seu aplicativo original tinha restrições de acesso de entrada baseadas em IP, você pode recriar qualquer uma das mesmas regras de acesso de entrada que deseja manter no novo aplicativo.

Sugestão

O plano Flex Consumption suporta totalmente a integração de rede virtual. Por isso, você também tem a opção de usar pontos de extremidade privados de entrada após a migração. Para obter mais informações, consulte Endereços privados.

Use este az functionapp config access-restriction add comando para cada restrição de acesso IP que você deseja replicar no novo aplicativo:

az functionapp config access-restriction add --name <APP_NAME> --resource-group <RESOURCE_GROUP> \
  --rule-name <RULE_NAME> --action Deny --ip-address <IP_ADDRESS> --priority <PRIORITY>

Neste exemplo, substitua esses marcadores de posição pelos valores do seu aplicativo original.

Marcador de posição Valor
<APP_NAME> O nome da aplicação de funções.
<RESOURCE_GROUP> O seu grupo de recursos.
<RULE_NAME> Nome amigável para a regra IP.
<Priority> Prioridade para a exclusão.
<IP_Address> O endereço IP a excluir.

Execute este comando para cada restrição de IP documentada do aplicativo original.

Ativar monitorização

Antes de iniciar seu novo aplicativo no plano Flex Consumption, verifique se o Application Insights está habilitado. Ter o Application Insights configurado ajuda você a solucionar quaisquer problemas que possam ocorrer durante a implantação e inicialização do código.

Implemente uma estratégia de monitoramento abrangente que abranja métricas, logs e custos do aplicativo. Usando essa estratégia, você pode validar o sucesso de sua migração, identificar quaisquer problemas prontamente e otimizar o desempenho e o custo do seu novo aplicativo.

Se planeia comparar esta nova aplicação com a sua aplicação atual, certifique-se de que o seu esquema também recolhe os parâmetros de referência necessários para comparação. Para obter mais informações, consulte Configurar monitoramento.

Configurar autenticação interna

Se o seu aplicativo original usava autenticação de cliente interna (às vezes chamada de Easy Auth), você deve recriá-lo em seu novo aplicativo. Se você estiver planejando reutilizar o mesmo registro de cliente, certifique-se de definir os pontos de extremidade autenticados do novo aplicativo no provedor de autenticação.

Com base nas informações coletadas anteriormente, use o az webapp auth update comando para recriar cada registro de autenticação interno exigido pelo seu aplicativo.

Implante seu código de aplicativo no novo aplicativo Flex Consumption

Com seu novo aplicativo de plano Flex Consumption totalmente configurado com base nas configurações do aplicativo original, é hora de implantar seu código nos novos recursos do aplicativo no Azure.

Atenção

Após a implantação bem-sucedida, os gatilhos em seu novo aplicativo começam imediatamente a processar dados de serviços conectados. Para minimizar dados duplicados e evitar a perda de dados ao iniciar o novo aplicativo e desligar o aplicativo original, você deve revisar as estratégias definidas em mitigações por tipo de gatilho.

O Functions fornece várias maneiras de implantar seu código, seja a partir do projeto de código ou como um pacote de implantação pronto para ser executado.

Sugestão

Se o código do seu projeto é mantido em um repositório de código-fonte, agora é o momento perfeito para configurar um pipeline de implantação contínua. A implantação contínua permite implantar automaticamente atualizações de aplicativos com base em alterações em um repositório conectado.

Você deve atualizar seus fluxos de trabalho de implantação existentes para implantar seu código-fonte em seu novo aplicativo:

Você também pode criar um novo fluxo de trabalho de implantação contínua para seu novo aplicativo. Para mais informações, consulte Implementação Contínua para Azure Functions

Tarefas pós-migração

Após uma migração bem-sucedida, você deve executar estas tarefas de acompanhamento:

Verificar a funcionalidade básica

  1. Verifique se o novo aplicativo está sendo executado em um plano Flex Consumption:

    Use este comando az functionapp show para ver os detalhes sobre o plano de hospedagem:

    az functionapp show --name <APP_NAME> --resource-group <RESOURCE_GROUP> --query "serverFarmId"
    

    Neste exemplo, substitua <RESOURCE_GROUP> e <APP_NAME> por seus nomes de aplicativo de função e grupo de recursos, respectivamente.

  2. Use um cliente HTTP para invocar pelo menos um endpoint de gatilho HTTP no seu novo aplicativo para garantir que ele responda conforme o esperado.

Capturar medições de desempenho

Com seu novo aplicativo em execução, você pode executar os mesmos benchmarks de desempenho que você coletou do seu aplicativo original, como:

Benchmark sugerido Comentário
Arranque a frio Meça o tempo desde a primeira solicitação até a primeira resposta após um período ocioso.
Vazão Meça o máximo de solicitações por segundo usando ferramentas de teste de carga para determinar como o aplicativo lida com solicitações simultâneas.
Latência Acompanhe os tempos de resposta de P50, P95 e P99 sob várias condições de carga. Você pode monitorar essas métricas no Application Insights.

Você pode usar esta consulta Kusto para revisar os tempos de resposta de latência sugeridos no Application Insights:

requests
| where timestamp > ago(1d)
| summarize percentiles(duration, 50, 95, 99) by bin(timestamp, 1h)
| render timechart

Observação

As métricas do plano de consumo flexível diferem das métricas do plano de consumo. Ao comparar o desempenho antes e depois da migração, lembre-se de que você deve usar métricas diferentes para acompanhar características de desempenho semelhantes. Para obter mais informações, consulte Configurar monitoramento.

Criar painéis personalizados

As métricas do Azure Monitor e o Application Insights permitem que você crie painéis no portal do Azure que exibem gráficos de métricas da plataforma e logs e análises de tempo de execução.

Considere configurar painéis e alertas em suas principais métricas no portal do Azure. Para obter mais informações, consulte Monitorar seu aplicativo no Azure.

Ajustar configurações do plano

As melhorias reais de desempenho e as implicações de custo da migração podem variar com base nas cargas de trabalho e na configuração específicas do aplicativo. O plano Flex Consumption fornece várias configurações que você pode ajustar para refinar o desempenho do seu aplicativo. Talvez você queira fazer ajustes para corresponder melhor ao comportamento do aplicativo original ou para equilibrar custo versus desempenho. Para obter mais informações, consulte Ajustar seu aplicativo no artigo Consumo flexível.

Remover a aplicação original (opcional)

Depois de testar completamente seu novo aplicativo de função Flex Consumption e validar que tudo está funcionando conforme o esperado, você pode querer limpar os recursos para evitar custos desnecessários. Embora os gatilhos no aplicativo original provavelmente já estejam desativados, você pode esperar alguns dias ou até semanas antes de remover totalmente o aplicativo original. Esse atraso, que depende dos padrões de uso do seu aplicativo, garante que todos os cenários, incluindo os pouco frequentes, sejam testados corretamente. Só depois de estar satisfeito com os resultados da migração, deve continuar a remover a sua aplicação de função original.

Importante

Esta ação exclui seu aplicativo de função original. O plano de Consumo permanece intacto se outras aplicações o estiverem a utilizar. Antes de prosseguir, certifique-se de ter migrado com êxito todas as funcionalidades para o novo aplicativo Flex Consumption, verificado se nenhum tráfego está sendo direcionado para o aplicativo original e feito backup de quaisquer logs, configurações ou dados relevantes que possam ser necessários para referência.

Use o az functionapp delete comando para excluir o aplicativo de função original:

az functionapp delete --name <ORIGINAL_APP_NAME> --resource-group <RESOURCE_GROUP>

Neste exemplo, substitua <RESOURCE_GROUP> e <APP_NAME> por seus nomes de aplicativo de função e grupo de recursos, respectivamente.

Estratégias de solução de problemas e recuperação

Apesar de um planejamento cuidadoso, problemas de migração podem ocorrer. Veja como lidar com possíveis problemas durante a migração:

Questão Solução
Problemas de desempenho no arranque a frio • Revise as configurações de simultaneidade
• Verifique se há dependências ausentes
Ligações em falta • Verificar pacotes de extensão
• Atualizar configurações de vinculação
Erros de permissão • Verificar atribuições de identidade e permissões de função
Problemas de conectividade de rede • Validar restrições de acesso e configurações de rede
Insights de aplicações ausentes • Recrie a conexão do Application Insights
Falha ao iniciar o aplicativo Consulte Etapas gerais de solução de problemas
Os gatilhos não processam eventos Consulte Etapas gerais de solução de problemas

Se tiveres problemas a migrar uma aplicação de produção, pode ser conveniente reverter a migração para a aplicação original enquanto resolves os problemas.

Passos de resolução de problemas gerais

Use estas etapas para casos em que o novo aplicativo não é iniciado ou os gatilhos de função não estão processando eventos:

  1. Na página do seu novo aplicativo no portal do Azure, selecione Diagnosticar e resolver problemas no painel esquerdo da página do aplicativo. Selecione Disponibilidade e Desempenho e revise o detetor Function App Inativo ou a Relatar Erros. Para obter mais informações, consulte Visão geral do diagnóstico do Azure Functions.

  2. Na página do aplicativo, selecione Monitoring>Application Insights>Exibir dados do Application Insights e, em seguida, selecione Investigar> falhas e verifique se há eventosde falha.

  3. Selecione Logs de monitoramento> e execute esta consulta Kusto para verificar se há erros nessas tabelas:

    traces
        | where severityLevel == 3
        | where cloud_RoleName == "<APP_NAME>"
        | where timestamp > ago(1d)
        | project timestamp, message, operation_Name, customDimensions
        | order by timestamp desc
    

    Nessas consultas, substitua <APP_NAME> pelo nome do seu novo aplicativo. Essas consultas verificam se há erros no dia anterior (where timestamp > ago(1d)).

  4. De volta à página do aplicativo, selecione Configurações>Variáveis de ambiente e verifique se todas as configurações críticas do aplicativo foram transferidas corretamente. Procure por configurações preteridas que possam ter sido migradas incorretamente ou erros de digitação ou cadeias de conexão incorretas. Verifique a conexão de armazenamento do host padrão.

  5. Selecione Configurações>de Identidade e verifique se as identidades esperadas existem e se foram atribuídas às funções corretas.

  6. Em seu código, verifique se todas as configurações de associação estão corretas, prestando especial atenção aos nomes de cadeia de conexão, nomes de fila de armazenamento e contêiner e configurações de grupo de consumidores em gatilhos de Hubs de Eventos.

Passos de reversão para aplicações críticas de produção

Se não conseguir resolver problemas com êxito, poderá querer voltar a utilizar a aplicação original enquanto continua a resolução de problemas.

  1. Se o aplicativo original foi interrompido, reinicie-o:

    Use este az functionapp start comando para reiniciar o aplicativo de função original:

    az functionapp delete --name <ORIGINAL_APP_NAME> --resource-group <RESOURCE_GROUP>
    
  2. Se você criou novas filas/tópicos/contêineres, certifique-se de que os clientes sejam redirecionados de volta para os recursos originais.

  3. Se você modificou o DNS ou domínios personalizados, reverta essas alterações para apontar para o aplicativo original.

Fornecer comentários

Se você encontrar problemas com sua migração usando este artigo ou quiser fornecer outros comentários sobre essas diretrizes, use um destes métodos para obter ajuda ou fornecer seus comentários:

- Obtenha ajuda em Microsoft Q&A
-Criar um problema no repositório do Azure Functions
- Fornecer feedback sobre o produto
- Criar um ticket de suporte