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 ennative/fn-arch-x86/ynative/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.
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 contenerfn-arch-x86/yfn-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:
- 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.
-
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.
- 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.
- Especifique otros detalles para la función según sea necesario (consulte Creación de Funciones de Sólo Código).
- 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/. |