Las capas proporcionan bibliotecas de dependencias compartidas, entornos de ejecución y extensiones de función para sus funciones. Extraiga las bibliotecas comunes de las que dependen sus funciones en una capa o utilice las capas públicas de Function Compute para reducir el tamaño del paquete de código cuando despliegue o actualice una función. Este tema describe cómo funcionan las capas, los directorios compatibles con cada entorno de ejecución, cómo compilar un archivo ZIP de capa y cómo crear y eliminar una capa personalizada.
Funcionamiento
Cuando compile una capa, empaquete todo su contenido en un archivo ZIP. Durante la ejecución, Function Compute extrae el contenido de la capa y lo despliega en el directorio /opt. Si configura varias capas para una función, el contenido se fusiona en /opt en el orden inverso al de su configuración. Si un archivo de una capa tiene el mismo nombre que un archivo de otra capa, el archivo de la capa configurada primero sobrescribe al de la capa configurada después.
Por ejemplo, si configura Layer 1 y Layer 2 para una función, la instancia de la función carga primero Layer 2 y luego Layer 1 al iniciarse. Después, extrae ambas capas en el directorio /opt. En /opt, el contenido de Layer 1 aparece primero y el de Layer 2 después. Si Layer 1 y Layer 2 contienen archivos con el mismo nombre, los archivos de Layer 1 sobrescriben a los de Layer 2.
Requisitos de compilación:
Si una capa contiene bibliotecas binarias o archivos ejecutables, compílela en Linux (se recomienda Debian 9).
Function Compute se ejecuta en x86_64. Para las dependencias que dependen del conjunto de instrucciones, use una máquina x86_64 o realice una compilación cruzada para garantizar la compatibilidad.
Directorios compatibles por entorno de ejecución
Si un entorno de ejecución es compatible con capas, Function Compute agrega los siguientes directorios a la ruta de búsqueda de dependencias del lenguaje de dicho entorno. Estructure su paquete ZIP de capa para que coincida con estas rutas. Así, el código de su función podrá acceder al contenido de la capa sin especificar rutas explícitas. Para obtener más información sobre cómo compilar un archivo ZIP de capa, consulte Build a layer ZIP file.
|
Entorno de ejecución |
Ruta del directorio |
|
Python |
|
|
Node.js |
|
|
Java |
|
|
PHP |
|
|
Otros entornos de ejecución (excepto custom runtime y custom container runtime) |
|
|
Custom runtime y custom container runtime |
Ninguna |
Si utiliza una estructura de directorios personalizada, agregue explícitamente la ruta de búsqueda de dependencias en el código de su función. Para obtener más información, consulte How do I reference dependencies in a layer in a custom runtime.
Estructura del archivo ZIP de la capa
A continuación se muestran ejemplos de la estructura obligatoria del archivo ZIP y las rutas de despliegue correspondientes para cada entorno de ejecución.
Python: empaquetado con la dependencia requests:
my-layer-code.zip
└── python
└── requests
Extracted to:
/opt/python/requests
Node.js: empaquetado con la dependencia uuid:
my-layer-code.zip
└── nodejs
├── node_modules
│ └── uuid
├── package-lock.json
└── package.json
Extracted to:
/opt/nodejs/node_modules/uuid
Java: empaquetado con la dependencia commons-lang3:
my-layer-code.zip
└── java
└── lib
└── commons-lang3-3.12.0.jar
Extracted to:
/opt/java/lib/commons-lang3-3.12.0.jar
PHP: empaquetado con dependencias de Composer:
my-layer-code.zip
└── php
├── composer.json
├── composer.lock
└── vendor
Extracted to:
/opt/php/vendor
Compilar un archivo ZIP de capa
Compilar un archivo ZIP de capa es similar a compilar un paquete de código. Para que Function Compute cargue correctamente las bibliotecas publicadas en una capa durante la ejecución, la estructura de directorios del código de la biblioteca debe seguir las convenciones estándar de cada lenguaje. Para obtener más información, consulte Supported directories by runtime. Si empaqueta las dependencias de su capa según las indicaciones, Function Compute agrega automáticamente la ruta de búsqueda de dependencias para cada lenguaje y no necesita especificar la ruta completa.
Siga estos pasos para compilar un archivo ZIP de capa para cada entorno de ejecución:
Cuando compile una capa de forma local, use la misma versión del lenguaje de programación que la versión del entorno de ejecución seleccionada en Function Compute.
El directorio de trabajo
my-layer-codecreado en los siguientes pasos es solo un ejemplo. Modifique el nombre del directorio según sus necesidades.
Entorno de ejecución de Python
Cuando compile una capa de forma local, use la misma versión de Python que la versión del entorno de ejecución de Python seleccionada en Function Compute.
-
Cree un directorio de trabajo:
mkdir my-layer-code cd my-layer-code -
Instale las dependencias en el subdirectorio
python:pip install --target ./python ${PackageName}Para obtener más información sobre el comando
pip install, consulte pip install.Ejemplo con
numpy:pip install --target ./python numpyDespués de la instalación, la estructura de directorios es la siguiente:
my-layer-code └── python ├── bin ├── numpy ├── numpy-1.22.4.dist-info └── numpy.libs -
Empaquete las dependencias desde el directorio
my-layer-code:zip -r my-layer-code.zip python
Entorno de ejecución de Node.js
Cuando compile una capa de forma local, use la misma versión de Node.js que la versión del entorno de ejecución de Node.js seleccionada en Function Compute.
-
Cree un directorio de trabajo:
mkdir my-layer-code cd my-layer-code -
Instale las dependencias en el subdirectorio
nodejs:npm install --prefix ./nodejs --save ${PackageName}${PackageName}es el nombre del paquete de dependencia que desea instalar. Para obtener más información sobre el comandonpm install, consulte npm-install.Ejemplo con
uuid:npm install --prefix ./nodejs --save uuidDespués de la instalación, la estructura de directorios es la siguiente:
my-layer-code └── nodejs ├── node_modules │ └── uuid ├── package-lock.json └── package.json -
Empaquete las dependencias desde el directorio
my-layer-code:zip -r my-layer-code.zip nodejs
Entorno de ejecución de Java
-
Cree un directorio de trabajo:
mkdir my-layer-code/java cd my-layer-code/java -
Cree un archivo
pom.xmlque declare sus dependencias. El siguiente ejemplo instalacommons-lang3y lo copia en./libmediantemaven-dependency-plugin:<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>maven.util</groupId> <artifactId>install-layer</artifactId> <version>1.0</version> <dependencies> <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.12.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-dependency-plugin</artifactId> <configuration> <!-- Include transitive dependencies --> <excludeTransitive>false</excludeTransitive> <!-- Keep version suffixes in JAR file names --> <stripVersion>false</stripVersion> <!-- Output directory for downloaded JARs --> <outputDirectory>./lib</outputDirectory> </configuration> </plugin> </plugins> </build> </project> -
Instale las dependencias:
mvn dependency:copy-dependenciesDespués de la instalación, la estructura de directorios es la siguiente:
my-layer-code └── java └── lib └── commons-lang3-3.12.0.jar -
Empaquete las dependencias desde el directorio
my-layer-code:zip -r my-layer-code.zip java
Entorno de ejecución de PHP
-
Cree un directorio de trabajo:
mkdir -p my-layer-code/php cd my-layer-code/php -
Cree un archivo
composer.jsonque declare sus dependencias. Ejemplo:{ "require": { "aliyunfc/fc-php-sdk": "~1.2", "alibabacloud/fnf": "^1.7" } } -
Instale las dependencias:
composer installDespués de la instalación, la estructura de directorios es la siguiente:
my-layer-code └── php ├── composer.json ├── composer.lock └── vendor -
Empaquete las dependencias desde el directorio
my-layer-code:zip -r my-layer-code.zip php
Crear una capa personalizada
Uso de la consola
Requisitos previos
Antes de empezar, asegúrese de cumplir con lo siguiente:
Se creó una función de Function Compute. Para obtener más información, consulte Create a function.
Pasos
Inicie sesión en la consola de Function Compute. En el panel de navegación izquierdo, elija Advanced Features > Layers.
En la barra de navegación superior, seleccione una región. En la página Layers, haga clic en Create Layer.
-
Configure los siguientes parámetros y haga clic en Create.
Parámetro
Descripción
Name
Introduzca un nombre para la capa.
Description
Introduzca una descripción para la capa que le ayude a distinguirla de otras capas.
Compatible Runtime
Seleccione los entornos de ejecución compatibles con esta capa.
Layer Upload Method
Seleccione cómo cargar las dependencias de la capa: Upload Layer in ZIP Package para cargar un archivo .zip (máximo 500 MB); Upload Layer in Folder para seleccionar una carpeta que Function Compute comprimirá en un archivo .zip (máximo 500 MB); Upload Layer Using OSS para especificar el Bucket Name y el Object Name del archivo .zip en Object Storage Service (OSS) (máximo 500 MB); Build Dependency Layer Online si su función está desarrollada en Python o Node.js, o si necesita instalar bibliotecas de sistema ligeras, puede compilar la capa en línea. Introduzca el contenido del archivo de dependencias (
requirements.txtpara Python opackage.jsonpara Node.js) en el cuadro de entrada inferior. Después de enviar la solicitud, Function Compute instala automáticamente los paquetes de dependencia del lenguaje y las bibliotecas de sistema, lo que simplifica la gestión de dependencias de la capa.Build Environment
Aparece cuando se selecciona Build Dependency Layer Online. Elija el entorno de ejecución para compilar la capa. Actualmente, solo son compatibles los entornos de ejecución de Python y Node.js.
apt command
Aparece cuando se selecciona Build Dependency Layer Online. Introduzca los nombres de los paquetes después de
apt installpara instalar paquetes de sistema en la capa.Una vez creada la capa, se genera automáticamente una versión de capa. El número de versión comienza en 1 y aumenta con cada nueva versión.
NotaSi el bucket de OSS está cifrado mediante Key Management Service (KMS), es posible que el rol vinculado al servicio de Function Compute (
AliyunServiceRoleForFC) no tenga permiso para acceder a los objetos cifrados. Esto genera un errorAccessDenied. Para resolverlo, actualice la directiva de clave en la consola de KMS para otorgar acceso al rolAliyunServiceRoleForFC. Para obtener más información, consulte Modify a key policy. Después de actualizar la directiva de clave, vuelva a intentar la carga de la capa para comprobar que el cambio de permiso surta efecto. -
Para agregar una nueva versión a una capa existente:
NotaNo es posible modificar una capa existente ni ninguna de sus versiones. Para actualizar una capa, cree una capa nueva o una nueva versión de capa. Si se elimina una versión de capa referenciada, elimine la referencia antes de actualizar la configuración de la capa.
En la página Layers, haga clic en el nombre de la capa de destino.
En la sección Version Management, haga clic en Create Version.
Seleccione un entorno de ejecución, cargue el nuevo código de la capa y haga clic en Create.
Uso de Serverless Devs
Requisitos previos
Antes de empezar, asegúrese de cumplir con lo siguiente:
Pasos
-
Ejecute el siguiente comando para crear una capa:
s cli fc layer publish --code ./my-layer-code --compatible-runtime java8,java11,custom --region cn-hangzhou --layer-name my-layerLa siguiente tabla describe los parámetros del comando.
Parámetro
Descripción
--codeRuta al paquete de código de la capa.
--compatible-runtimeLista separada por comas de los entornos de ejecución compatibles.
--layer-nameNombre de la capa.
Una vez creada la capa, el comando devuelve el Alibaba Cloud Resource Name (ARN) de la capa. El ARN consta de tres partes separadas por signos de número (
#): el identificador del ID de cuenta, el nombre de la capa y la versión de la capa. También puede iniciar sesión en la consola de Function Compute para consultar la información de la capa creada. -
Para agregar una nueva versión a una capa existente, ejecute el mismo comando con el mismo nombre de capa:
s cli fc layer publish --code ./my-layer-code --compatible-runtime java8,java11,custom --region cn-hangzhou --layer-name my-layerNotaNo es posible modificar una capa existente ni ninguna de sus versiones. Para actualizar una capa, cree una capa nueva o una nueva versión de capa. Si se elimina una versión de capa referenciada, elimine la referencia antes de actualizar la configuración de la capa.
Eliminar una capa o una versión de capa
Elimine las capas o versiones de capa que ya no necesite. Una capa eliminada ya no se puede consultar ni referenciar en las configuraciones de funciones. Sin embargo, esto no afecta la ejecución de las funciones que ya hacen referencia a la capa eliminada.
Inicie sesión en la consola de Function Compute. En el panel de navegación izquierdo, elija Advanced Features > Layers.
En la barra de navegación superior, seleccione una región.
-
En la página Layers, elimine una capa o una versión de capa:
Eliminar una capa: busque la capa de destino, haga clic en Delete en la columna Actions, active la casilla de confirmación y haga clic en Delete.
Eliminar una versión de capa: haga clic en el nombre de la capa de destino. En la sección Version Management de la página de detalles de la capa, busque la versión de destino, haga clic en Delete en la columna Actions y haga clic en Delete en el cuadro de diálogo Confirm.
Pasos siguientes
Después de crear una capa personalizada, vincúlela a una función mediante la consola de Function Compute o Serverless Devs para que la función pueda acceder a los recursos proporcionados por la capa. Para obtener más información, consulte Configure a custom layer.
También puede gestionar y configurar capas si establece el parámetro
layerscuando cree o actualice una función mediante la API o el SDK. Para obtener más información, consulte CreateFunction y UpdateFunction.Si las dependencias de su capa incluyen bibliotecas compartidas o su entorno local no es compatible con el entorno de ejecución de Function Compute, no podrá compilar la capa en la consola ni de forma local. En su lugar, compile la capa a partir de un Dockerfile. Para obtener más información, consulte Use a Dockerfile to build a layer.