Funcionamiento de OCI Functions

Descubra cómo funciona OCI Functions al desplegar una función y al llamar a una función.

¿Qué sucede al desplegar una función en OCI Functions?

Cuando haya escrito el código de una función y esté listo para el despliegue, puede utilizar un único comando de la CLI de Fn Project CLI realizar todas las operaciones de despliegue en la secuencia:

  • Crear una imagen de Docker de la función
  • Proporcionar una definición de la función en un archivo func.yaml que incluya:
    • El tiempo máximo durante el que se puede ejecutar la función.
    • La cantidad máxima de memoria que la función puede consumir.
  • Transferir la imagen al registro de Docker especificado
  • Cargar los metadatos de la función (incluidas las restricciones de memoria y tiempo, y un enlace a la imagen en el registro de Docker) en el servidor Fn
  • Agregar la función a la lista de funciones que se muestran en la consola

El proceso anterior de despliegue de una función en OCI Functions se muestra en el diagrama.

Esta imagen muestra el proceso: crear una imagen de Docker de una función; transferir la imagen a un registro de Docker; crear un archivo func.yaml; cargar la definición de la función en el servidor Fn y visualizarlo en la consola.

Tenga en cuenta que una vez que la imagen se ha cargado en el registro de Docker, es su responsabilidad actualizar la imagen. Por ejemplo, cuando se admiten nuevas versiones de idiomas (para obtener más información, consulte Function Development Kits (FDKs)).

¿Qué ocurre al llamar a una función?

Puede llamar a una función que haya desplegado en OCI Functions desde:

  • La CLI de Fn Project.
  • Los SDK de Oracle Cloud Infrastructure.
  • Solicitudes HTTP firmadas al punto final de llamada de la función. Cada función tiene un punto final de llamada.
  • Otros servicios de Oracle Cloud (por ejemplo, disparados por un evento en el servicio Events) o desde servicios externos.

Cuando se llama a una función por primera vez, OCI Functions verifica primero la solicitud con el servicio IAM. Asumiendo que la solicitud pasa las comprobaciones de autenticación y autorización, OCI Functions transfiere la solicitud al servidor Fn, que utiliza la definición de la función para:

  • Identificar la imagen de Docker de la función para extraerla del registro de Docker
  • Ejecutar la función ejecutando la imagen de la función como un contenedor de una instancia en una subred asociada a la aplicación a la que pertenece la función

Cuando la función se está ejecutando dentro del contenedor, la función se puede leer y escribir en otros recursos y servicios que se estén ejecutando en la misma subred (por ejemplo, base de datos como servicio). La función también se puede leer y escribir en otros recursos compartidos (por ejemplo, Object Storage) y en otros servicios de Oracle Cloud. Puede especificar el tiempo máximo que se puede ejecutar la función definiendo un timeout en el archivo func.yaml o en la consola.

OCI Functions almacena los logs de la función en Oracle Cloud Infrastructure o en un destino de registro externo.

Cuando la función ha terminado de ejecutarse y después de un periodo de inactividad, se elimina el contenedor de Docker. Si OCI Functions recibe otra llamada a la misma función antes de eliminar el contenedor, la segunda solicitud se direcciona al mismo contenedor en ejecución. Si OCI Functions recibe una llamada a una función que se está ejecutando actualmente dentro de un contenedor en ejecución, OCI Functions se escala horizontalmente para satisfacer ambas solicitudes entrantes y se inicia un segundo contenedor de Docker.

OCI Functions muestra información sobre las llamadas a la función en gráficos de métricas.

El proceso anterior de llamada a una función se muestra en el diagrama.

En esta imagen se muestra cómo interactúan las funciones desplegadas en el servidor Fn con otros servicios de Oracle Cloud Infrastructure (IAM, Object Storage, DBaaS), herramientas (consola de OCI, CLI de Fn Project) y servicios externos (IaaS, PaaS, SaaS). Se muestra una función como desplegada como un contenedor de una instancia en una subred dentro de una VCN.