Solucione problemas de uma aplicação OpenNext
Descubra por que uma aplicação OpenNext na Azion oculta erros, falha no deployment ou não lê variáveis de ambiente e aplique a correção.
Esta página lista os sintomas que uma aplicação OpenNext pode apresentar na Azion, cada um com a causa e a correção. O código da aplicação é executado como uma função, então os logs, os limites e as variáveis de ambiente de Functions se aplicam a ele. Os sintomas cobrem erros que você não consegue ver, contexto de requisição que você não consegue ler, um deployment recusado pelo tamanho e variáveis de ambiente ausentes.
Um erro só aparece depois do deployment
O código que funcionava na sua máquina falha quando é executado na Azion. Cada tentativa de correção exige então outro deployment antes que você veja se ela funcionou.
Sem uma execução local, a função implantada é o primeiro lugar em que o seu código encontra Azion Runtime. Cada erro então custa um deployment para aparecer.
Para detectar o erro antes do deployment:
- Execute a aplicação localmente: Azion CLI inicia um servidor local que simula a plataforma Azion. Cada requisição que você envia a esse servidor executa a sua função. O terminal imprime a saída de
console.logdo código e qualquer erro que ele gerar. Para o comando e as opções dele, consulte Desenvolva e teste uma function localmente. - Corrija o código e envie a requisição de novo: a alteração é executada na sua máquina, sem deployment e sem efeito no tráfego de produção.
O erro e a saída dos seus logs agora aparecem no terminal antes que o código chegue à produção.
Uma função implantada falha sem mostrar um erro
Em produção, a aplicação responde de um jeito que você não esperava, e nada indica onde o código errou.
Uma função implantada envia a saída de console.log e os erros dela para a Azion, não para o seu terminal. Até você ler essa saída lá, a única evidência que você tem é a resposta que a função retornou.
Para ler o que a função registrou:
- Acompanhe as novas linhas de log pelo terminal: Azion CLI transmite os logs das suas funções à medida que eles chegam. Use-a para um problema que está acontecendo agora ou para observar a aplicação durante um novo deployment.
- Filtre e pesquise os logs no Azion Console: Real-Time Events lista a saída de
console.logdas suas funções. Ele filtra os eventos por período e pesquisa uma mensagem neles. Cada evento mostra o ID da função e o timestamp dele. - Consulte as linhas de log com GraphQL: a API GraphQL retorna as mesmas linhas em formato estruturado, para automação ou para um sistema de monitoramento que você já usa. O dataset
functionConsoleEventsdela retorna cada linha com o timestamp, o ID da função e o ID de configuração. Uma consulta pode filtrar as linhas por intervalo de tempo e pelo texto que elas contêm. Crie e teste a consulta no GraphQL Playground do Azion Console antes de levá-la para as suas ferramentas.
Para os passos em cada interface, consulte Solução de problemas de execução e logs de funções.
A linha que o seu código registrou, ou o erro que a função gerou, agora aponta para o caminho do código que falhou.
A lógica que depende da requisição dá o resultado errado
Roteamento, bloqueio por região ou personalização de conteúdo não se comporta como você espera para alguns clientes.
Uma lógica desse tipo lê o contexto da requisição, como o lugar de onde ela vem. A resposta não mostra esse contexto. A falha pode estar nos valores que o seu código recebeu, e não no código em si.
Para ver os valores que a sua lógica recebe:
- Registre os metadados da requisição que a sua lógica lê: a API de metadados dá a uma função o contexto da requisição, como
geoip_continent_code, o código do continente do cliente. Escreva o valor comconsole.logao lado da decisão que o usa. - Leia a linha nos logs: faça o deployment da alteração e depois leia os logs pela Azion CLI, pelo Real-Time Events ou pela API GraphQL. Para os passos, consulte Solução de problemas de execução e logs de funções.
Cada linha de log agora associa o código do continente de uma requisição ao caminho que o seu código seguiu para ela.
Um deployment falha porque a função é grande demais
O deployment para com um erro sobre o tamanho da função.
O código empacotado é maior do que a Azion aceita para uma função. Limites de Functions limita o código a 20 MB quando você faz o deployment dele pela Azion API. O código criado ou editado no Azion Console tem um limite de 6 MB.
Para deixar o bundle dentro do limite:
- Encontre as dependências grandes: analise o bundle com uma ferramenta como o Webpack Bundle Analyzer ou o ESBuild Analyzer.
- Remova as dependências não usadas: verifique o
package.jsone a base de código em busca de pacotes que a aplicação não usa. - Importe só as funções que você usa: importe uma função em vez de uma biblioteca inteira. Escreva
import { parse } from "date-fns"em vez deimport * as dateFns from "date-fns". - Entregue assets estáticos e arquivos grandes a partir de um storage: mova esses arquivos para Object Storage e faça referência a eles por URL em vez de empacotá-los.
- Solicite um limite maior: os limites de tamanho de código são valores padrão. Para aumentar um deles no seu plano, entre em contato com o suporte técnico.
Com o bundle dentro do limite, o deployment não falha mais pelo tamanho da função.
As variáveis de ambiente não estão disponíveis para a função
O código espera uma variável de ambiente e não recebe o valor dela. Azion.env.get() retorna undefined para uma chave que não existe, e a função continua com esse valor.
Uma função lê só as variáveis que existem na conta, com a chave exata que o código pede. Um valor que você altera depois de um deployment não chega à função que já está em execução.
Para disponibilizar o valor:
- Crie a variável na conta: gerencie as variáveis de ambiente pela Azion API, pela Azion CLI ou pelo Azion Terraform provider. Dê à variável a chave exata que o seu código lê.
- Faça o deployment de novo depois de uma alteração: um valor novo não chega a uma função em execução. Faça o deployment da função de novo para que a alteração tenha efeito.
- Leia a variável por uma interface suportada:
Azion.env.get()recebe a chave e retorna o valor. Azion Runtime também suportaprocess.envpara compatibilidade com Node.js. - Evite que o build descarte as variáveis: em um projeto Next.js, verifique se o processo de build não sobrescreve nem ignora as variáveis.
Para os campos, os limites e as interfaces de gerenciamento, consulte Variáveis de ambiente.
A função agora lê o valor que você definiu para a chave.