Problemas ao chamar funções

Descubra como diagnosticar e solucionar problemas ao chamar funções implantadas no OCI Functions.

Você pode encontrar esses problemas ao chamar funções implantadas no OCI Functions.

A chamada de uma função retorna uma mensagem FunctionInvokeRequestContentTooLarge e um erro 413

Quando você chama uma função que implantou para o OCI Functions, pode ver a seguinte mensagem de erro:

{"code":"FunctionInvokeRequestContentTooLarge","message":"Request content too large"}
Fn: Error invoking function. status: 413 message: Request content too large

A mensagem indica que o conteúdo da solicitação para o OCI Functions excede o tamanho máximo permitido de 6 MB.

Se você vir esse erro, verifique novamente se o conteúdo da solicitação não excede o tamanho máximo permitido.

A chamada de uma função retorna uma mensagem TooManyRequests e um erro 429

Quando você chama uma função que implantou para o OCI Functions, pode ver a seguinte mensagem de erro:

{"code":"TooManyRequests","message":"User-rate limit exceeded"}
Fn: Error invoking function. status: 429 message: User-rate limit exceeded

A mensagem indica que o OCI Functions já está lidando com o número máximo de solicitações permitidas para sua tenancy e não pode aceitar outra solicitação.

Para obter mais informações sobre como antecipar e evitar proativamente esse erro, consulte Monitorando o Uso e a Disponibilidade da Memória para Funções do OCI.

Se você vir esse erro, aguarde alguns minutos antes de chamar a função novamente. Como alternativa, ou se o problema persistir, Entre em Contato Conosco para aumentar a memória total para execução da função concorrente.

A chamada de uma função faz com que o cliente reporte um timeout, e um erro 444 é mostrado nos logs da função

Quando você chama uma função que implantou no OCI Functions, o cliente pode reportar um timeout.

Investigue ainda mais verificando os logs da função (consulte Armazenando e Exibindo Logs de Função). Se os logs contiverem uma mensagem de status 444, a conexão entre o cliente e o OCI Functions será interrompida durante a execução da função. Se você vir uma mensagem de status 444 nos logs da função, chame a função novamente.

Observe que a forma como você chama uma função também determina o tempo máximo pelo qual a função pode ser executada. Para obter mais informações, consulte Chamando Funções.

A chamada de uma função retorna uma mensagem de falha de Função e um erro 502

Se houver um problema com o código de uma função, você verá o seguinte erro ao chamar a função:

Fn: Error invoking function. status: 502 message: Function failed

Para investigar o problema com o código da função, verifique a saída dos logs pela função. O serviço Oracle Cloud Infrastructure Logging é a opção padrão e recomendada para acessar, pesquisar e armazenar logs de funções. Observe que para armazenar e exibir logs de uma função, a função deve incluir instruções de impressão. Para obter mais informações, consulte Armazenando e Exibindo Logs de Função.

Chamar uma função retorna uma mensagem FunctionInvokeSyslogUnavailable e um erro 502

O OCI Functions permite enviar os logs de uma função para um destino de log externo (como Papertrail) definindo um URL syslog para o aplicativo. Consulte Armazenando e Exibindo Logs de Função.

Se o URL do syslog for inválido ou inacessível, você verá o seguinte erro ao chamar a função:

{"code":"FunctionInvokeSyslogUnavailable","message":"Syslog endpoint unavailable"}

Fn: Error invoking function. status: 502 message: Syslog endpoint unavailable

Para confirmar se o URL do destino do log externo é a causa do erro:

  1. Atualize o aplicativo para cancelar a definição do URL do syslog usando a CLI do Fn Project. Por exemplo, informando:
    fn update app helloworld-app --syslog-url ''
  2. Implante a função que deseja executar. Consulte Criando e Implantando Funções.
  3. Chame a função. Consulte Chamando Funções.

Se a função for executada com sucesso, o URL do destino do log externo não poderá ser acessado pela sub-rede na qual a função está em execução. Verifique se:

  • O URL do destino do log externo é válido.
  • O URL de destino de log externo no URL é acessível publicamente.
  • A sub-rede na qual a função está sendo executada tem acesso de saída à internet pública.

A chamada de uma função retorna uma mensagem FunctionInvokeImageNotAvailable e um erro 502

Quando você chama uma função, o OCI Functions extrai a imagem correspondente do Oracle Cloud Infrastructure Registry usando a VCN e as sub-redes especificadas para o aplicativo.

Se o OCI Functions não conseguir obter a imagem, a seguinte mensagem será retornada quando você chamar uma função:

{"code":"FunctionInvokeImageNotAvailable","message":"Failed to pull function image"}

Fn: Error invoking function. status: 502 message: Failed to pull function image

Soluções possíveis:

  • Verifique cuidadosamente se a imagem especificada para a função ainda existe no local especificado no Oracle Cloud Infrastructure Registry.
  • Verifique cuidadosamente se o Oracle Cloud Infrastructure está disponível (esta mensagem será retornada se o Oracle Cloud Infrastructure estiver inesperadamente indisponível).
  • Verifique cuidadosamente se a VCN inclui um gateway de internet ou de serviço. Para que o OCI Functions possa acessar o Oracle Cloud Infrastructure Registry para obter uma imagem, a VCN deve incluir um gateway de internet ou um gateway de serviço, da seguinte forma:

    • Se foram especificadas sub-redes públicas para o aplicativo, a VCN também deve incluir um gateway de internet. Uma tabela de roteamento deve incluir uma regra de roteamento que direciona o gateway de internet, com sua propriedade Bloco CIDR de Destino definida como 0.0.0.0/0. Uma lista de segurança deve incluir uma regra de saída com monitoramento de estado que permita o acesso ao Oracle Cloud Infrastructure Registry (por exemplo, com sua propriedade Tipo de Destino definida como Service, sua propriedade Serviço de Destino definida como All <region> services In Oracle Services Network e sua propriedade Protocolo IP definida como All).
    • Se foram especificadas sub-redes privadas para a aplicação, a VCN também deverá incluir um gateway de serviço. O gateway de serviço deve ser configurado para permitir o acesso a All <region> Services In Oracle Services Network. Uma tabela de roteamento deve incluir uma regra de roteamento que direciona o gateway de serviço, com sua propriedade Serviço de Destino definida como All <region> Services In Oracle Services Network. Uma lista de segurança deve incluir uma regra de saída com monitoramento de estado que permita o acesso ao Oracle Cloud Infrastructure Registry (por exemplo, com sua propriedade Tipo de Destino definida como Service, sua propriedade Serviço de Destino definida como All <region> services In Oracle Services Network e sua propriedade Protocolo IP definida como All).

    Se um gateway de internet ou de serviço já não tiver sido definido para a VCN, defina um agora.

Chamar uma função retorna uma mensagem FunctionInvokeSubnetOutOfIPs e um erro 502

Quando você chama uma função que implantou para o OCI Functions, pode ver a seguinte mensagem de erro:

{"code":"FunctionInvokeSubnetOutOfIPs","message":"subnet ocid1.subnet.oc1.phx.aaaaaaaac... is out of IPs"}
Fn: Error invoking function. status: 502 message: subnet ocid1.subnet.oc1.phx.aaaaaaaac... is out of IPs

Se você vir esse erro, verifique duas vezes se cada sub-rede na VCN tem pelo menos o número mínimo necessário de endereços IP livres especificado em Criando a VCN e as Sub-redes para Usar com o OCI Functions, se ainda não existem.

A chamada de uma função retorna uma mensagem FunctionInvokeSubnetNotAvailable e um erro 502 (decorrente de um problema de sub-rede)

Quando você chama uma função que implantou para o OCI Functions, pode ver a seguinte mensagem de erro:

{"code":"FunctionInvokeSubnetNotAvailable","message":"subnet ocid1.subnet.oc1.phx.aaaaaaaac... does not exist or Oracle Functions is not authorized to use it"}
Fn: Error invoking function. status: 502 message: subnet ocid1.subnet.oc1.phx.aaaaaaaac... does not exist or Oracle Functions is not authorized to use it

Se você vir esse erro, verifique novamente se a sub-rede especificada para o aplicativo ainda existe.

A chamada de uma função retorna uma mensagem FunctionInvokeSubnetNotAvailable e um erro 502 (decorrente de um problema com Opções de DHCP)

Quando você chama uma função que implantou para o OCI Functions, pode ver a seguinte mensagem de erro:

{"code":"FunctionInvokeSubnetNotAvailable","message":"dhcp options ocid1.dhcpoptions.oc1.phx.aaaaaaaac... does not exist or Oracle Functions is not authorized to use it"}
Fn: Error invoking function. status: 502 message: dhcp options ocid1.dhcpoptions.oc1.phx.aaaaaaaac... does not exist or Oracle Functions is not authorized to use it

Se você vir esse erro, verifique novamente se o conjunto de Opções de DHCP na VCN especificada para o aplicativo ainda existe.

A chamada de uma função retorna uma mensagem FunctionInvokeResponseBodyTooLarge e um erro 502

Quando você chama uma função que implantou para o OCI Functions, pode ver a seguinte mensagem de erro:

{"code":"FunctionInvokeResponseBodyTooLarge","message":"function response body too large"}
Fn: Error invoking function. status: 502 message: function response body too large

A mensagem indica que a resposta retornada pela execução da função excede o tamanho máximo permitido de 6 MB.

Se você vir esse erro, revise o código da função e reduza o tamanho das respostas que a função retorna.

Chamar uma função retorna uma mensagem FunctionInvokeResponseHeaderTooLarge e um erro 502

Quando você chama uma função que implantou para o OCI Functions, pode ver a seguinte mensagem de erro:

{"code":"FunctionInvokeResponseHeaderTooLarge","message":"function response header too large"}
Fn: Error invoking function. status: 502 message: function response body too large

A mensagem indica que o cabeçalho de resposta retornado pela execução da função excede o tamanho máximo permitido.

Se você vir esse erro, revise o código da função e reduza o número e/ou o tamanho de quaisquer cabeçalhos personalizados que a função retornar.

Chamar uma função retorna uma mensagem FunctionInvokeTooManyMatchingDGs e um erro 502

Quando você chama uma função que implantou para o OCI Functions, pode ver a seguinte mensagem de erro:

{"code":" FunctionInvokeTooManyMatchingDGs","message":"Unable to get resource authorization token due to Function resource matching too many Dynamic Groups. Update your Dynamic Groups' matching rules"}
Fn: Error invoking function. status: 502 message: Unable to get resource authorization token due to Function resource matching too many Dynamic Groups. Update your Dynamic Groups' matching rules

A mensagem indica que a função pertence a grupos mais dinâmicos do que o número máximo suportado.

Se você vir esse erro, reduza o número de grupos dinâmicos aos quais a função pertence atualizando as regras de correspondência de grupo dinâmico. Para descobrir o número máximo de grupos dinâmicos aos quais uma função pode pertencer, consulte Limites de Grupos Dinâmicos (o limite mostrado para uma única instância de computação também se aplica a uma função).

Chamar uma função retorna uma mensagem FunctionInvokeExecutionError e um erro 502

Quando você chama uma função que implantou para o OCI Functions, pode ver a seguinte mensagem de erro:

{"code":"FunctionInvokeExecutionError","message":"error receiving function response"}
Fn: Error invoking function. status: 502 message: error receiving function response

A mensagem indica que a resposta da execução da função retorna um erro.

Se você vir esse erro inesperadamente, revise o código da função para entender as condições em que a função não é executada com sucesso.

Chamar uma função retorna uma mensagem FunctionInvokeExecutionFailed e um erro 502

Quando você chama uma função que implantou para o OCI Functions, pode ver a seguinte mensagem de erro:

{"code":"FunctionInvokeExecutionFailed","message":"function failed"}
Fn: Error invoking function. status: 502 message: function failed

A mensagem indica que um erro foi detectado durante a execução da função, o que provavelmente foi causado por um bug no código da função.

Se você vir esse erro, revise o código da função e corrija os bugs que encontrar.

Chamar uma função retorna uma mensagem FunctionInvokeInvalidResponse e um erro 502

Quando você chama uma função que implantou para o OCI Functions, pode ver a seguinte mensagem de erro:

{"code":"FunctionInvokeInvalidResponse","message":"invalid function response"}
Fn: Error invoking function. status: 502 message: invalid function response

A mensagem indica que chamar a função retorna um código de resposta HTTP inválido (nem uma falha de função nem um timeout).

Se você vir esse erro, revise o código da função e corrija os bugs que encontrar.

Chamar uma função retorna uma mensagem FunctionInvokeSubnetConfigError e um erro 502

Quando você chama uma função que implantou para o OCI Functions, pode ver a seguinte mensagem de erro:

{"code":"FunctionInvokeSubnetConfigError","message":"Customer subnet DNS resolver error. Please fix the subnet configuration and try again"}
Fn: Error invoking function. status: 502 message: Customer subnet DNS resolver error. Please fix the subnet configuration and try again

A mensagem indica um problema de configuração da VCN, provavelmente relacionado à configuração do resolvedor personalizado.

Se você vir esse erro, identifique qualquer sub-rede na VCN que esteja usando um resolvedor personalizado. Quando uma sub-rede estiver usando um resolvedor personalizado (por exemplo, localizado na internet, na VCN ou na sua rede local), confirme se o resolvedor personalizado está acessível. Verifique também se o resolvedor personalizado está funcionando corretamente. Para obter mais informações sobre resolvedores personalizados, consulte DNS na Sua Rede Virtual na Nuvem.

Se o erro persistir, verifique se a configuração da VCN (e a configuração do resolvedor personalizado, se usada) está correta chamando uma nova função hello world em execução em uma nova VCN:

  1. Crie uma nova VCN usando o Assistente de VCN (selecione VCN com Conectividade de Internet).
  2. Crie um novo recurso Opções de DHCP e especifique as mesmas opções de DNS anteriores (se um resolvedor personalizado tiver sido usado antes, selecione Resolvedor Personalizado).
  3. Crie uma nova sub-rede na VCN e selecione o recurso Opções de DHCP que você acabou de criar.
  4. Crie um novo aplicativo, especificando a VCN e a sub-rede que você acabou de criar.
  5. Crie uma simples função hello world no aplicativo que você acabou de criar.
  6. Confirme se você pode invocar com sucesso a nova função hello world.

Se o problema persistir, Entre em Contato Conosco para ajudá-lo a resolver o problema de configuração da VCN.

A chamada de uma função retorna a mensagem "O tamanho combinado descompactado de todas as imagens de Função em um aplicativo excedeu o limite alocado...." e um erro 502

Quando você chama uma função que implantou no OCI Functions, a imagem da função é extraída do registro do Docker. Dependendo do tamanho da imagem e do tamanho das imagens para outras funções no aplicativo, você poderá ver uma mensagem semelhante à seguinte:

Fn: Error invoking function. status: 502 message: The combined uncompressed size of all Function images in an application has exceeded the allowed limit. Please reduce the size of the images or number of functions from the application.

Esta mensagem indica que a extração da imagem da função aumentou o tamanho total descompactado de todas as imagens para funções no aplicativo além do limite máximo permitido.

Se você vir esse erro:

  • Use técnicas padrão para reduzir o tamanho da imagem da função e/ou o tamanho das imagens para outras funções no aplicativo.
  • Reduza o número de funções no aplicativo.

A chamada de uma função retorna uma mensagem FunctionInvokeServiceUnavailable e um erro 503

Quando você chama uma função que implantou para o OCI Functions, pode ver a seguinte mensagem de erro:

{"code":"FunctionInvokeServiceUnavailable","message":"Timed out - server too busy"}
Fn: Error invoking function. status: 503 message: Timed out - server too busy

A mensagem indica que o OCI Functions não pode tratar a solicitação no momento, possivelmente por causa de capacidade insuficiente. Encontrar essa mensagem de erro várias vezes não é incomum, porque pode levar algum tempo para aumentar a capacidade do OCI Functions para atender à demanda de chamadas de funções.

Se você vir esse erro, tente chamar a função novamente. Não se preocupe se a mensagem reaparecer. Continue a repetir a chamada da função, deixando um curto período de tempo entre as tentativas de chamada.

Observe o seguinte:

  • Se você continuar a ver esse erro, considere aumentar o intervalo de tempo entre as invocações de função (talvez usando uma técnica padrão como backoff exponencial jittered para adicionar um grau de aleatoriedade ao intervalo).
  • Se a mensagem for exibida quando uma função for chamada como resultado de uma ação acionada por um evento, tentativas adicionais de chamar a função serão repetidas automaticamente até que a função seja chamada com sucesso. Nenhuma intervenção de sua parte é necessária.
  • Se você configurar alarmes que são acionados por respostas de erro de função contendo 503 códigos de erro, poderá ver várias notificações para as quais nenhuma intervenção de sua parte é necessária
  • Se a mensagem continuar a aparecer após um período prolongado, Entre em Contato Conosco para obter assistência.

A chamada de uma função retorna uma mensagem de erro FunctionInvokeContainerInitFail, um erro 504 e uma mensagem de log 'ModuleNotFoundError: Nenhum módulo chamado 'contextvars'

Quando você chama uma função Python 3.6 que implantou para o OCI Functions, pode ver a seguinte mensagem de erro:

{"code":"FunctionInvokeContainerInitFail","message":"Container failed to initialize, please ensure you are using the latest fdk and check the logs"}

Fn: Error invoking function. status: 504 message: Container failed to initialize, please ensure you are using the latest fdk and check the logs

Se você vir esse erro, verifique os logs da função. Se você vir uma mensagem "ModuleNotFoundError: No module named 'contextvars' nos logs da função:

  1. Adicione a linha a seguir ao arquivo requirements.txt da função:
    fdk>=0.1.21
  2. Reimplante a função no OCI Functions.
  3. Chame a função novamente.

A chamada de uma função retorna as mensagens FunctionInvokeContainerInitFail e "tempo limite da inicialização do contêiner" e um erro 504

Quando você chama uma função que você implantou no OCI Functions, a execução da função está sujeita a um limite máximo de memória. Se esse limite for excedido, a execução da função será interrompida e a seguinte mensagem de erro será retornada:

{"code":"FunctionInvokeContainerInitFail","message":"Container failed to initialize, please ensure you are using the latest fdk and check the logs"}

Fn: Error invoking function. status: 504 message: Container failed to initialize, please ensure you are using the latest fdk and check the logs

Se você vir esse erro, aumente o limite máximo de memória da função. Por exemplo, para 256 MB, 512 MB, 1024 MB, 2048 MB ou 3072 MB. Consulte Alterando Definições Padrão de Memória e Timeout para obter valores válidos para o limite máximo de memória.

Por exemplo, para definir o limite máximo de memória de uma função para 256 MB, faça o seguinte:

  • Selecione Editar na página de detalhes da função na Console e selecione 256 na lista drop-down Memória (em MBs),
  • Adicione a linha a seguir ao arquivo func.yaml da função. Isso definirá o limite máximo de memória para 256 MB sempre que a função for chamada:

    memory: 256

    Observe que, se você editar o arquivo func.yaml, deverá implantar novamente a função no OCI Functions antes de chamá-la novamente.

É uma boa ideia usar a versão mais recente da CLI do Fn Project ao criar uma função helloworld Python. Quando você informa o comando fn init --runtime python <function-name> para criar a função helloworld, a linha memory: 256 é adicionada ao arquivo func.yaml automaticamente.

Chamar uma função retorna uma mensagem FunctionInvokeTimeout e um erro 504

Quando você chama uma função que implantou no OCI Functions, a função só pode ser executada por um determinado tempo. Se esse limite de tempo for excedido, a execução da função será interrompida e a seguinte mensagem de erro será retornada:

{"code":"FunctionInvokeTimeout","message":"Timed out"}

Fn: Error invoking function. status: 504 message: Timed out

Se você vir esse erro, tente aumentar o tempo máximo que uma função pode executar na definição da função. Por exemplo, para definir o tempo máximo para 300 segundos, execute um dos seguintes procedimentos:

  • Selecione Editar na página de detalhes da função na Console e informe 300 no campo Timeout (em segundos).
  • Adicione a linha a seguir ao arquivo func.yaml da função. Isso definirá o limite máximo de tempo para 300 segundos sempre que a função for chamada:

    timeout: 300

    Lembre-se de que, se você editar o arquivo func.yaml, deverá implantar novamente a função no OCI Functions antes de chamá-la novamente.

Observe que a forma como você chama uma função também determina o tempo máximo pelo qual a função pode ser executada. Para obter mais informações, consulte Chamando Funções.

Você também poderá ver essa mensagem de erro quando uma função em execução em uma sub-rede pública não puder estabelecer conexão com uma instância do Oracle Autonomous Database que tenha listas de controle de acesso (ACLs) ativadas. Se esse for o caso, consulte Estabelecendo Conexão com Instâncias do Oracle Autonomous Database Usando Funções em Execução para obter mais informações sobre:

  • Configurando a sub-rede para enviar todo o tráfego da internet de saída para um gateway NAT e permitir o tráfego da internet.
  • Adicionando o endereço IP público do gateway NAT à lista de controle de acesso do banco de dados.

Chamar uma função retorna uma mensagem FunctionInvokeContainerInitTimeout e um erro 504

Quando você chama uma função que implantou no OCI Functions, a imagem da função é extraída do registro do Docker e executada dentro de um contêiner. Dependendo das dependências da função, o contêiner pode levar muito tempo para ser iniciado. Se o contêiner demorar muito para ser iniciado, você poderá ver a seguinte mensagem de erro:

{"code":"FunctionInvokeContainerInitTimeout","message":"Container initialization timed out, please ensure you are using the latest fdk and check the logs"}
Fn: Error invoking function. status: 504 message: Container initialization timed out, please ensure you are using the latest fdk and check the logs

Se você vir esse erro, aumente o limite máximo de memória da função. Por exemplo, para 256 MB, 512 MB, 1024 MB, 2048 MB ou 3072 MB. Consulte Alterando Definições Padrão de Memória e Timeout para obter valores válidos para o limite máximo de memória.

Por exemplo, para definir o limite máximo de memória de uma função para 256 MB, faça o seguinte:

  • Selecione Editar na página de detalhes da função na Console e selecione 256 na lista drop-down Memória (em MBs),
  • Adicione a linha a seguir ao arquivo func.yaml da função. Isso definirá o limite máximo de memória para 256 MB sempre que a função for chamada:

    memory: 256

    Observe que, se você editar o arquivo func.yaml, deverá implantar novamente a função no OCI Functions antes de chamá-la novamente.

É uma boa ideia usar a versão mais recente da CLI do Fn Project ao criar uma função helloworld Python. Quando você informa o comando fn init --runtime python <function-name> para criar a função helloworld, a linha memory: 256 é adicionada ao arquivo func.yaml automaticamente.

Chamar uma função retorna uma mensagem FunctionInvokeImagePullTimeout e um erro 504

Quando você chama uma função que implantou no OCI Functions, a imagem da função é extraída do registro do Docker. Dependendo do tamanho da imagem, pode levar muito tempo para extrair a imagem. Se demorar muito para extrair a imagem, você poderá ver a seguinte mensagem de erro:

{"code":"FunctionInvokeImagePullTimeout","message":"Image pull timed out"}
Fn: Error invoking function. status: 504 message: Image pull timed out
Se você vir esse erro:
  • Use técnicas padrão para reduzir o tamanho da imagem.
  • Verifique cuidadosamente se a imagem especificada para a função ainda existe no local especificado no Oracle Cloud Infrastructure Registry.