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

Dernière mise à jour : 07/01/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. À l'aide des images Docker lambci/lambda, vous pouvez simuler l'environnement Lambda en direct, et créer une couche compatible avec les versions d'exécution que vous spécifiez. Pour plus d'informations, consultez la page lambci/lambda du site Web de Docker.

Tenez compte du fait que les images lambci/lambda ne constituent pas une copie exacte de l'environnement Lambda et que certains fichiers peuvent manquer.

Remarque : AWS Serverless Application Model (AWS SAM) utilise également les images Docker lambci/lambda lorsque vous exécutez la commande sam local start-api afin de tester localement une application sans serveur.

Résolution

Remarque : Si vous recevez des erreurs lors de l'exécution de commandes depuis l'interface de ligne de commande AWS (AWS CLI), vérifiez que vous utilisez la version la plus récente de l'interface.

Les instructions suivantes utilisent Python comme exemple. Pour les autres langages de codage, adaptez les étapes en conséquence.

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

2.    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, consultez la section Fichiers Requirements du guide de l'utilisateur de la commande pip.

Si vous souhaitez que votre couche Lambda soit compatible avec les versions 3.6 et 3.8 de Python, la structure doit être similaire à ce qui suit :

├── 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.

3.    Exécutez la commande suivante une fois avec chaque version d'exécution que vous avez spécifiée dans la structure de répertoire. Cela permet d'installer, dans le sous-dossier approprié, les bibliothèques compatibles avec cet environnement d'exécution.

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

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

4.    Exécutez la commande suivante pour zipper le dossier python et créer le package de couche. Le fichier .zip sera décompressé dans le dossier /opt de l'environnement Lambda, qui est accessible depuis votre code de fonction Lambda.

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

Remarque : remplacez mypythonlibs par le nom de votre choix.

5.    Exécutez la commande suivante pour créer ou mettre à jour la couche. Assurez-vous d'inclure les versions d'exécution compatibles que vous avez spécifiées précédemment.

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

Important : 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.

Dans le résultat, prenez note de l'Amazon Resource Name (ARN) de la couche. Vous en aurez besoin à l'étape suivante.

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

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

Important : remplacez arn:aws:lambda:us-east-2:123456789012:layer:mypythonlibs:1 par l'ARN de la couche obtenu à l'étape précédente.

Facultatif : utilisation des images Docker avec votre package Lambda

Vous pouvez également utiliser les images Docker lambci/lambda directement avec votre package Lambda, sans créer de couche.

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

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

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

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