Creación de funciones de solo código Python

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

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

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

Antes de crear una función de solo código de Python, empaquete el código de función y las dependencias mediante el diseño de archivo necesario para las funciones de solo código de Python. Para conocer los requisitos generales de las funciones de solo código, consulte Creación de funciones de solo código. Para conocer las versiones de tiempo de ejecución de Python 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 Python, necesita:

  • Un entorno de desarrollo de Python.
  • Módulo de función y función de manejador de Python.
  • Cualquier dependencia de Python necesaria instalada en un directorio de paquetes.
  • Valor de manejador de Python válido.

Requisitos del archivo Python

Para funciones de solo código de Python:

  • El archivo debe contener un directorio function/ de nivel raíz.
  • El directorio function/ contiene el módulo de manejador y el código fuente de la aplicación.
  • El directorio python/ de nivel raíz es opcional y contiene dependencias de Python.
  • 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 funciones de Python de arquitectura única, no se permite el nivel raíz native/.
  • Para las funciones de Python de arquitectura múltiple, si native/ existe, 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.
  • El manejador debe utilizar el formato <file>.<function>.
  • El manejador debe hacer referencia a una función Python en el directorio function/.

Manejador de Python

El manejador identifica la función de Python que se va a llamar. El manejador debe hacer referencia a una función de Python en un archivo Python en el directorio function/.

Utilice el formato:

<file>.<function>

Por ejemplo, si el archivo contiene function/func.py y la función de manejador se denomina handler, utilice:

func.handler

Archivo Python de arquitectura única

archive-root/
├── function/
    └── func.py
├── python/     # optional
└── resources/  # optional

Reglas:

  • function/ es necesario.
  • python/ es opcional.
  • resources/ es opcional.
  • native/ no está permitido para funciones de Python de arquitectura única.
  • El manejador debe hacer referencia a una función Python en el directorio function/.

Empaquetar origen de Python sin dependencias

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

Controlador:

func.handler

Empaquetar origen de Python con dependencias

Instale las dependencias en el directorio python/ antes de crear el ZIP.

mkdir -p build/archive/function
mkdir -p build/archive/python
cp func.py build/archive/function/
python3 -m pip install -r requirements.txt -t build/archive/python
cd build/archive
zip -r ../function.zip function/ python/

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

Empaquetado de dependencias

OCI Functions no descarga las dependencias de Python 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 Python se incluye en el tiempo de ejecución de Python 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 python/, la versión empaquetada sustituye al FDK incluido en el tiempo de ejecución. Valide la compatibilidad antes de desplegarla en producción.

Archivo Python con dependencias nativas

Las funciones de Python pueden depender de paquetes que incluyen código nativo compilado, como archivos .so o ruedas de Python creadas para una arquitectura específica de Linux.

Para funciones de Python de arquitectura única:

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

Para una aplicación de arquitectura única, empaquete las dependencias de Python, incluidas las dependencias con código nativo, en python/.

archive-root/
├── function/
    └── func.py
├── python/
    └── <python dependencies, including native dependencies for the application architecture>
└── resources/ # optional

Para funciones de Python de arquitectura múltiple:

  • Origen compartido de paquete en function/.
  • Paquetes de dependencias de Python puras en python/, 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.py
├── python/      # optional pure-Python dependencies
├── 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.
  • 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.
  • function/ siempre es necesario.

Comportamiento de tiempo de ejecución de Python

El FDK de Python se incluye en el tiempo de ejecución de Python gestionado para funciones de solo código. Empaquetar el módulo 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 de Python

Para crear una función de solo código de Python, siga las instrucciones de Creación de funciones de solo código. Por ejemplo, para crear una función de solo código de Python 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 de Python. 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 Python, incluido el origen de archivo, el archivo Python, un tiempo de ejecución de Python soportado y un manejador de Python.

    Para las funciones de solo código de Python, 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 Python 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 Fallo de validación del manejador El manejador no tiene el formato <file>.<function> Utilice un manejador como func.handler.
400 No se puede encontrar el manejador El archivo del manejador o el nombre de la función no coinciden con el archivo Confirme que el módulo y la función existen en function/.
400 La función falla porque falta la dependencia La dependencia no se ha empaquetado en python/ Instale las dependencias en python/ antes de crear 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 de arquitectura única native/; del paquete en python/.
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/.