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

Date de la dernière mise à jour : 12/03/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 utiliser un Modèle d'application AWS Serverless (AWS SAM) pour créer automatiquement les nouvelles ressources. Vous pouvez également utiliser les images Docker amazon/aws-sam-cli-build-image sous-jacentes d'AWS SAM pour les créer.

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), assurez-vous d'utiliser la version la plus récente d'AWS CLI.

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 "public.ecr.aws/sam/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 est décompressé dans le dossier /opt de l'environnement Lambda, et ce dossier 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. Incluez 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 "python3.6" "python3.8"

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 avez besoin de l'ARN pour l'étape 6.

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 5.

Facultatif : utilisation des images Docker avec votre package Lambda

Vous pouvez également utiliser les images Docker amazon/aws-sam-cli-build-image 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 "public.ecr.aws/sam/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.