Problemas al llamar a funciones

Descubra cómo solucionar problemas al llamar a funciones desplegadas en OCI Functions.

Puede que se produzcan estos problemas al llamar a funciones desplegadas en OCI Functions.

La llamada a una función devuelve un mensaje FunctionInvokeRequestContentTooLarge y un error 413

Cuando llama a una función desplegada en OCI Functions, es posible que aparezca el siguiente mensaje de error:

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

El mensaje indica que el contenido de la solicitud a OCI Functions supera el tamaño máximo permitido de 6 MB.

Si ve este error, compruebe dos veces que el contenido de la solicitud no supera el tamaño máximo permitido.

La llamada a una función devuelve un mensaje TooManyRequests y un error 429

Cuando llama a una función desplegada en OCI Functions, es posible que aparezca el siguiente mensaje de error:

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

El mensaje indica que OCI Functions ya está manejando el número máximo de solicitudes permitidas para su arrendamiento y no puede aceptar otra solicitud.

Para obtener más información sobre la anticipación y la prevención proactivas de este error, consulte Supervisión del uso y la disponibilidad de la memoria para OCI Functions.

Si ve este error, espere unos minutos antes de volver a llamar a la función. Como alternativa, o si el problema continúa, póngase en contacto con nosotros para aumentar la memoria total para la ejecución simultánea de funciones.

La llamada a una función hace que el cliente informe un timeout y se muestra un error 444 en los logs de la función

Al llamar a una función que ha desplegado en OCI Functions, el cliente puede informar de un timeout.

Investigue más a fondo comprobando los logs de la función (consulte Almacenamiento y Visualización de Logs de Funciones). Si los logs contienen un mensaje de estado 444, la conexión entre el cliente y OCI Functions se interrumpió durante la ejecución de la función. Si ve un mensaje de estado 444 en los logs de la función, vuelva a llamar a la función.

Tenga en cuenta que la forma de llamar a una función también determina la cantidad máxima de tiempo durante la que se puede ejecutar la función. Para obtener más información, consulte Llamada a funciones.

La llamada a una función devuelve un mensaje Function failed y un error 502

Si hay un problema con el código de una función, verá el siguiente error al llamar a la función:

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

Para investigar el problema con el código de la función, compruebe la salida de logs por parte de la función. El servicio Oracle Cloud Infrastructure Logging es la opción por defecto y recomendada para acceder, buscar y almacenar logs de funciones. Tenga en cuenta que, para almacenar y ver logs de una función, la función debe incluir sentencias de impresión. Para obtener más información, consulte Almacenamiento y visualización de logs de funciones.

La llamada a una función devuelve un mensaje FunctionInvokeSyslogUnavailable y un error 502

OCI Functions permite enviar los logs de una función a un destino de registro externo (como Papertrail) mediante la configuración de una URL de Syslog para la aplicación. Consulte Almacenamiento y visualización de logs de funciones.

Si la URL de Syslog no es válida o no se puede acceder a ella, verá el siguiente error al llamar a la función:

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

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

Para confirmar que la URL del destino de registro externo es la causa del error:

  1. Actualice la aplicación para anular la definición de la URL de syslog mediante la CLI de Fn Project. Por ejemplo, introduzca:
    fn update app helloworld-app --syslog-url ''
  2. Despliegue la función que desea ejecutar. Consulte Creación y despliegue de funciones.
  3. Llame a la función. Consulte Llamadas a funciones.

Si la función se ejecuta correctamente, no se puede acceder a la URL del destino de registro externo desde la subred en la que se está ejecutando la función. Vuelva a comprobar lo siguiente:

  • La URL del destino de registro externo es válida.
  • La URL del destino de registro externo es accesible públicamente.
  • La subred en la que se ejecuta la función tiene acceso saliente a Internet.

La llamada a una función devuelve un mensaje FunctionInvokeImageNotAvailable y un error 502

Al llamar a una función, OCI Functions extrae la imagen correspondiente de Oracle Cloud Infrastructure Registry utilizando la VCN y las subredes especificadas para la aplicación.

Si OCI Functions no ha podido extraer la imagen, se devuelve el siguiente mensaje al llamar a una función:

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

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

Soluciones posibles:

  • Vuelva a comprobar que la imagen especificada para la función todavía existe en la ubicación especificada en Oracle Cloud Infrastructure Registry.
  • Vuelva a comprobar que Oracle Cloud Infrastructure está disponible (se devuelve este mensaje si Oracle Cloud Infrastructure no está disponible de forma imprevista).
  • Vuelva a comprobar que la VCN incluye un gateway de Internet o un gateway de servicio. Para que OCI Functions pueda acceder a Oracle Cloud Infrastructure Registry para extraer una imagen, la VCN debe incluir un gateway de Internet o un gateway de servicio, de la siguiente manera:

    • Si se han especificado subredes públicas para la aplicación, la VCN también debe incluir un gateway de Internet. Una tabla de rutas debe incluir una regla de ruta que tenga como destino el gateway de Internet, con la propiedad Bloque de CIDR de destino configurada en 0.0.0.0/0. Una lista de seguridad debe incluir una regla de salida con estado que permita el acceso a Oracle Cloud Infrastructure Registry (por ejemplo, con la propiedad Destination Type definida en Service, la propiedad Destination Service definida en All <region> services In Oracle Services Network y la propiedad IP Protocol definida en All).
    • Si se han especificado subredes privadas para la aplicación, la VCN también debe incluir un gateway de servicio. El gateway de servicio se debe configurar para permitir el acceso a All <region> Services In Oracle Services Network. Una tabla de rutas debe incluir una regla de ruta que tenga como destino el gateway de servicio, con su propiedad Servicio de destino configurada como All <region> Services In Oracle Services Network. Una lista de seguridad debe incluir una regla de salida con estado que permita el acceso a Oracle Cloud Infrastructure Registry (por ejemplo, con la propiedad Destination Type definida en Service, la propiedad Destination Service definida en All <region> services In Oracle Services Network y la propiedad IP Protocol definida en All).

    Si no se ha definido un gateway de Internet o un gateway de servicio para la VCN, defina uno ahora.

La llamada a una función devuelve un mensaje FunctionInvokeSubnetOutOfIPs y un error 502

Cuando llama a una función desplegada en OCI Functions, es posible que aparezca el siguiente mensaje de error:

{"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

Si ve este error, vuelva a comprobar que cada subred en la VCN tiene al menos el número mínimo necesario de direcciones IP libres especificado en Creación de la VCN y las subredes para utilizarlas con OCI Functions.

La llamada a una función devuelve un mensaje FunctionInvokeSubnetNotAvailable y un error 502 (debido a un problema de subred)

Cuando llama a una función desplegada en OCI Functions, es posible que aparezca el siguiente mensaje de error:

{"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

Si ve este error, vuelva a comprobar que la subred especificada para la aplicación todavía existe.

La llamada a una función devuelve un mensaje FunctionInvokeSubnetNotAvailable y un error 502 (debido a un problema de opciones de DHCP)

Cuando llama a una función desplegada en OCI Functions, es posible que aparezca el siguiente mensaje de error:

{"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

Si ve este error, vuelva a comprobar que el juego de opciones DHCP en la VCN especificada para la aplicación aún existe.

La llamada a una función devuelve un mensaje FunctionInvokeResponseBodyTooLarge y un error 502

Cuando llama a una función desplegada en OCI Functions, es posible que aparezca el siguiente mensaje de error:

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

El mensaje indica que la respuesta devuelta al ejecutar la función supera el tamaño máximo permitido de 6 MB.

Si ve este error, revise el código de función y reduzca el tamaño de las respuestas que devuelve la función.

La llamada a una función devuelve un mensaje FunctionInvokeResponseHeaderTooLarge y un error 502

Cuando llama a una función desplegada en OCI Functions, es posible que aparezca el siguiente mensaje de error:

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

El mensaje indica que la cabecera de respuesta devuelta al ejecutar la función supera el tamaño máximo permitido.

Si ve este error, revise el código de función y reduzca el número y/o el tamaño de las cabeceras personalizadas que devuelve la función.

La llamada a una función devuelve un mensaje FunctionInvokeTooManyMatchingDGs y un error 502

Cuando llama a una función desplegada en OCI Functions, es posible que aparezca el siguiente mensaje de error:

{"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

El mensaje indica que la función pertenece a grupos más dinámicos que el número máximo admitido.

Si ve este error, reduzca el número de grupos dinámicos a los que pertenece la función actualizando las reglas de coincidencia de grupos dinámicos. Para averiguar el número máximo de grupos dinámicos a los que puede pertenecer una función, consulte Límites de grupos dinámicos (el límite mostrado para una única instancia informática también se aplica a una función).

La llamada a una función devuelve un mensaje FunctionInvokeExecutionError y un error 502

Cuando llama a una función desplegada en OCI Functions, es posible que aparezca el siguiente mensaje de error:

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

El mensaje indica que la respuesta de la ejecución de la función devuelve un error.

Si ve este error de forma inesperada, revise el código de función para comprender las condiciones en las que la función no se ejecuta correctamente.

La llamada a una función devuelve un mensaje FunctionInvokeExecutionFailed y un error 502

Cuando llama a una función desplegada en OCI Functions, es posible que aparezca el siguiente mensaje de error:

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

El mensaje indica que se ha detectado un error durante la ejecución de la función, que probablemente fue causado por un bug en el código de función.

Si ve este error, revise el código de función y corrija los errores que encuentre.

La llamada a una función devuelve un mensaje FunctionInvokeInvalidResponse y un error 502

Cuando llama a una función desplegada en OCI Functions, es posible que aparezca el siguiente mensaje de error:

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

El mensaje indica que la llamada a la función devuelve un código de respuesta HTTP no válido (ni un fallo de función ni un timeout).

Si ve este error, revise el código de función y corrija los errores que encuentre.

La llamada a una función devuelve un mensaje FunctionInvokeSubnetConfigError y un error 502

Cuando llama a una función desplegada en OCI Functions, es posible que aparezca el siguiente mensaje de error:

{"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

El mensaje indica un problema de configuración de VCN, probablemente relacionado con la configuración del solucionador personalizado.

Si ve este error, identifique cualquier subred de la VCN que esté utilizando un solucionador personalizado. Cuando una subred esté utilizando un solucionador personalizado (por ejemplo, ubicado en Internet, en la VCN o en su red local), confirme que se puede acceder al solucionador personalizado. Verifique también que el solucionador personalizado funciona correctamente. Para obtener más información sobre los solucionadores personalizados, consulte DNS en su red virtual en la nube.

Si el error persiste, compruebe que la configuración de la VCN (y la configuración del solucionador personalizado, si se utiliza) es correcta llamando a una nueva función hello world que se ejecuta en una nueva VCN:

  1. Cree una nueva VCN mediante el asistente de VCN (seleccione VCN con conexión a Internet).
  2. Cree un nuevo recurso de opciones de DHCP y especifique las mismas opciones de DNS que antes (si se ha utilizado un solucionador personalizado anteriormente, seleccione Solucionador personalizado).
  3. Cree una nueva subred en la VCN y seleccione el recurso de opciones de DHCP que acaba de crear.
  4. Cree una nueva aplicación especificando la VCN y la subred que acaba de crear.
  5. Cree una función de mundo de hola simple en la aplicación que acaba de crear.
  6. Confirme que puede llamar a la nueva función hello world correctamente.

Si el problema continúa, póngase en contacto con nosotros para ayudarle a resolver el problema de configuración de la VCN.

La llamada a una función devuelve el mensaje "El tamaño combinado sin comprimir de todas las imágenes de la función en una aplicación ha superado el límite asignado...." y un error 502

Al llamar a una función que ha desplegado en OCI Functions, la imagen de la función se extrae del registro de Docker. Según el tamaño de la imagen y el tamaño de las imágenes para otras funciones de la aplicación, puede que vea un mensaje similar al siguiente:

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.

Este mensaje indica que la extracción de la imagen de la función ha aumentado el tamaño total sin comprimir de todas las imágenes para las funciones de la aplicación más allá del límite máximo permitido.

Si ve este error:

  • Utilizar técnicas estándar para reducir el tamaño de la imagen de la función y/o el tamaño de las imágenes para otras funciones de la aplicación.
  • Reducir el número de funciones en la aplicación.

La llamada a una función devuelve un mensaje FunctionInvokeServiceUnavailable y un error 503

Cuando llama a una función desplegada en OCI Functions, es posible que aparezca el siguiente mensaje de error:

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

El mensaje indica que OCI Functions no puede manejar la solicitud actualmente, posiblemente debido a una capacidad insuficiente. No es raro encontrar este mensaje de error varias veces, ya que puede llevar algún tiempo ampliar la capacidad de OCI Functions para satisfacer la demanda de llamadas a funciones.

Si ve este error, intente llamar a la función de nuevo. No se preocupe si el mensaje vuelve a aparecer. Vuelva a intentar llamar a la función, dejando un corto período de tiempo entre intentos de llamada.

Tenga en cuenta lo siguiente:

  • Si continúa viendo este error, considere aumentar el intervalo de tiempo entre las llamadas a funciones (tal vez utilizando una técnica estándar como el retroceso exponencial jittered para agregar un grado de aleatoriedad al intervalo).
  • Si el mensaje se muestra cuando se llama a una función como resultado de una acción disparada por un evento, los intentos adicionales de llamar a la función se reintentarán automáticamente hasta que se llame correctamente a la función. No es necesario que intervenga.
  • Si configura alarmas activadas por respuestas de error de función que contienen códigos de error 503, es posible que vea varias notificaciones para las que no es necesaria ninguna intervención de su parte.
  • Si el mensaje continúa apareciendo después de un período prolongado, póngase en contacto con nosotros para obtener ayuda.

La llamada a una función devuelve un mensaje de error FunctionInvokeContainerInitFail, un error 504 y un mensaje de log 'ModuleNotFoundError: no hay ningún módulo denominado 'contextvars'

Cuando llama a una función Python 3.6 que ha desplegado en OCI Functions, es posible que aparezca el siguiente mensaje de error:

{"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

Si ve este error, compruebe los logs de la función. Si ve un mensaje "ModuleNotFoundError: No module named 'contextvars' en los logs de la función:

  1. Agregue la siguiente línea al archivo requirements.txt de la función:
    fdk>=0.1.21
  2. Vuelva a desplegar la función en OCI Functions.
  3. Vuelva a llamar a la función.

La llamada a una función devuelve los mensajes FunctionInvokeContainerInitFail y de timeout de la inicialización del contenedor, y un error 504

Cuando llama a una función desplegada en OCI Functions, la ejecución de la función está sujeta a un umbral máximo de memoria. Si se supera este límite, la ejecución de la función se detiene y se devuelve el siguiente mensaje de error:

{"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

Si ve este error, aumente el umbral máximo de memoria de la función. Por ejemplo, a 256 MB, 512 MB, 1024 MB, 2048 MB o 3072 MB. Consulte Changing Default Memory and Timeout Settings para obtener valores válidos para el umbral máximo de memoria.

Por ejemplo, para establecer el umbral máximo de memoria de una función en 256 MB, realice una de las siguientes acciones:

  • Seleccione Edit Function en la página Function Details de la consola y seleccione 256 en la lista desplegable Memory (in MB).
  • Agregue la siguiente línea al archivo func.yaml de la función. Esto establecerá el umbral máximo de memoria en 256 MB cuando se llame a la función:

    memory: 256

    Tenga en cuenta que si edita el archivo func.yaml, debe volver a desplegar la función en OCI Functions antes de volver a llamarla.

Es buena idea utilizar la última versión de la CLI de Fn Project al crear una función Hola mundo de Python. Al introducir el comando fn init --runtime python <function-name> para crear la función Hola mundo, la línea memory: 256 se agrega al archivo func.yaml automáticamente.

La llamada a una función devuelve un mensaje FunctionInvokeTimeout y un error 504

Cuando llama a una función desplegada en OCI Functions, la función solo se puede ejecutar durante un tiempo determinado. Si se supera este límite de tiempo, la ejecución de la función se detiene y se devuelve el siguiente mensaje de error:

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

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

Si ve este error, intente aumentar el tiempo máximo durante el que una función puede ejecutarse en la definición de la función. Por ejemplo, para establecer el tiempo máximo en 300 segundos, realice una de las siguientes acciones:

  • Seleccione Edit Function en la página Function Details de la consola e introduzca 300 en el campo Timeout.
  • Agregue la siguiente línea al archivo func.yaml de la función. Esto establecerá el límite de tiempo máximo en 300 segundos cada vez que se llame a la función:

    timeout: 300

    Recuerde que si edita el archivo func.yaml, debe volver a desplegar la función en OCI Functions antes de volver a llamarla.

Tenga en cuenta que la forma de llamar a una función también determina la cantidad máxima de tiempo durante la que se puede ejecutar la función. Para obtener más información, consulte Llamada a funciones.

También puede ver este mensaje de error cuando una función que se ejecuta en una subred pública no puede conectarse a una instancia de Oracle Autonomous Database que tenga activadas las listas de control de acceso (ACL). Si este es el caso, consulte Conexión a instancias de Oracle Autonomous Database desde funciones en ejecución para obtener más información sobre:

  • Configurar la subred para enviar todo el tráfico de Internet saliente a un gateway de NAT y permitir el tráfico de Internet.
  • Agregar la dirección IP pública del gateway de NAT a la lista de control de acceso de la base de datos.

La llamada a una función devuelve un mensaje FunctionInvokeContainerInitTimeout y un error 504

Al llamar a una función que ha desplegado en OCI Functions, la imagen de la función se extrae del registro de Docker y se ejecuta dentro de un contenedor. Según las dependencias de la función, el contenedor puede tardar mucho en iniciarse. Si el contenedor tarda demasiado en iniciarse, es posible que aparezca el siguiente mensaje de error:

{"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

Si ve este error, aumente el umbral máximo de memoria de la función. Por ejemplo, a 256 MB, 512 MB, 1024 MB, 2048 MB o 3072 MB. Consulte Changing Default Memory and Timeout Settings para obtener valores válidos para el umbral máximo de memoria.

Por ejemplo, para establecer el umbral máximo de memoria de una función en 256 MB, realice una de las siguientes acciones:

  • Seleccione Edit Function en la página Function Details de la consola y seleccione 256 en la lista desplegable Memory (in MB).
  • Agregue la siguiente línea al archivo func.yaml de la función. Esto establecerá el umbral máximo de memoria en 256 MB cuando se llame a la función:

    memory: 256

    Tenga en cuenta que si edita el archivo func.yaml, debe volver a desplegar la función en OCI Functions antes de volver a llamarla.

Es buena idea utilizar la última versión de la CLI de Fn Project al crear una función Hola mundo de Python. Al introducir el comando fn init --runtime python <function-name> para crear la función Hola mundo, la línea memory: 256 se agrega al archivo func.yaml automáticamente.

La llamada a una función devuelve un mensaje FunctionInvokeImagePullTimeout y un error 504

Al llamar a una función que ha desplegado en OCI Functions, la imagen de la función se extrae del registro de Docker. Según el tamaño de la imagen, puede tardar mucho tiempo en extraerla. Si tarda demasiado en extraer la imagen, es posible que aparezca el siguiente mensaje de error:

{"code":"FunctionInvokeImagePullTimeout","message":"Image pull timed out"}
Fn: Error invoking function. status: 504 message: Image pull timed out
Si ve este error:
  • Utilice técnicas estándar para reducir el tamaño de la imagen.
  • Vuelva a comprobar que la imagen especificada para la función todavía existe en la ubicación especificada en Oracle Cloud Infrastructure Registry.