AWS Lambda
Manuel du développeur

Couches AWS Lambda

Vous pouvez configurer votre fonction Lambda pour extraire le code supplémentaire et le contenu sous la forme de couches. Une couche est une archive ZIP qui contient des bibliothèques, un environnement d’exécution personnalisé ou d'autres dépendances. Avec les couches, vous pouvez utiliser les bibliothèques dans votre fonction sans avoir besoin de les inclure dans votre package de déploiement.

Les couches vous permettent de maintenir votre package de déploiement petit, ce qui facilite le développement. Vous pouvez éviter les erreurs qui peuvent se produire lorsque vous installez et regroupez les dépendances avec le code de votre fonction. Pour les fonctions Node.js, Python et Ruby, vous pouvez développer le code de votre fonction dans la console Lambda tant que vous maintenez votre package de déploiement sous 3 MB.

Note

Une fonction peut utiliser un maximum de 5 couches à la fois. La taille totale décompressée de la fonction avec toutes les couches ne peut pas dépasser la taille limite du package de déploiement décompressé de 250 MB. Pour en savoir plus, consultez Limites AWS Lambda.

Vous pouvez créer des couches ou utiliser des couches publiées par AWS d'autres clients AWS. Les couches prennent en charge les stratégies basées sur les ressources pour l'octroi des autorisations d'utilisation des couches à certains comptes AWS spécifiques, à AWS Organizations ou à tous les comptes.

Les couches sont extraites dans le répertoire /opt de l'environnement d'exécution de la fonction. Chaque environnement d’exécution recherche les bibliothèques dans un autre emplacement sous /opt, en fonction du langage. Structurez votre couche afin que votre code de fonction puisse accéder aux bibliothèques sans configuration supplémentaire.

Vous pouvez également utiliser Modèle d'application sans serveur AWS (AWS SAM) pour gérer les couches et la configuration des couches de votre fonction. Pour plus d'informations, consultez la section Déclarer les ressources sans serveur dans le Manuel du développeur Modèle d'application sans serveur AWS.

Configuration d'une fonction pour utiliser les couches

Vous pouvez spécifier jusqu'à 5 couches dans la configuration de votre fonction, pendant ou après la création de la fonction. Vous choisissez une version spécifique d'une couche à utiliser. Si vous souhaitez utiliser une autre version ultérieurement, actualisez la configuration de votre fonction.

Pour ajouter des couches dans votre fonction, utilisez la commande update-function-configuration. L'exemple suivant ajoute deux couches : une à partir du même compte que la fonction, et l'autre à partir d'un autre compte.

$ aws lambda update-function-configuration --function-name my-function \ --layers arn:aws:lambda:us-east-2:123456789012:layer:my-layer:3 \ arn:aws:lambda:us-east-2:210987654321:layer:their-layer:2 { "FunctionName": "test-layers", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Runtime": "nodejs8.10", "Role": "arn:aws:iam::123456789012:role/service-role/lambda-role", "Handler": "index.handler", "CodeSize": 402, "Description": "", "Timeout": 5, "MemorySize": 128, "LastModified": "2018-11-14T22:47:04.542+0000", "CodeSha256": "kDHAEY62Ni3OovMwVO8tNvgbRoRa6IOOKqShm7bSWF4=", "Version": "$LATEST", "TracingConfig": { "Mode": "Active" }, "RevisionId": "81cc64f5-5772-449a-b63e-12330476bcc4", "Layers": [ { "Arn": "arn:aws:lambda:us-east-2:123456789012:layer:my-layer:3", "CodeSize": 169 }, { "Arn": "arn:aws:lambda:us-east-2:210987654321:layer:their-layer:2", "CodeSize": 169 } ] }

Vous devez spécifier la version de chaque couche à utiliser en fournissant l'ARN complet de la version de la couche. Lorsque vous ajoutez des couches à une fonction qui possède déjà des couches, la liste précédente est remplacée par la nouvelle. Incluez toutes les couches chaque fois que vous mettez à jour la configuration de la couche. Pour supprimer toutes les couches, spécifiez une liste vide.

$ aws lambda update-function-configuration --function-name my-function --layers []

Votre fonction peut accéder au contenu de la couche lors de l'exécution dans le répertoire /opt. Les couches sont appliquées dans l'ordre spécifié, avec la fusion de tous les dossiers portant le même nom. Si le même fichier apparaît dans plusieurs couches, la version dans la dernière couche appliquée est utilisée.

Le créateur d'une couche peut supprimer la version de la couche que vous utilisez. Dans ce cas, votre fonction continue de s'exécuter comme si la version de la couche existait toujours. Toutefois, lorsque vous mettez à jour la configuration de la couche, vous devez supprimer la référence à la version supprimée.

Gestion des couches

Pour créer une couche, utilisez la commande publish-layer-version avec un nom, une description, une archive ZIP et une liste des runtimes qui sont compatibles avec la couche. La liste des runtimes est facultative, mais elle rend la couche plus facile à détecter.

$ 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 { "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" ] }

Chaque fois que vous appelez publish-layer-version, vous créez une nouvelle version. Les fonctions qui utilisent la couche font référence directement à une version de la couche. Vous pouvez configurer des autorisations sur une version de couche existante, mais pour effectuer d'autres modifications, vous devez créer une nouvelle version.

Pour trouver les couches qui sont compatibles avec le runtime de votre fonction, utilisez la commande list-layers.

$ aws lambda list-layers --compatible-runtime python3.7 { "Layers": [ { "LayerName": "my-layer", "LayerArn": "arn:aws:lambda:us-east-2:123456789012:layer:my-layer", "LatestMatchingVersion": { "LayerVersionArn": "arn:aws:lambda:us-east-2:123456789012:layer:my-layer:2", "Version": 2, "Description": "My layer", "CreatedDate": "2018-11-15T00:37:46.592+0000", "CompatibleRuntimes": [ "python3.6", "python3.7" ] } } ] }

Vous pouvez omettre l'option de runtime pour répertorier toutes les couches. Les détails dans la réponse reflètent la version la plus récente de la couche. Consultez toutes les versions d'une couche avec list-layer-versions. Pour obtenir plus d'informations sur une version, utilisez get-layer-version.

$ aws lambda get-layer-version --layer-name my-layer --version-number 2 { "Content": { "Location": "https://awslambda-us-east-2-layers.s3.us-east-2.amazonaws.com/snapshots/123456789012/my-layer-91e9ea6e-492d-4100-97d5-a4388d442f3f?versionId=GmvPV.309OEpkfN...", "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:2", "Description": "My layer", "CreatedDate": "2018-11-15T00:37:46.592+0000", "Version": 2, "CompatibleRuntimes": [ "python3.6", "python3.7" ] }

Le lien dans la réponse vous permet de télécharger l'archive de la couche. Il reste valide pendant 10 minutes. 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 des fonctions pour l'utiliser. En revanche, toute fonction qui utilise déjà la version continue d'y avoir accès. Les numéros de versions ne sont jamais réutilisés pour le nom d'une couche.

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

Vous pouvez déplacer les dépendances de runtime de votre code de fonction en les plaçant dans une couche. Les runtimes Lambda incluent des chemins d'accès dans le répertoire /opt afin de s'assurer que le code de votre fonction ait accès aux bibliothèques qui sont incluses dans les couches.

Pour inclure des bibliothèques dans une couche, placez-les dans l'un des dossiers pris en charge par votre runtime.

  • Node.jsnodejs/node_modules, nodejs/node8/node_modules (NODE_PATH)

    Exemple Kit SDK AWS X-Ray pour Node.js

    xray-sdk.zip └ nodejs/node_modules/aws-xray-sdk
  • Pythonpython, python/lib/python3.7/site-packages (répertoires du site)

    Exemple Pillow

    pillow.zip │ python/PIL └ python/Pillow-5.3.0.dist-info
  • Javajava/lib (chemin de classe)

    Exemple Jackson

    jackson.zip └ java/lib/jackson-core-2.2.3.jar
  • Rubyruby/gems/2.5.0 (GEM_PATH), ruby/lib (RUBY_LIB)

    Exemple JSON

    json.zip └ ruby/gems/2.5.0/ | build_info | cache | doc | extensions | gems | └ json-2.1.0 └ specifications └ json-2.1.0.gemspec
  • Tousbin (PATH), lib (LD_LIBRARY_PATH)

    Exemple JQ

    jq.zip └ bin/jq

Pour plus d'informations sur les paramètres des chemins d'accès dans l'environnement d'exécution Lambda, consultez Variables d'environnement disponibles pour les fonctions Lambda.

Autorisations d'utilisation des couches

Les autorisations d'utilisation des couches sont gérées sur la ressource. Pour configurer une fonction à une couche, vous avez besoin de l'autorisation d'appeler GetLayerVersion sur la version de la couche. Pour les fonctions dans votre compte, vous pouvez obtenir cette autorisation à partir de votre stratégie d'utilisateur ou à partir de la stratégie basée sur les ressources de la fonction. Pour utiliser une couche dans un autre compte, vous avez besoin d'une autorisation sur votre stratégie d'utilisateur, et le propriétaire de l'autre compte doit accorder l'autorisation à votre compte avec une stratégie basée sur les ressources.

Pour accorder une autorisation d'utilisation de la couche à un autre compte, ajoutez une instruction à la stratégie d'autorisations de la version de couche avec 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 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 la procédure 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.