Création et partage de couches Lambda - AWS Lambda

Création et partage de couches Lambda

Une couche Lambda est une archive de fichiers .zip qui peut contenir du code ou des données supplémentaires. Une couche peut contenir des bibliothèques, un environnement d’exécution personnalisé, des données ou des fichiers de configuration. Les couches favorisent le partage de code et la séparation des responsabilités afin que vous puissiez effectuer plus rapidement des itérations lors de l'écriture de la logique métier.

Vous pouvez utiliser des couches uniquement avec des fonctions Lambda déployées en tant qu'archive de fichiers .zip. Pour des fonctions définies en tant qu'image de conteneur, vous créez un package avec votre exécution préférée et toutes les dépendances de code lorsque vous créez l'image de conteneur. Pour plus d'informations, consultez Utilisation de couches et d'extensions Lambda dans des images conteneurs sur le blog AWS Compute.

Vous pouvez créer des couches à l'aide de la console Lambda, de l'API Lambda, de l'AWS CloudFormation, ou l'AWS Serverless Application Model (AWS SAM). Pour plus d'informations sur la création de couches AWS SAM, consultez Utilisation des couches dans le Guide du développeur AWS Serverless Application Model.

Création du contenu de la couche

Lorsque vous créez une couche, vous devez regrouper tout son contenu dans une archive de fichier .zip. Vous chargez l'archive de fichiers .zip sur votre couche à partir d'Amazon Simple Storage Service (Amazon S3) ou de votre ordinateur local. Lors de la configuration de l'environnement d'exécution pour la fonction, Lambda extrait le contenu de la couche dans le répertoire /opt.

Compilation de l'archive de fichier .zip pour votre couche

Vous générez votre code de couche dans une archive de fichiers .zip en procédant de la même manière que pour un package de déploiement de fonction. Si votre couche inclut des bibliothèques de code natives, vous devez compiler et construire ces bibliothèques à l'aide d'une machine de développement Linux afin que les fichiers binaires soient compatibles avec Amazon Linux.

Une façon de vous assurer que vous conditionnez correctement les bibliothèques dans un package pour Lambda consiste à utiliser AWS Cloud9. Pour plus d'informations, consultez Utilisation de couches Lambda pour simplifier votre processus de développement sur le blog AWS Compute.

Inclusion de dépendances de bibliothèques dans une couche

Pour chaque runtime Lambda, la variable PATH inclut des dossiers spécifiques dans le répertoire /opt. Si vous définissez la même structure de dossiers dans l'archive de fichier .zip de votre couche, votre code de fonction peut accéder au contenu de la couche sans avoir besoin de spécifier le chemin d'accès.

Le tableau suivant répertorie les chemins d'accès aux dossiers pris en charge par chaque environnement d'exécution.

Chemins d'accès de couche pour chaque runtime Lambda
Runtime Chemin

Node.js

nodejs/node_modules

nodejs/node14/node_modules (NODE_PATH)

Python

python

python/lib/python3.9/site-packages (répertoires de site)

Java

java/lib (CLASSPATH)

Ruby

ruby/gems/2.7.0 (GEM_PATH)

ruby/lib (RUBYLIB)

Tous les environnements d'exécution

bin (PATH)

lib (LD_LIBRARY_PATH)

Les exemples suivants montrent comment structurer les dossiers dans votre couche d’archive .zip.

Node.js

Exemple structure de fichiers du kit SDK AWS X-Ray pour Node.js

xray-sdk.zip └ nodejs/node_modules/aws-xray-sdk
Python

Exemple structure de fichiers pour la bibliothèque Pillow

pillow.zip │ python/PIL └ python/Pillow-5.3.0.dist-info
Ruby

Exemple structure de fichiers pour la gem JSON

json.zip └ ruby/gems/2.5.0/ | build_info | cache | doc | extensions | gems | └ json-2.1.0 └ specifications └ json-2.1.0.gemspec
Java

Exemple structure de fichiers pour le fichier JAR Jackson

jackson.zip └ java/lib/jackson-core-2.2.3.jar
All

Exemple structure de fichiers pour la bibliothèque jq

jq.zip └ bin/jq

Pour plus d'informations sur les paramètres de chemin d'accès dans l'environnement d'exécution Lambda, consultez Variables d'environnement d'exécution définies.

Instructions spécifiques d'un langage

Pour obtenir des instructions spécifiques d'un langage pour la création d'une archive de fichiers .zip, consultez les sections suivantes :

Création d'une couche

Vous pouvez créer des couches à l'aide de la console Lambda ou de l'API Lambda.

Les couches peuvent avoir une ou plusieurs versions. Lorsque vous créez une couche, Lambda définit la version de la couche sur version 1. Vous pouvez configurer des autorisations sur une version de couche existante, mais pour mettre à jour le code ou apporter d'autres modifications de configuration, vous devez créer une nouvelle version de la couche.

Pour créer une couche (console)

  1. Ouvrez la page Couches de la console Lambda.

  2. Sélectionnez Créer un calque.

  3. Sous Configuration de la couche, dans Nom, nommez votre couche.

  4. (Facultatif) Dans le champ Description, saisissez une description pour le calque.

  5. Pour télécharger le code de votre couche, effectuez l'une des opérations suivantes :

    • Pour charger un fichier .zip à partir de votre ordinateur, choisissez Charger un fichier .zip. Puis, sélectionnez Charger pour sélectionner votre fichier .zip local.

    • Pour charger un fichier à partir d'Amazon S3, choisissez Charger un fichier à partir d'Amazon S3. Ensuite, pour l'URL du lien Amazon S3, entrez un lien vers le fichier.

  6. (Facultatif) Pour Environnements d'exécution compatibles, choisissez jusqu'à 15 environnements d'exécution.

  7. (Facultatif) Pour Licence, saisissez toutes les informations de licence nécessaires.

  8. Sélectionnez Créer.

Pour créer une couche (API)

Pour créer une couche, utilisez la commande publish-layer-version avec un nom, une description, une archive de fichier .zip et la liste des exécutions compatibles avec la couche. La liste des exécutions est facultative.

aws lambda publish-layer-version --layer-name my-layer --description "My layer" \ --license-info "MIT" --content S3Bucket=lambda-layers-us-east-2-123456789012,S3Key=layer.zip \ --compatible-runtimes python3.6 python3.7 python3.8

Vous devez voir des résultats similaires à ce qui suit :

{ "Content": { "Location": "https://awslambda-us-east-2-layers.s3.us-east-2.amazonaws.com/snapshots/123456789012/my-layer-4aaa2fbb-ff77-4b0a-ad92-5b78a716a96a?versionId=27iWyA73cCAYqyH...", "CodeSha256": "tv9jJO+rPbXUUXuRKi7CwHzKtLDkDRJLB3cC3Z/ouXo=", "CodeSize": 169 }, "LayerArn": "arn:aws:lambda:us-east-2:123456789012:layer:my-layer", "LayerVersionArn": "arn:aws:lambda:us-east-2:123456789012:layer:my-layer:1", "Description": "My layer", "CreatedDate": "2018-11-14T23:03:52.894+0000", "Version": 1, "LicenseInfo": "MIT", "CompatibleRuntimes": [ "python3.6", "python3.7", "python3.8" ] }
Note

Chaque fois que vous appelez publish-layer-version, vous créez une nouvelle version de la couche.

Suppression d'une version de couche

Pour supprimer une version de couche, utilisez la commande delete-layer-version.

aws lambda delete-layer-version --layer-name my-layer --version-number 1

Lorsque vous supprimez une version de couche, vous ne pouvez plus configurer de fonction Lambda pour l'utiliser. En revanche, toute fonction qui utilise déjà la version continue d'y avoir accès. Les numéros de version ne sont jamais réutilisés pour le nom d'une couche.

Configuration des autorisations de couche

Par défaut, une couche que vous créez est privée à votre compte AWS. Toutefois, vous pouvez éventuellement partager la couche avec d'autres comptes ou la rendre publique.

Pour accorder une autorisation d'utilisation de la couche à un autre compte, ajoutez une instruction à la stratégie d'autorisations de la version de la couche à l'aide de la commande add-layer-version-permission. Dans chaque instruction, vous pouvez accorder une autorisation à un compte unique, à tous les comptes ou à une organisation.

aws lambda add-layer-version-permission --layer-name xray-sdk-nodejs --statement-id xaccount \ --action lambda:GetLayerVersion --principal 210987654321 --version-number 1 --output text

Vous devez voir des résultats similaires à ce qui suit :

e210ffdc-e901-43b0-824b-5fcd0dd26d16 {"Sid":"xaccount","Effect":"Allow","Principal":{"AWS":"arn:aws:iam::210987654321:root"},"Action":"lambda:GetLayerVersion","Resource":"arn:aws:lambda:us-east-2:123456789012:layer:xray-sdk-nodejs:1"}

Les autorisations ne s'appliquent qu'à une seule version d'une couche. Répétez le processus chaque fois que vous créez une nouvelle version de la couche.

Pour obtenir plus d'exemples, consultez Octroi de l'accès de la couche à d'autres comptes.

Utilisation de AWS CloudFormation avec des couches

Vous pouvez utiliser AWS CloudFormation pour créer une couche et l'associer à votre fonction Lambda. L'exemple de modèle suivant crée une couche nommée blank-nodejs-lib et l'attache à la fonction Lambda à l'aide de la propriété Couches.

AWSTemplateFormatVersion: '2010-09-09' Transform: 'AWS::Serverless-2016-10-31' Description: A Lambda application that calls the Lambda API. Resources: function: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs12.x CodeUri: function/. Description: Call the Lambda API Timeout: 10 # Function's execution role Policies: - AWSLambdaBasicExecutionRole - AWSLambda_ReadOnlyAccess - AWSXrayWriteOnlyAccess Tracing: Active Layers: - !Ref libs libs: Type: AWS::Serverless::LayerVersion Properties: LayerName: blank-nodejs-lib Description: Dependencies for the blank sample app. Content: S3Bucket: my-bucket-region-123456789012 S3Key: layer.zip CompatibleRuntimes: - nodejs12.x