Les couches permettent d'empaqueter séparément du code de vos fonctions les bibliothèques de dépendances partagées, les environnements d'exécution et les extensions. Associer une couche à une fonction réduit la taille du package de déploiement et permet de partager des dépendances entre plusieurs fonctions sans les dupliquer.
Principales raisons d'utiliser des couches :
Réduire la taille des packages de déploiement. Déplacez les dépendances partagées hors de chaque package de fonction vers une couche dédiée.
Partager des dépendances entre fonctions. Une même couche peut être associée à n'importe quel nombre de fonctions de votre compte.
Séparer la logique métier des dépendances. Mettez à jour indépendamment les dépendances et le code des fonctions.
Utiliser l'éditeur de code en ligne. Les packages de déploiement volumineux bloquent l'éditeur de la console ; les couches maintiennent une taille de package réduite.
Fonctionnement
Function Compute extrait le contenu des couches dans le répertoire /opt lors de l'exécution. Lorsque vous associez plusieurs couches à une fonction, leurs contenus fusionnent dans /opt. Si un même fichier existe dans plusieurs couches, celui de la première couche associée est prioritaire.
Par exemple, si vous associez la couche 1 avant la couche 2, tout fichier dupliqué dans la couche 2 sera écrasé par celui de la couche 1.
Exigences de compilation :
Si une couche contient des bibliothèques binaires ou des exécutables, compilez-la sous Linux (Debian 9 recommandé).
Function Compute s'exécute sur x86_64. Pour les dépendances liées au jeu d'instructions, utilisez une machine x86_64 ou effectuez une compilation croisée afin de garantir la compatibilité.
Répertoires pris en charge par environnement d'exécution
Function Compute ajoute les répertoires suivants au chemin de recherche des dépendances de chaque environnement d'exécution. Structurez votre package ZIP de couche selon ces chemins pour que le code de votre fonction accède au contenu de la couche sans spécifier de chemins explicites.
| Environnement d'exécution | Chemin du répertoire |
|---|---|
| Python | /opt/python |
| Node.js | /opt/nodejs/node_modules |
| Java | /opt/java/lib |
| PHP | /opt/php |
| Autres environnements d'exécution (hors custom runtime et custom container runtime) | /opt/bin (PATH), /opt/lib (LD_LIBRARY_PATH) |
| Custom runtime et custom container runtime | Aucun |
Si vous utilisez une structure de répertoires personnalisée, ajoutez explicitement le chemin de recherche des dépendances dans le code de votre fonction. Pour plus de détails, consultez Comment référencer des dépendances d'une couche dans un custom runtime.
Structure du fichier ZIP de couche
Les exemples suivants illustrent la structure de fichier ZIP requise ainsi que les chemins de déploiement correspondants pour chaque environnement d'exécution.
Python — empaquetage avec la dépendance requests :
my-layer-code.zip
└── python
└── requests
Extracted to:
/opt/python/requests
Node.js — empaquetage avec la dépendance uuid :
my-layer-code.zip
└── nodejs
├── node_modules
│ └── uuid
├── package-lock.json
└── package.json
Extracted to:
/opt/nodejs/node_modules/uuid
Java — empaquetage avec la dépendance jackson-core :
my-layer-code.zip
└── java
└── lib
└── commons-lang3-3.12.0.jar
Extracted to:
/opt/java/lib/commons-lang3-3.12.0.jar
PHP — empaquetage avec des dépendances Composer :
my-layer-code.zip
└── php
├── composer.json
├── composer.lock
└── vendor
Extracted to:
/opt/php/vendor
Créer un fichier ZIP de couche
Empaquetez les dépendances de votre couche dans un fichier ZIP respectant la structure de répertoires standard de votre environnement d'exécution. Function Compute ajoute alors automatiquement les chemins de recherche des dépendances, permettant à votre code de charger les bibliothèques sans chemins complets.
Alignez la version locale de votre langage sur celle de l'environnement d'exécution Function Compute prévu.
Environnement d'exécution Python
-
Créez un répertoire de travail :
mkdir my-layer-code cd my-layer-code -
Installez les dépendances dans le sous-répertoire
python:pip install --target ./python <package-name>Exemple avec
numpy:pip install --target ./python numpyAprès l'installation, la structure du répertoire se présente comme suit :
my-layer-code └── python ├── bin ├── numpy ├── numpy-1.22.4.dist-info └── numpy.libs -
Empaquetez les dépendances depuis le répertoire
my-layer-code:zip -r my-layer-code.zip python
Environnement d'exécution Node.js
-
Créez un répertoire de travail :
mkdir my-layer-code cd my-layer-code -
Installez les dépendances dans le sous-répertoire
nodejs:npm install --prefix ./nodejs --save <package-name>Exemple avec
uuid:npm install --prefix ./nodejs --save uuidAprès l'installation, la structure du répertoire se présente comme suit :
my-layer-code └── nodejs ├── node_modules │ └── uuid ├── package-lock.json └── package.json -
Empaquetez les dépendances depuis le répertoire
my-layer-code:zip -r my-layer-code.zip nodejs
Environnement d'exécution Java
-
Créez un répertoire de travail :
mkdir my-layer-code/java cd my-layer-code/java -
Créez un fichier
pom.xmldéclarant vos dépendances. L'exemple suivant installecommons-lang3et le copie dans./libà l'aide du pluginmaven-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> -
Installez les dépendances :
mvn dependency:copy-dependenciesAprès l'installation, la structure du répertoire se présente comme suit :
my-layer-code └── java └── lib └── commons-lang3-3.12.0.jar -
Empaquetez les dépendances depuis le répertoire
my-layer-code:zip -r my-layer-code.zip java
Environnement d'exécution PHP
-
Créez un répertoire de travail :
mkdir -p my-layer-code/php cd my-layer-code/php -
Créez un fichier
composer.jsondéclarant vos dépendances. Exemple :{ "require": { "aliyunfc/fc-php-sdk": "~1.2", "alibabacloud/fnf": "^1.7" } } -
Installez les dépendances :
composer installAprès l'installation, la structure du répertoire se présente comme suit :
my-layer-code └── php ├── composer.json ├── composer.lock └── vendor -
Empaquetez les dépendances depuis le répertoire
my-layer-code:zip -r my-layer-code.zip php
Créer une couche personnalisée
Via la console
Prérequis
Avant de commencer, assurez-vous de disposer :
D'une fonction Function Compute. Pour plus de détails, consultez Créer une fonction.
Étapes
Connectez-vous à la console Function Compute. Dans le volet de navigation de gauche, choisissez Advanced Features > Layers.
Dans la barre de navigation supérieure, sélectionnez une région. Sur la page Layers, cliquez sur Create Layer.
-
Configurez les paramètres suivants, puis cliquez sur Create. Une fois la couche créée, la version 1 est générée automatiquement. Chaque nouvelle version est incrémentée séquentiellement.
Paramètre Description Name Saisissez un nom pour la couche. Description Saisissez une description pour la couche. Compatible Runtime Sélectionnez les environnements d'exécution compatibles avec cette couche. Layer Upload Method Choisissez la méthode d'importation des dépendances de la couche : Upload Layer in ZIP Package — téléchargez un fichier .zip (max 500 Mo) ; Upload Layer in Folder — sélectionnez un dossier que Function Compute compressera en fichier .zip (max 500 Mo) ; Upload Layer Using OSS — spécifiez le Bucket Name et l'Object Name du fichier .zip dans Object Storage Service (OSS) (max 500 Mo) ; Build Dependency Layer Online — construisez directement à partir d'un fichier de dépendances (pris en charge pour Python avec requirements.txtet Node.js avecpackage.json, ainsi que pour les bibliothèques système légères).Build Environment Apparaît lorsque Build Dependency Layer Online est sélectionné. Choisissez l'environnement d'exécution pour la construction de la couche. Seuls les environnements Python et Node.js sont actuellement pris en charge. apt command Apparaît lorsque Build Dependency Layer Online est sélectionné. Saisissez les noms des packages après apt installpour installer des packages système dans la couche. -
Pour ajouter une nouvelle version à une couche existante :
Sur la page Layers, cliquez sur le nom de la couche cible.
Dans la section Version Management, cliquez sur Create Version.
Sélectionnez un environnement d'exécution, téléchargez le nouveau code de la couche, puis cliquez sur Create.
RemarqueVous ne pouvez pas modifier une couche existante ou l'une de ses versions. Pour mettre à jour une couche, créez une nouvelle version. Si une version de couche référencée a été supprimée, retirez la référence avant toute mise à jour.
Avec Serverless Devs
Prérequis
Avant de commencer, assurez-vous de disposer :
Étapes
-
Exécutez la commande suivante pour créer une couche :
Paramètre Description --codeChemin vers le package de code de la couche. --compatible-runtimeListe des environnements d'exécution compatibles, séparés par des virgules. --layer-nameNom de la couche. s cli fc layer publish --code ./my-layer-code --compatible-runtime java8,Java11,custom --region cn-hangzhou --layer-name my-layerParamètres : En cas de succès, la commande retourne l'Alibaba Cloud Resource Name (ARN) de la couche. L'ARN contient l'ID du compte, le nom de la couche et le numéro de version séparés par des dièses (
#).
-
Pour ajouter une nouvelle version à une couche existante, exécutez la même commande avec le même nom de couche :
RemarqueVous ne pouvez pas modifier une couche existante ou l'une de ses versions. Pour mettre à jour une couche, créez une nouvelle version. Si une version de couche référencée a été supprimée, retirez la référence avant toute mise à jour.
s cli fc layer publish --code ./my-layer-code --compatible-runtime java8,java11,custom --region cn-hangzhou --layer-name my-layer
Supprimer une couche ou une version de couche
Une fois une version de couche supprimée, vous ne pouvez plus la consulter ni la référencer dans de nouvelles configurations de fonctions. Les fonctions référençant déjà la version supprimée continuent de fonctionner normalement.
Connectez-vous à la console Function Compute. Dans le volet de navigation de gauche, choisissez Advanced Features > Layers.
Dans la barre de navigation supérieure, sélectionnez une région.
-
Sur la page Layers, supprimez une couche ou une version de couche :
Supprimer une couche : Localisez la couche cible, cliquez sur Delete dans la colonne Actions, cochez la case de confirmation, puis cliquez sur Delete.
Supprimer une version de couche : Ouvrez la page de détails de la couche, accédez à la section Version Management, localisez la version cible, cliquez sur Delete dans la colonne Actions, puis cliquez sur Delete dans la boîte de dialogue Confirm.
Étapes suivantes
Associez la couche personnalisée à une fonction pour lui permettre d'accéder à ses ressources. Pour plus de détails, consultez Configurer une couche personnalisée.
Gérez et configurez les couches par programmation à l'aide du paramètre
layerslors de la création ou de la mise à jour d'une fonction via l'API ou le SDK. Pour plus de détails, consultez CreateFunction et UpdateFunction.Si les dépendances de votre couche incluent des bibliothèques partagées ou si votre environnement local est incompatible avec l'environnement d'exécution Function Compute, construisez plutôt la couche à partir d'un Dockerfile. Pour plus de détails, consultez Construire une couche à l'aide d'un Dockerfile.