Comment puis-je créer une couche Lambda à l'aide d'un environnement Lambda simulé avec Docker ?

Date de la dernière mise à jour : 11-10-2021

Je souhaite créer une couche AWS Lambda compatible avec les versions d'exécution de mon environnement cible. Comment dois-je procéder ?

Brève description

Lorsque vous développez des fonctions Lambda, vous avez le choix entre diverses versions d'exécution Lambda prises en charge. Pour créer des fonctions et des couches Lambda compatibles avec des environnements d'exécution spécifiques, vous pouvez effectuer l'une des opérations suivantes :

Pour plus d'informations, consultez la section Création et partage de couches Lambda.

Résolution

Remarque : si vous recevez des erreurs lors de l'exécution de commandes à partir de l'AWS Command Line Interface (AWS CLI), assurez-vous d'utiliser la version la plus récente de l'interface.

Les instructions suivantes utilisent Python comme langage de codage et une plateforme informatique basée sur Linux à titre d'exemple. Pour les autres langages et plateformes de codage, adaptez les étapes en conséquence.

Installez Docker sur votre ordinateur

Si ce n'est pas déjà fait, installez Docker pour Linux, Windows ou macOS sur votre ordinateur.

Créez la structure de répertoire appropriée et spécifiez vos dépendances dans le fichier de configuration pip (requirements.txt)

Pour plus d'informations sur la création de structures de répertoire, consultez la section Inclure les dépendances de la bibliothèque dans une couche. Pour plus d'informations sur la spécification des dépendances, consultez la section Fichiers requis dans le guide de l'utilisateur pip.

Exemple de structure de répertoire pour une couche Lambda compatible avec Python versions 3.6 et 3.8

├── requirements.txt
└── python/
    └── lib/
        ├── python3.6/
        │   └── site-packages/
        └── python3.8/
            └── site-packages/

Remarque : la taille totale de la fonction et de toutes les couches, après décompression, ne peut pas dépasser la taille du package de déploiement, qui est de 250 Mo après décompression. Pour plus d'informations sur la prise en charge des versions de Python par Lambda, consultez la section Création de fonctions Lambda avec Python.

Installez les dépendances de la bibliothèque dans les sous-dossiers appropriés en fonction des environnements d'exécution que vous avez spécifiés dans votre structure de répertoire

Exécutez la commande AWS CLI suivante une fois avec chaque version d'exécution que vous avez spécifiée dans la structure de répertoire :

Important : remplacez 3.6 par 3.7 ou 3.8, en fonction des bibliothèques compatibles que vous souhaitez installer.

docker run -v "$PWD":/var/task "public.ecr.aws/sam/build-python3.6" /bin/sh -c "pip install -r requirements.txt -t python/lib/python3.6/site-packages/; exit"

Créez une archive de fichiers .zip pour votre couche

Exécutez la commande suivante pour zipper le dossier python et créer le package de couche :

Remarque : vous pouvez remplacer mypythonlibs par le nom de votre choix.

zip -r mypythonlibs.zip python > /dev/null

Le fichier .zip est dégonflé dans le dossier /opt de l'environnement Lambda. Le dossier /opt est accessible depuis votre code de fonction Lambda.

Créez ou mettez à jour votre couche

Exécutez la commande suivante pour créer ou mettre à jour votre couche Lambda :

Important : assurez-vous d'inclure les versions d'exécution compatibles que vous avez spécifiées précédemment. Remplacez mypythonlibs par le nom du package que vous avez utilisé à l'étape précédente. Remplacez My python libs par la description de votre choix.

aws lambda publish-layer-version --layer-name mypythonlibs --description "My python libs" --zip-file fileb://mypythonlibs.zip --compatible-runtimes "python3.6" "python3.8"

Examinez la sortie et copiez l'Amazon Resource Name (ARN) de la couche. Vous avez besoin de l'ARN de la couche pour passer à l'étape suivante.

Mettre à jour la configuration de votre fonction Lambda afin que la couche soit utilisée

Exécutez la commande suivante pour mettre à jour la configuration de la fonction Lambda afin d'utiliser la couche :

Important : remplacez arn:aws:lambda:us-east-2:123456789012:layer:mypythonlibs:1 par l'ARN de la couche.

aws lambda update-function-configuration --layers arn:aws:lambda:us-east-2:123456789012:layer:mypythonlibs:1 --function-name my-function

(Facultatif) Pour utiliser les images Docker pour votre package Lambda au lieu d'un fichier AWS SAM

Au lieu d'utiliser un fichier AWS SAM, vous pouvez également utiliser les images Docker amazon/aws-sam-cli-build-image pour créer votre package Lambda. L'utilisation des images Docker vous permet de créer le package sans créer de couche.

1.    Exécutez la commande suivante pour obtenir les versions requises de vos dépendances :

Important : remplacez 3.6 par 3.7 ou 3.8, en fonction des bibliothèques compatibles que vous souhaitez installer.

docker run -v "$PWD":/var/task "public.ecr.aws/sam/build-python3.6" /bin/sh -c "pip install -r requirements.txt -t libs; exit"

2.    Créez un package de déploiement Lambda qui inclut le code de votre fonction et les bibliothèques appropriées.