Compartilhar via


Migrar aplicativos do plano de consumo para o plano de consumo Flex

Este artigo fornece instruções passo a passo para migrar seus aplicativos de funções 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 de Consumo Flex depende se seu aplicativo é executado no Linux ou no Windows. Selecione seu sistema operacional na parte superior do artigo.

Dica

O Azure Functions fornece comandos para Azure CLI em az functionapp flex-migration que automatizam a maior parte das etapas necessárias para mover seu aplicativo Linux do plano de Consumo para o plano de Consumo Flexível. Este artigo apresenta esses comandos, que atualmente só têm suporte para aplicativos em execução no Linux.

Quando você migra seus aplicativos sem servidor existentes, suas funções podem aproveitar esses benefícios do plano de consumo flex:

  • Desempenho aprimorado: seus aplicativos se beneficiam de uma escalabilidade aprimorada e instâncias sempre prontas para reduzir os impactos de início frio.
  • Controles aprimorados: ajuste suas funções com configurações de escala e simultaneidade por função.
  • Rede expandida: a integração de rede virtual e os pontos de extremidade privados permitem executar 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 primeiro no Consumo Flex para estabilidade, desempenho e recursos da plataforma.

O plano de Consumo Flex é a opção de hospedagem sem servidor recomendada para suas funções daqui para frente. Para obter mais informações, consulte os benefícios do plano de consumo flex. Para obter uma comparação detalhada entre os planos de hospedagem, consulte as opções de hospedagem do Azure Functions.

Considerações

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

  • Se você estiver executando aplicativos de função de plano de consumo em regiões do Azure Governamental, examine estas diretrizes agora para se preparar para a migração até que o Consumo Flex esteja habilitado no Azure Governamental.

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

  • Você deve priorizar a migração de seus aplicativos 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 de plano de consumo flex usando o portal do Azure ou a CLI do Azure. Se a implantação atual do aplicativo for definida usando IaC (infraestrutura como código), você geralmente poderá seguir as mesmas etapas. É possível executar as mesmas ações diretamente em seus modelos do ARM ou arquivos Bicep, com estas considerações específicas do recurso:

Pré-requisitos

  • Acesso à assinatura do Azure que contém um ou mais aplicativos de funções a serem migrados. A conta usada para executar comandos da CLI do Azure deve ser capaz de:

    • Criar e gerenciar aplicativos de funções e planos de hospedagem do Serviço de Aplicativos.
    • Atribua funções a identidades gerenciadas.
    • Criar e gerenciar contas de armazenamento.
    • Criar e gerenciar recursos do Application Insights.
    • Acesse todos os recursos dependentes do aplicativo, como o Azure Key Vault, o Barramento de Serviço do Azure ou os Hubs de Eventos do Azure.

    A atribuição às funções Proprietário ou Colaborador em seu grupo de recursos geralmente 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 de grafo de recursos , que você pode instalar usando o az extension add comando:

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

Identificar aplicativos em potencial para migrar

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

A maneira como as informações do aplicativo de funções são mantidas depende se o 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

Esse comando examina automaticamente sua assinatura e retorna duas matrizes:

  • eligible_apps: Aplicativos de Consumo em Linux que podem ser migrados para Consumo Flexível. Esses aplicativos são compatíveis com o Consumo Flex.
  • ineligible_apps: aplicativos que não podem ser migrados, juntamente com os motivos específicos. Os motivos para incompatibilidade precisam ser revisados e resolvidos antes de continuar.

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

Use este az graph query comando para listar todos os aplicativos de funções em sua assinatura que estão em execução em um 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

Esse comando gera uma tabela com o nome do aplicativo, a localização e o grupo de recursos para todos os aplicativos de consumo em execução no Windows na assinatura atual.

Você será solicitado a instalar a extensão de grafo de recursos, caso ela ainda não esteja instalada.

Avaliar seu aplicativo existente

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

Confirmar a compatibilidade da região

Confirme se o plano de consumo flex atualmente tem suporte na mesma região que o aplicativo de plano de consumo que você pretende migrar.

Confirmado: Quando a saída do comando az functionapp flex-migration list mostra seu aplicativo eligible_apps na lista, o plano Flexível de Consumo tem suporte na mesma região usada pelo aplicativo de Consumo do Linux atual. Nesse caso, você pode continuar a verificar a compatibilidade do conjunto de linguagens.

Ação necessária: Quando a saída do az functionapp flex-migration list comando tiver seu ineligible_apps aplicativo na 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 de Consumo Flex ainda não é suportado na região utilizada pelo seu atual aplicativo de consumo Linux.

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

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

Esse comando gera uma tabela de regiões do Azure em que o plano de Consumo Flex tem suporte no momento.

Se sua região não tiver suporte no momento e você ainda optar por migrar seu aplicativo de funções, seu aplicativo deverá ser executado em uma região diferente em que o plano de Consumo Flex tenha suporte. No entanto, executar seu aplicativo em uma região diferente de outros serviços conectados pode introduzir latência extra. Verifique se a nova região pode atender aos requisitos de desempenho do aplicativo antes de concluir a migração.

Verificar a compatibilidade do stack de idiomas

Os planos de consumo Flex ainda não dão suporte a todas as pilhas de linguagens do Functions. Esta tabela indica quais pilhas de idiomas são atualmente suportadas:

Configuração de 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 seu aplicativo na lista eligible_apps, seu aplicativo de Consumo em Linux já está usando uma pilha de linguagem suportada pelo Consumo Flexível e você pode continuar a verificar a compatibilidade da versão da pilha.

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

Se o aplicativo de funções usar uma pilha de runtime sem suporte:

Verificar a compatibilidade da versão da pilha

Antes de migrar, você deve garantir que a versão do stack de runtime do aplicativo tenha suporte ao executar em um plano de Consumo Flexível na região atual.

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

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

Use este comando az functionapp list-flexconsumption-runtimes para verificar o suporte ao plano de Consumo Flexível para sua versão de 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 região atual e <LANGUAGE_STACK> por um destes valores:

Conjunto de linguagens Valor
C# (modelo de trabalho isolado) dotnet-isolated
Java java
JavaScript node
PowerShell powershell
Python python
TypeScript node

Esse comando exibe todas as versões do stack de linguagem especificado compatíveis com o plano de Consumo Flex em sua região.

Se o aplicativo de funções usar uma versão de pilha de idioma sem suporte, primeiro você deverá atualizar o código do aplicativo para uma versão com suporte antes de migrar para o plano de Consumo Flexível.

Verificar o uso de slots de implantaçã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 de Consumo Flexível atualmente não dá suporte a slots de implantação. Antes de migrar, você deve determinar se seu aplicativo tem um slot de implantação. Nesse caso, você precisa definir uma estratégia de como gerenciar seu aplicativo sem slots de implantação ao executar em um plano de Consumo Flexível.

Confirmado: Quando seu aplicativo atual tem slots de implantação habilitados, o comando az functionapp flex-migration list mostrará seu aplicativo de funções na lista eligible_apps sem um aviso, continue a 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ções na eligible_apps lista, mas adiciona um aviso que indica: 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ções:

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

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

Se o aplicativo de funções estiver usando slots de implantação no momento, não será possível reproduzir essa funcionalidade no plano de Consumo Flexível no momento. Antes de migrar, você deve:

  • Considere rearquitecar seu aplicativo para usar aplicativos de funções 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 recursos do slot de implantação para o slot principal (produção).

Verificar o uso de certificados

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

Confirmado: Se o comando az functionapp flex-migration list incluiu seu aplicativo na lista eligible_apps, seu aplicativo de Consumo em Linux já deixou de usar certificados e você pode continuar a verificar os acionadores de armazenamento Blob.

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

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

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, o aplicativo provavelmente usará certificados.

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

Verificar os gatilhos de Armazenamento de Blobs

Atualmente, o plano de Consumo Flexível dá suporte apenas a gatilhos baseados em eventos para o Armazenamento de Blobs do Azure, que são definidos com uma configuração Source de EventGrid. Gatilhos de armazenamento de blobs que usam sondagem de contêiner e usam uma Source configuração de LogsAndContainerScan não têm suporte no Consumo Flexível. Como a sondagem de contêiner é o padrão, determine se algum dos gatilhos de Armazenamento de Blobs está usando a configuração de origem padrão LogsAndContainerScan. Para obter mais informações, consulte Gatilho em um contêiner de blob.

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

Ação necessária: Se o comando az functionapp flex-migration list incluir seu aplicativo na lista ineligible_apps com uma mensagem de erro informando 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., seu aplicativo de Consumo em Linux ainda não será compatível com o Consumo Flexível.

Use este comando [az functionapp function list] para determinar se seu aplicativo tem gatilhos de armazenamento de Blobs 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> pelos nomes do grupo de recursos e do aplicativo, respectivamente. Se o comando retornar linhas, haverá pelo menos um gatilho usando sondagem de contêiner em seu aplicativo de funções.

Se o aplicativo tiver gatilhos de Armazenamento de Blobs que não tenham uma origem da Grade de Eventos, você deverá alterar para uma fonte da Grade de Eventos antes de migrar para o plano de Consumo Flexível.

As etapas básicas para alterar um gatilho de Armazenamento de Blobs existente para uma origem da Grade de Eventos são:

  1. Adicione ou atualize a propriedade source na definição do gatilho do Armazenamento de Blobs para EventGrid e reimplante o aplicativo.

  2. Crie a URL do ponto de extremidade em seu aplicativo de funções usado pela assinatura do evento.

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

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

Considere serviços dependentes

Como o Azure Functions é um serviço de computação, você deve considerar o efeito da migração em dados e serviços upstream e downstream do seu aplicativo.

Estratégias de proteção de dados

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

  • Idempotency: verifique se suas funções podem processar a mesma mensagem com segurança várias vezes sem efeitos colaterais negativos. Para obter mais informações, consulte Projetando Azure Functions para entrada idêntica.
  • Registro em log e monitoramento: habilite o registro em log detalhado em ambos os aplicativos durante a migração para acompanhar 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 dos Hubs de Eventos, implemente comportamentos corretos de ponto de verificação para acompanhar a posição de processamento. Para obter mais informações, consulte o processamento de eventos confiáveis 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 do serviço upstream. Para obter mais informações, consulte o Padrão ativo-ativo para funções de gatilho não HTTPS.
  • Substituição 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.

Mitigaçõ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:

Gatilho Risco aos dados Estratégia
Azure Blob Storage Alta 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.
Permitir que o contêiner original seja processado completamente antes de parar o aplicativo antigo.
Azure Cosmos DB Alta Crie um contêiner de concessão dedicado especificamente para o novo aplicativo.
Defina esse novo contêiner de concessão como a configuração leaseCollectionName em seu novo aplicativo.
Requer que suas funções sejam idempotentes ou você deve ser capaz de lidar com os resultados do processamento duplicado do feed de alterações.
Defina a configuração StartFromBeginning como false no novo aplicativo para evitar o reprocessamento do feed inteiro.
Grid 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 da Grade de Eventos.
Barramento de Serviço do Azure Alta Crie um novo tópico ou fila para uso pelo novo aplicativo.
Atualize remetentes e clientes para usar o novo tópico ou fila.
Depois que o tópico original estiver vazio, desligue o aplicativo antigo.
Fila de Armazenamento do Azure Alta Crie uma nova fila para uso pelo novo aplicativo.
Atualize remetentes e clientes para usar a nova fila de processamento.
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.
Timer Baixo Durante a substituição, certifique-se de compensar a agenda do temporizador entre os dois aplicativos para evitar execuções simultâneas de ambos os aplicativos.
Desabilite 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 as informações de configuração do aplicativo e cria um novo aplicativo de Consumo Flex com as mesmas configurações do aplicativo de origem. Use o comando, conforme 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:

Espaço reservado Valor
<SOURCE_APP_NAME> O nome do 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 o aplicativo de origem quanto à compatibilidade com o plano de hospedagem Flex Consumption.
  • Cria um aplicativo de funções no plano de Consumo Flexível.
  • Migra a maioria das configurações, incluindo configurações de aplicativo, 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 de migração dá suporte a 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 escalonamento
--skip-access-restrictions Pular a migração das restrições de acesso a IP
--skip-cors Ignorar a migração das 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 de az functionapp flex-migration start com sucesso, 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 sobre e recursos usados pelo seu aplicativo de plano de consumo para ajudar a fazer uma transição suave para a execução no plano de Consumo Flex.

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

Coletar configurações do aplicativo

Caso planeje usar as mesmas fontes de gatilho e associações e outras configurações das configurações do aplicativo, primeiro você precisará tomar nota das 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> pelos nomes do grupo de recursos e do aplicativo, respectivamente.

Cuidado

As configurações do aplicativo contêm frequentemente chaves e outros segredos compartilhados. Sempre armazene as configurações de aplicativos com segurança, idealmente criptografadas. Para melhorar a segurança, você deve usar a autenticação do Microsoft Entra ID com identidades gerenciadas no novo aplicativo do plano de Consumo Flexível em vez de segredos compartilhados.

Coletar configurações de aplicativo

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

Examine essas configurações. Se houver algum deles no aplicativo atual, você deverá decidir se eles também devem ser recriados no novo aplicativo de plano de consumo flex:

Configuração Configurações Comentário
Configurações do CORS cors Determina as configurações de CORS (compartilhamento de recursos entre origens) existentes, que seus clientes podem exigir.
Domínios personalizados Se o seu aplicativo estiver usando um domínio diferente de *.azurewebsites.net, será necessário substituir esse mapeamento de domínio personalizado por um mapeamento para o seu novo aplicativo.
Versão HTTP http20Enabled Determina se o HTTP 2.0 é exigido pelo seu aplicativo.
Somente HTTPS httpsOnly Determina se o TSL/SSL é necessário para acessar seu aplicativo.
Certificados de cliente recebidos clientCertEnabled
clientCertMode
clientCertExclusionPaths
Define os 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 em instâncias de expansão. O valor máximo padrão é 200. Esse valor é encontrado nas configurações do aplicativo, mas em um aplicativo de plano de consumo flex ele, em vez disso, é adicionado como uma configuração de site (maximumInstanceCount).
Versão mínima do TLS de entrada minTlsVersion Define uma versão mínima do TLS exigida pelo seu aplicativo.
Criptografia TLS de entrada mínima minTlsCipherSuite Define um requisito mínimo de criptografia TLS para seu aplicativo.
Compartilhamentos de Arquivos do Azure montados azureStorageAccounts Determina se existem compartilhamentos de arquivos explicitamente montados em seu aplicativo (somente Linux).
Credenciais básicas de publicação de autenticação do SCM scm.allow Determina se o scm site de publicação está habilitado. Embora não seja recomendado para segurança, alguns métodos de publicação exigem isso.

Use esse 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> pelos nomes do grupo de recursos e do aplicativo, respectivamente. Se qualquer uma das configurações do site ou verificações retornar valores não nulos, anote-os.

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 identidades gerenciadas atribuídas pelo usuário. Você também deve determinar as permissões de RBAC (controle de acesso baseado em função) concedidas a essas identidades. Você deve recriar a identidade gerenciada atribuída pelo sistema e quaisquer 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.

Esse script verifica a identidade gerenciada atribuída pelo sistema e as 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> pelos nomes do grupo de recursos e do aplicativo, respectivamente. Anote todas as identidades e suas atribuições de função.

Identificar configurações de autenticação interna

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

Preste atenção especial 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ções:

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

Neste exemplo, substitua <RESOURCE_GROUP> e <APP_NAME> pelos nomes do grupo de recursos e do aplicativo, respectivamente. Examine 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 após a migração para que seus clientes possam manter o acesso usando seu provedor preferencial.

Examinar 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 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> pelos nomes do grupo de recursos e do aplicativo, respectivamente.

Ao executar no plano Flex Consumption, você pode recriar essas restrições de entrada baseadas em IP. 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 saber mais, veja Integração de rede virtual.

Obter 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. O ideal é que os arquivos de projeto sejam mantidos no controle do código-fonte para que você possa reimplantar facilmente o código de função em seu novo aplicativo. Se você tiver seus arquivos de código-fonte, poderá ignorar esta seção e continuar a capturar parâmetros de comparação 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 de plano de consumo existente no Azure. O local do pacote de implantação depende da execução 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 Blobs 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 seu aplicativo tiver uma configuração WEBSITE_RUN_FROM_PACKAGE 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 blobs com acesso restrito. Para obter mais informações, consulte a URL do pacote externo.

Dica

Se sua conta de armazenamento estiver restrita apenas ao acesso por identidade gerenciada, talvez seja necessário conceder à sua conta do Azure acesso de leitura ao contêiner de armazenamento, adicionando-a à 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 podem descompactar esse formato.

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

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

    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> pelos nomes do grupo de recursos e do aplicativo, respectivamente. Se esse comando retornar uma URL, você poderá baixar o arquivo do pacote de implantação desse local remoto e ir para a próxima seção.

  2. Se o WEBSITE_RUN_FROM_PACKAGE valor for 1 ou nada, use esse script para obter o pacote de implantação do aplicativo 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> pelo nome do seu grupo de recursos e <APP_NAME> pelo nome do seu aplicativo. O pacote .zip arquivo é baixado para o diretório 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:

Valor WEBSITE_RUN_FROM_PACKAGE Local do arquivo de origem
1 Os arquivos estão em um pacote zip armazenado no compartilhamento de Arquivos do Azure da conta de armazenamento definida pela configuração WEBSITE_CONTENTAZUREFILECONNECTIONSTRING . O nome do compartilhamento de arquivos é definido pela configuração WEBSITE_CONTENTSHARE .
Uma URL de ponto de extremidade 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 blobs com acesso restrito. Para obter mais informações, consulte a 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 presente:

    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> pelos nomes do grupo de recursos e do aplicativo, respectivamente. Se esse comando retornar uma URL, você poderá baixar o arquivo do pacote de implantação desse local remoto e ir para a próxima seção.

  2. Se o WEBSITE_RUN_FROM_PACKAGE valor for 1 ou nada, use esse script para obter o pacote de implantação do aplicativo 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> pelo nome do seu grupo de recursos e <APP_NAME> pelo nome do seu aplicativo. O pacote .zip arquivo é baixado para o diretório do qual você executou o comando.

Capturar parâmetros de comparação de desempenho (opcional)

Se você planeja validar a melhoria de desempenho em seu aplicativo com base na migração para o plano de consumo flex, você deve (opcionalmente) capturar os parâmetros de comparação de desempenho do seu plano atual. Em seguida, você poderá compará-los com os mesmos parâmetros de comparação para seu aplicativo em execução em um plano de Consumo Flexível para comparação.

Dica

Sempre compare o desempenho em condições semelhantes, como a hora do dia, o dia da semana e a carga do cliente. Tente executar os dois parâmetros de comparação o mais próximo possível.

Aqui estão alguns parâmetros de comparação a serem considerados para o teste de desempenho estruturado:

Parâmetro de comparação sugerido Comentário
Início a frio Meça o tempo da primeira solicitação para a primeira resposta após um período ocioso.
Taxa de transferência 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 P50, P95 e P99 em várias condições de carga. Você pode monitorar essas métricas no Application Insights.

Você pode usar essa consulta Kusto para examinar 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

Etapas 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 segue estas etapas principais:

Verificar se o aplicativo Consumo Flex foi criado e configurado

Após executar o comando az functionapp flex-migration start verifique se o novo aplicativo de Flex Consumption foi criado com êxito e configurado corretamente. Estas são algumas etapas para validar os resultados da migração:

  1. Verifique se o novo aplicativo existe e se 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. Examine 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 os domínios personalizados foram migrados:

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

Resumo da Revisão 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 eles talvez precisem ser configurados manualmente:

  • Certificados: ainda não há suporte para certificados TSL/SSL no Consumo Flex
  • Slots de implantação: sem suporte no Consumo Flexível
  • Configurações de autenticação internas: elas precisam ser reconfiguradas manualmente
  • Configurações do CORS: pode precisar de verificação manual dependendo da configuração

Se alguma configuração crítica estiver ausente ou incorreta, você poderá configurá-las manualmente usando as etapas descritas nas seções de 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:

  • Reveja todas as informações coletadas: revise todas as anotações, detalhes de configuração e configurações de aplicativo documentadas nas seções de avaliação anterior e pré-migração. Se algo não estiver claro, execute novamente os comandos da CLI do Azure 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 realça:

    • Todas as configurações que precisam de atenção especial
    • Gatilhos e associaçõ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ções 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, talvez seja necessário desabilitar funções específicas antes de interromper 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 um aplicativo no plano Flex de Consumo

Há várias maneiras de criar um aplicativo de funções no plano de Consumo Flex, juntamente com outros recursos necessários do Azure:

Criar opção Artigos de referência
CLI do Azure Criar um aplicativo de consumo flexível
portal do Azure Criar um aplicativo de funções no portal do Azure
Infraestrutura como código Modelo de ARM
azd
Bíceps
Terraform
Visual Studio Code Implantação do Visual Studio Code
Visual Studio Implantação do Visual Studio

Dica

Quando possível, você deve usar a ID do Microsoft Entra para autenticação em vez de cadeias de conexão, que contêm chaves compartilhadas. Usar 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 aplicativo original usou cadeias de conexão, o plano de Consumo Flex foi projetado para dar suporte a identidades gerenciadas. A maioria desses links mostra como habilitar identidades gerenciadas em seu aplicativo de funções.

Aplicar configurações de aplicativo migradas no novo aplicativo

Antes de implantar seu código, você deve configurar o novo aplicativo com as configurações relevantes do aplicativo de plano de consumo flex do seu aplicativo de funções original.

Importante

Nem todas as configurações de aplicativo do Plano de Consumo têm suporte ao serem executadas em um Plano de Consumo Flex. Para obter mais informações, veja Descontinuações do plano de Consumo Flexível.

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 de Consumo Flex 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 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 e os nomes antigos de um novo aplicativo, respectivamente. Esse script pressupõe que ambos os aplicativos estejam no mesmo grupo de recursos.

Aplicar outras configurações de aplicativo

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

Neste script, defina o valor de 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> pelos nomes do grupo de recursos e do aplicativo de funções, respectivamente. Além disso, substitua os espaços reservados de qualquer definição de variável para as configurações existentes que você deseja recriar no novo aplicativo e comente todas as configurações null.

Definir configurações de escala e simultaneidade

O plano de Consumo Flex implementa o dimensionamento por função, em que cada função em 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 o dimensionamento por função e a Simultaneidade no artigo do plano de Consumo Flexível.

Considere as configurações de simultaneidade primeiro se você quiser que seu novo aplicativo seja dimensionado de forma semelhante ao aplicativo original. Definir valores de simultaneidade mais altos pode resultar em menos instâncias sendo criadas para lidar com a mesma carga.

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

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

Use este comando az functionapp scale config set para definir a escala 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> pelos nomes do grupo de recursos e do aplicativo de funções, respectivamente. Substitua <MAX_SCALE_SETTING> pelo valor máximo de escala que você está definindo.

Configurar domínios personalizados e acesso ao CORS

Se o aplicativo original tiver domínios personalizados associados ou configurações de CORS definidas, recrie-os em seu 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 associar novamente todos os 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> pelos nomes do grupo de recursos e do aplicativo de funções, respectivamente. Substitua <CUSTOM_DOMAIN> pelo nome de domínio personalizado.

  2. Use este az functionapp cors add comando para substituir as configurações do 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> pelos nomes do grupo de recursos e do aplicativo de funções, respectivamente. Substitua por <ALLOWED_ORIGIN_*> 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 gerenciada Criar a identidade Atribuições de função
Atribuído pelo usuário Opcional Você pode continuar a usar as mesmas identidades gerenciadas atribuídas pelo usuário com o novo aplicativo. Você deverá reatribuir essas identidades ao seu aplicativo de Consumo Flexível e verificar se elas ainda têm as atribuições de função corretas em 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ída pelo sistema Sim Como cada aplicativo de funções tem sua própria identidade gerenciada atribuída pelo sistema, você deve habilitar a identidade gerenciada atribuída pelo 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ções tenha o mesmo acesso aos recursos do Azure após a migração.

Dica

Se o aplicativo original usou cadeias de conexão ou outros segredos compartilhados para autenticação, essa é uma ótima oportunidade para melhorar a segurança do aplicativo alternando para usar a autenticação da ID do Microsoft Entra com identidades gerenciadas. Para obter mais informações, consulte Tutorial: Criar um aplicativo de funções 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 pelo sistema em seu novo aplicativo:

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

    Neste exemplo, substitua <RESOURCE_GROUP> e <APP_NAME> pelos nomes do grupo de recursos e do aplicativo de funções, respectivamente.

  2. Use este script para obter a ID principal da identidade atribuída pelo sistema e adicioná-la à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> pelos nomes do grupo de recursos e do aplicativo de funções, respectivamente. Substitua <ROLE_NAME> e <RESOURCE_ID> pelo nome da função e o recurso específico que você capturou do aplicativo original.

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

Configurar restrições de acesso à rede

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

Dica

O plano de consumo flex dá suporte total à integração de rede virtual. Por isso, você também tem a opção de usar endpoints privados de entrada após a migração. Para obter mais informações, confira Pontos de extremidade 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 aplicativo original.

Espaço reservado Valor
<APP_NAME> Nome do seu aplicativo de funções.
<RESOURCE_GROUP> Seu grupo de recursos.
<RULE_NAME> Nome amigável da regra de IP.
<Priority> Prioridade para a exclusão.
<IP_Address> O endereço IP a ser excluído.

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

Habilitar o monitoramento

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

Implemente uma estratégia de monitoramento abrangente que abrange métricas, logs e custos do aplicativo. Usando essa estratégia, você pode validar o sucesso da migração, identificar os problemas imediatamente e otimizar o desempenho e o custo do novo aplicativo.

Se você planeja comparar esse novo aplicativo com seu aplicativo atual, verifique se o esquema também coleta os parâmetros de comparação necessários. Para obter mais informações, consulte Configurar o monitoramento.

Configurar a autenticação interna

Se o aplicativo original usou a autenticação de cliente interna (às vezes chamada de Autenticação Fácil), você deverá recriá-la em seu novo aplicativo. Caso esteja planejando reutilizar o mesmo registro de cliente, defina 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.

Implantar o código de seu aplicativo no novo aplicativo Consumo Flexível

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

Cuidado

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

O Functions fornece várias maneiras de implantar seu código, no projeto de código ou como um pacote de implantação pronto para execução.

Dica

Se o código do projeto for mantido em um repositório de código-fonte, agora será 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 saber mais, confira Implantação contínua do 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á em execução em um plano de consumo flex:

    Use este az functionapp show comando para exibir 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> pelos nomes do grupo de recursos e do aplicativo de funções, respectivamente.

  2. Use um cliente HTTP para chamar pelo menos um endpoint de gatilho HTTP no seu novo aplicativo para verificar se ele responde como esperado.

Capturar parâmetros de comparação de desempenho

Com o novo aplicativo em execução, você pode executar os mesmos parâmetros de desempenho coletados do aplicativo original, como:

Parâmetro de comparação sugerido Comentário
Início a frio Meça o tempo da primeira solicitação para a primeira resposta após um período ocioso.
Taxa de transferência 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 P50, P95 e P99 em várias condições de carga. Você pode monitorar essas métricas no Application Insights.

Você pode usar essa consulta Kusto para examinar 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, tenha em mente que você deve usar métricas diferentes para acompanhar características de desempenho semelhantes. Para obter mais informações, consulte Configurar o 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 de plataforma e logs e análises de runtime.

Considere a configuração de dashboards e alertas em suas principais métricas no portal do Azure. Para obter mais informações, consulte Monitorar seu aplicativo no Azure.

Aperfeiçoar configurações do plano

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

Remover o aplicativo original (opcional)

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

Importante

Essa ação exclui seu aplicativo de funções original. O plano de consumo permanecerá intacto se outros aplicativos estiverem usando-o. Antes de continuar, verifique se você migrou com êxito todas as funcionalidades para o novo aplicativo de Consumo Flex, verificou que nenhum tráfego está sendo direcionado para o aplicativo original e fez backup de todos os 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ções original:

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

Neste exemplo, substitua <RESOURCE_GROUP> e <APP_NAME> pelos nomes do grupo de recursos e do aplicativo de funções, respectivamente.

Solução de problemas e estratégias de recuperação

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

Questão Solução
Problemas de desempenho de início frio • Examinar as configurações de concorrência
• Verificar se há dependências ausentes
Associações ausentes • Verificar pacotes de extensão
• Atualizar configurações de associaçã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 aplicativo ausentes • Recriar a conexão do Application Insights
Falha ao iniciar o aplicativo Confira as etapas gerais de solução de problemas
Gatilhos não estão processando eventos Confira as etapas gerais de solução de problemas

Se você tiver problemas ao migrar um aplicativo de produção, talvez queira reverter a migração para o aplicativo original enquanto soluciona problemas.

Etapas gerais de solução de problemas

Use estas etapas para casos em que o novo aplicativo falha ao iniciar ou gatilhos de função não estão processando eventos:

  1. Na nova página do aplicativo no portal do Azure, selecione Diagnosticar e resolver problemas no painel esquerdo da página do aplicativo. Selecione Disponibilidade e Desempenho e examine o detector de Aplicativo de funções inoperante ou relatando erros. Para obter mais informações, consulte a visão geral do diagnóstico do Azure Functions.

  2. Na página do aplicativo, selecione Monitoramento, depois >, Exibir dados do Application Insights e, em seguida, selecione >Falhas e verifique se há eventos de falha.

  3. Selecione Monitoramento>Logs e execute esta consulta Kusto para verificar erros nestas 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 novo aplicativo. Essas consultas verificam se há erros no último dia (where timestamp > ago(1d)).

  4. Na 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 quaisquer configurações obsoletas que possam ter sido migradas incorretamente ou erros de digitação ou cadeias de conexão incorretas. Verifique a conexão de armazenamento de host padrão.

  5. SelecioneIdentidade de > e verifique se as identidades esperadas existem e se elas 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 atenção especial aos nomes de cadeia de conexão, nomes de fila de armazenamento e contêineres e às configurações de grupo de consumidores nos gatilhos dos Hubs de Eventos.

Etapas de reversão para aplicativos de produção críticos

Se você não conseguir solucionar problemas com êxito, talvez queira voltar a usar seu aplicativo original enquanto continua a solucionar problemas.

  1. Se o aplicativo original tiver sido interrompido, reinicie-o:

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

    az functionapp delete --name <ORIGINAL_APP_NAME> --resource-group <RESOURCE_GROUP>
    
  2. Se você criou novas filas/tópicos/contêineres, verifique se os clientes serão 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.

Fornecendo comentários

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

- Obter ajuda no Microsoft Q&A
-Criar um problema no repositório do Azure Functions
- Fornecer comentários sobre o produto
- Criar um tíquete de suporte