Creación de funciones de solo código Node.js

Descubra cómo empaquetar y crear funciones de solo código Node.js en OCI Functions.

Utilice una función de solo código Node.js cuando desee desplegar el código y las dependencias de JavaScript sin crear una imagen de contenedor.

El código fuente de Node.js se debe empaquetar en un directorio function/ de nivel raíz.

Antes de crear una función de solo código Node.js, empaquete el código de función y las dependencias mediante el diseño de archivo necesario para las funciones de solo código Node.js. Para conocer los requisitos generales de las funciones de solo código, consulte Creación de funciones de solo código. Para ver las versiones de tiempo de ejecución de Node.js soportadas y los nombres de tiempo de ejecución, consulte Idiomas soportados para funciones de solo código.

Además, para empaquetar y crear funciones de solo código Node.js, necesita:

  • Un entorno de desarrollo Node.js.
  • Un controlador y un archivo de función JavaScript.
  • Si la función tiene dependencias de Node.js, esas dependencias se instalan en node_modules/.
  • Valor de manejador de Node.js válido.

Requisitos de archivo de Node.js

Para las funciones de solo código de Node.js:

  • El archivo debe contener un directorio function/ de nivel raíz.
  • El directorio function/ contiene el archivo de manejador y el código fuente de la aplicación.
  • El directorio node_modules/ de nivel raíz es opcional. Incluirlo solo cuando la función tenga dependencias de Node.js.
  • El directorio resources/ de nivel raíz es opcional y contiene recursos de tiempo de ejecución.
  • El directorio native/ de nivel raíz es opcional solo para casos de uso de dependencias nativas de varias arquitecturas.
  • Para las funciones Node.js de arquitectura única, no se permite el nivel raíz native/.
  • Para funciones de arquitectura única Node.js con dependencias nativas, empaquete dependencias nativas directamente en node_modules/.
  • Para las funciones Node.js de arquitectura múltiple, si existe native/, coloque los archivos de dependencia nativos específicos de la arquitectura solo en native/fn-arch-x86/ y native/fn-arch-arm/.
  • Se necesita un manejador.

Manejador Node.js

El manejador indica a OCI Functions qué archivo JavaScript llamar.

Manejador de ejemplo:

func.js

Archivo Node.js de arquitectura única

archive-root/
├── function/
    └── func.js
├── node_modules/  # optional
└── resources/     # optional

Reglas:

  • function/ es necesario.
  • node_modules/ es opcional.
  • resources/ es opcional.
  • native/ no está permitido para las funciones de Node.js de arquitectura única.
  • Para dependencias nativas de arquitectura única, empaquete la dependencia en node_modules/.
  • El manejador debe hacer referencia a un archivo JavaScript en el directorio function/.

Empaquetar origen de Node.js sin dependencias

mkdir -p build/archive/function
cp func.js build/archive/function/
cd build/archive
zip -r ../function.zip function/

Controlador:

func.js

Empaquetar origen de Node.js con dependencias

mkdir -p build/archive/function
cp func.js build/archive/function/
cp package.json package-lock.json build/archive/
cd build/archive
npm ci --omit=dev
zip -r ../function.zip function/ node_modules/

Si utiliza recursos, incluya resources/ en la raíz del archivo.

Empaquetado de dependencias

OCI Functions no descarga las dependencias de Node.js durante la creación de la función. Empaquetar las dependencias necesarias en el archivo antes de crear o actualizar la función.

Nota

El FDK de Node.js se incluye en el tiempo de ejecución de Node.js gestionado para funciones de solo código. No es necesario empaquetar el FDK en el archivo. Si empaqueta una versión de FDK diferente en node_modules/, la versión empaquetada sustituye al FDK incluido en el tiempo de ejecución. Valide la compatibilidad antes de desplegarla en producción.

Archivo Node.js con dependencias nativas

Las funciones de Node.js pueden depender de paquetes que incluyan código nativo compilado, como binarios .node o complementos nativos creados con herramientas como node-gyp.

Para funciones de Node.js de arquitectura única:

  • No incluya el nivel raíz native/.
  • Empaquetar dependencias nativas directamente en node_modules/.
  • Asegúrese de que las dependencias están creadas para la plataforma y la arquitectura de Linux correctas.

Para funciones de Node.js de arquitectura múltiple:

  • Origen del paquete en function/.
  • Paquetes de dependencias compartidas en node_modules/, si es necesario.
  • Paquetes de dependencias nativas específicas de la arquitectura en:
    • native/fn-arch-x86/
    • native/fn-arch-arm/
archive-root/
├── function/
    └── func.js
├── node_modules/  # optional
├── resources/     # optional
└── native/
    ├── fn-arch-x86/
    └── fn-arch-arm/

Reglas:

  • native/ solo es necesario si la función utiliza dependencias nativas específicas de la arquitectura en una aplicación de varias arquitecturas.
  • Si existe native/ para una aplicación de arquitectura múltiple, debe contener fn-arch-x86/ y fn-arch-arm/.
  • Coloque los archivos de dependencia nativos solo en el directorio de arquitectura coincidente.
  • node_modules/ se puede seguir utilizando para dependencias no nativas o compartidas.
  • function/ siempre es necesario.

Comportamiento de tiempo de ejecución de Node.js

El FDK de Node.js se incluye en el tiempo de ejecución de Node.js gestionado para funciones de solo código. Empaquetar el archivo de manejador, el código de aplicación y cualquier dependencia necesaria en el archivo.

Creación de una función de solo código Node.js

Utilice los pasos de creación de funciones compartidas de solo código. Seleccione un tiempo de ejecución de Node.js soportado, introduzca el manejador de Node.js y proporcione el archivo Node.js.

La función Node.js se crea y se puede llamar como cualquier otra función.

Para crear una función de solo código Node.js, siga las instrucciones de Creación de funciones de solo código. Por ejemplo, para crear una función de solo código Node.js mediante la consola:

  1. En la página de lista Aplicaciones, seleccione la aplicación en la que desea crear la función de solo código Node.js. Si necesita ayuda para buscar la página de lista o la aplicación, consulte Listado de aplicaciones.
  2. Seleccione el separador Funciones.

    Se abre la página de lista Funciones. Todas las funciones de la aplicación seleccionada se muestran en una tabla.

  3. Seleccione Crear a partir de archivo y especifique detalles para la función de solo código Node.js, incluido el origen de archivo, el archivo Node.js, un tiempo de ejecución Node.js soportado y un manejador Node.js.

    Para las funciones de solo código de Node.js, debe especificar un manejador al crear la función.

  4. Especifique otros detalles para la función según sea necesario (consulte Creación de Funciones de Sólo Código).
  5. Seleccione Crear para crear la función.

    La función de solo código de Node.js se crea y se puede llamar como cualquier otra función.

Solución de problemas

Código de error Problema Causa probable Corrección recomendada
400 La validación del archivo falla porque falta function/ Los archivos de origen están en la raíz ZIP o en la carpeta incorrecta Coloque el manejador y el código de aplicación en function/.
400 No se puede encontrar el manejador El archivo del manejador no coincide con el archivo Confirme que el archivo de manejador existe en function/.
400 La función falla porque falta la dependencia La dependencia no se ha empaquetado en node_modules/ Ejecute npm ci --omit=dev e incluya node_modules/ en el ZIP.
400 La función falla porque la dependencia nativa es incompatible La dependencia se ha creado para macOS, Windows o la arquitectura de Linux incorrecta Cree o descargue dependencias para la arquitectura de Linux correcta.
400 Fallo de validación de archivo de arquitectura única El directorio native/ de nivel raíz está presente Elimine las dependencias nativas de arquitectura única de native/; en node_modules/.
400 Fallo de validación del archivo nativo de varias arquitecturas Falta un directorio de arquitectura Incluya native/fn-arch-x86/ y native/fn-arch-arm/.
400 Fallo de validación de archivo nativo Los archivos se colocaron directamente en native/ Mueva los archivos en native/fn-arch-x86/ o native/fn-arch-arm/.