Les layers fournissent des bibliothèques de dépendances partagées, des environnements d'exécution et des extensions de fonction pour vos fonctions. Extrayez les bibliothèques communes dont dépendent vos fonctions dans un layer, ou utilisez les layers publics de Function Compute, afin de réduire la taille du package de code lors du déploiement ou de la mise à jour d'une fonction. Cette rubrique explique le fonctionnement des layers, les répertoires pris en charge par chaque runtime, comment construire un fichier ZIP de layer, ainsi que comment créer et supprimer un layer personnalisé.
Fonctionnement
Lorsque vous construisez un layer, empaquetez tout son contenu dans un fichier ZIP. Au moment de l'exécution, Function Compute extrait le contenu du layer et le déploie dans le répertoire /opt. Lorsque vous configurez plusieurs layers pour une fonction, le contenu des layers est fusionné dans /opt dans l'ordre inverse de leur configuration. Si un fichier d'un layer porte le même nom qu'un fichier d'un autre layer, le fichier du layer configuré en premier écrase celui du layer configuré ensuite.
Par exemple, si vous configurez Layer 1 et Layer 2 pour une fonction, l'instance de fonction charge d'abord Layer 2, puis Layer 1 au démarrage, et extrait les deux layers dans le répertoire /opt. Dans /opt, le contenu de Layer 1 apparaît en premier et celui de Layer 2 en second. Si Layer 1 et Layer 2 contiennent des fichiers portant le même nom, les fichiers de Layer 1 écrasent ceux de Layer 2.
Exigences de construction :
Si un layer contient des bibliothèques binaires ou des exécutables, construisez-le sous Linux (Debian 9 recommandée).
Function Compute s'exécute sur une architecture x86_64. Pour les dépendances liées au jeu d'instructions, utilisez une machine x86_64 ou compilez de manière croisée pour garantir la compatibilité.
Répertoires pris en charge par runtime
Si un runtime prend en charge les layers, Function Compute ajoute les répertoires suivants au chemin de recherche des dépendances du langage du runtime. Structurez votre package ZIP de layer pour qu'il corresponde à ces chemins, afin que le code de votre fonction puisse accéder au contenu du layer sans spécifier de chemins explicites. Pour plus de détails sur la construction d'un fichier ZIP de layer, consultez Construire un fichier ZIP de layer.
| Runtime | Chemin du répertoire |
| Python | /opt/python |
| Node.js | /opt/nodejs/node_modules |
| Java | /opt/java/lib |
| PHP | /opt/php |
| Autres runtimes (à l'exception du runtime personnalisé et du runtime de conteneur personnalisé) | /opt/bin (PATH), /opt/lib (LD_LIBRARY_PATH) |
| Runtime personnalisé et runtime de conteneur personnalisé | 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 les dépendances d'un layer dans un runtime personnalisé.
Structure du fichier ZIP du layer
Les exemples suivants illustrent la structure ZIP requise et les chemins de déploiement correspondants pour chaque runtime.
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 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 — empaquetage avec les dépendances Composer :
my-layer-code.zip
└── php
├── composer.json
├── composer.lock
└── vendor
Extracted to:
/opt/php/vendor
Construire un fichier ZIP de layer
La construction d'un fichier ZIP de layer est similaire à celle d'un package de code. Pour que Function Compute charge correctement les bibliothèques publiées dans un layer au moment de l'exécution, la structure des répertoires du code de la bibliothèque doit respecter les conventions standard de chaque langage. Pour plus de détails, consultez Répertoires pris en charge par runtime. Si vous empaquetez les dépendances de votre layer comme indiqué, Function Compute ajoute automatiquement le chemin de recherche des dépendances pour chaque langage, et vous n'avez pas besoin de spécifier le chemin complet.
Pour construire un fichier ZIP de layer pour chaque runtime, suivez les étapes ci-dessous :
Lorsque vous construisez un layer localement, utilisez la même version du langage de programmation que celle du runtime sélectionné dans Function Compute.
Le répertoire de travail
my-layer-codecréé dans les étapes suivantes est donné à titre d'exemple. Vous pouvez remplacer le nom du répertoire selon vos besoins.
Runtime Python
Lorsque vous construisez un layer localement, utilisez la même version de Python que celle du runtime Python sélectionné dans Function Compute.
-
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 ${PackageName}Pour plus de détails sur la commande
pip install, consultez pip install.Exemple avec
numpy:pip install --target ./python numpyAprès l'installation, la structure des répertoires 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
Runtime Node.js
Lorsque vous construisez un layer localement, utilisez la même version de Node.js que celle du runtime Node.js sélectionné dans Function Compute.
-
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 ${PackageName}${PackageName}représente le nom du package de dépendance que vous souhaitez installer. Pour plus de détails sur la commandenpm install, consultez npm-install.Exemple avec
uuid:npm install --prefix ./nodejs --save uuidAprès l'installation, la structure des répertoires 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
Runtime Java
-
Créez un répertoire de travail :
mkdir my-layer-code/java cd my-layer-code/java -
Créez un fichier
pom.xmlqui déclare 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 des répertoires 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
Runtime PHP
-
Créez un répertoire de travail :
mkdir -p my-layer-code/php cd my-layer-code/php -
Créez un fichier
composer.jsonqui déclare 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 des répertoires 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 un layer personnalisé
Utilisation de la console
Prérequis
Avant de commencer, assurez-vous d'avoir :
Une fonction Function Compute créée. 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.
Paramètre Description Name Saisissez un nom pour le layer. Description Saisissez une description pour le layer afin de vous aider à distinguer les layers entre eux. Compatible Runtime Sélectionnez les runtimes compatibles avec ce layer. Layer Upload Method Sélectionnez la méthode de téléchargement des dépendances du layer : 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 — si votre fonction est développée en Python ou Node.js, ou si vous devez installer des bibliothèques système légères, vous pouvez construire le layer en ligne. Saisissez le contenu du fichier de dépendance ( requirements.txtpour Python oupackage.jsonpour Node.js) dans la zone de saisie ci-dessous. Après soumission de la demande, Function Compute installe automatiquement les packages de dépendances au niveau du langage et les bibliothèques système, ce qui simplifie la gestion des dépendances du layer.Build Environment Apparaît lorsque Build Dependency Layer Online est sélectionné. Choisissez le runtime pour la construction du layer. Actuellement, seuls les runtimes Python et Node.js sont 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 les packages système dans le layer.Une fois le layer créé, une version du layer est automatiquement générée. Le numéro de version commence à 1 et s'incrémente à chaque nouvelle version.
RemarqueSi le bucket OSS est chiffré par Key Management Service (KMS), le rôle lié au service Function Compute (
AliyunServiceRoleForFC) peut ne pas avoir l'autorisation d'accéder aux objets chiffrés, ce qui entraîne une erreurAccessDenied. Pour résoudre ce problème, mettez à jour la stratégie de clé dans la console KMS pour accorder l'accès au rôleAliyunServiceRoleForFC. Pour plus de détails, consultez Modifier une stratégie de clé. Après la mise à jour de la stratégie de clé, réessayez le téléchargement du layer pour vérifier que la modification des autorisations prend effet. -
Pour ajouter une nouvelle version à un layer existant :
RemarqueVous ne pouvez pas modifier un layer existant ni aucune de ses versions. Pour mettre à jour un layer, créez un nouveau layer ou une nouvelle version de layer. Si une version de layer référencée est supprimée, supprimez la référence avant de mettre à jour la configuration du layer.
Sur la page Layers, cliquez sur le nom du layer cible.
Dans la section Version Management, cliquez sur Create Version.
Sélectionnez un runtime, téléchargez le nouveau code du layer, puis cliquez sur Create.
Utilisation de Serverless Devs
Prérequis
Avant de commencer, assurez-vous d'avoir :
Étapes
-
Exécutez la commande suivante pour créer un layer :
s cli fc layer publish --code ./my-layer-code --compatible-runtime java8,java11,custom --region cn-hangzhou --layer-name my-layerLe tableau suivant décrit les paramètres de la commande.
Paramètre Description --codeChemin d'accès au package de code du layer. --compatible-runtimeListe des runtimes compatibles, séparés par des virgules. --layer-nameNom du layer. Une fois le layer créé, la commande renvoie l'Alibaba Cloud Resource Name (ARN) du layer. L'ARN se compose de trois parties séparées par des dièses (
#) : l'identifiant de l'ID de compte, le nom du layer et la version du layer. Vous pouvez également vous connecter à la console Function Compute pour afficher les informations sur le layer créé. -
Pour ajouter une nouvelle version à un layer existant, exécutez la même commande avec le même nom de layer :
s cli fc layer publish --code ./my-layer-code --compatible-runtime java8,java11,custom --region cn-hangzhou --layer-name my-layerRemarqueVous ne pouvez pas modifier un layer existant ni aucune de ses versions. Pour mettre à jour un layer, créez un nouveau layer ou une nouvelle version de layer. Si une version de layer référencée est supprimée, supprimez la référence avant de mettre à jour la configuration du layer.
Supprimer un layer ou une version de layer
Vous pouvez supprimer les layers ou les versions de layer dont vous n'avez plus besoin. Un layer supprimé ne peut plus être consulté ni référencé dans les configurations de fonction. Toutefois, l'exécution des fonctions qui référencent déjà le layer supprimé n'est pas affectée.
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 un layer ou une version de layer :
Supprimer un layer : localisez le layer cible, cliquez sur Delete dans la colonne Actions, cochez la case de confirmation, puis cliquez sur Delete.
Supprimer une version de layer : cliquez sur le nom du layer cible. Dans la section Version Management de la page des détails du layer, localisez la version cible, cliquez sur Delete dans la colonne Actions, puis cliquez sur Delete dans la boîte de dialogue Confirm.
Étapes suivantes
Après avoir créé un layer personnalisé, associez-le à une fonction via la console Function Compute ou Serverless Devs, afin que la fonction puisse accéder aux ressources fournies par le layer. Pour plus de détails, consultez Configurer un layer personnalisé.
Vous pouvez également gérer et configurer les layers en définissant le 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 layer incluent des bibliothèques partagées, ou si votre environnement local est incompatible avec le runtime Function Compute, vous ne pouvez pas construire le layer dans la console ou localement. Construisez plutôt le layer à partir d'un Dockerfile. Pour plus de détails, consultez Utiliser un Dockerfile pour construire un layer.