Comment puis-je utiliser les packages binaires natifs de l'AMI Amazon Linux 2 avec Lambda ?

Date de la dernière mise à jour : 28/03/2022

Je veux créer une fonction AWS Lambda qui contient des dépendances de bibliothèque partagée binaire et qui s'exécute sur une Amazon Machine Image (AMI) Amazon Linux 2. Existe-t-il un moyen pour que je puisse utiliser les packages logiciels de l'AMI Amazon Linux 2 sans recompiler le package ?

Brève description

L'AMI Amazon Linux 2 et l'AMI Amazon Linux qui sont utilisés pour les environnements d'exécution Lambda ne prennent pas en charge les mêmes packages binaires natifs.

Comme solution de contournement, vous pouvez d'abord créer une image de conteneur Lambda à l'aide de l'interface de ligne de commande (CLI) de Docker. Utilisez ensuite l'image de conteneur pour exécuter votre fonction Lambda.

Solution

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

Les instructions suivantes décrivent comment installer une bibliothèque curl dans une image Docker (image de conteneur Lambda). Ensuite, comment utiliser l'image pour exécuter une fonction Lambda Python version 3.9. Pour les autres langages de codage, adaptez les étapes en conséquence.

1.    Si vous ne l'avez pas déjà fait, installez Docker CLI.

2.    Créez un répertoire de projet nommé lambda-project.

3.    Utilisez un éditeur de texte pour créer un Dockerfile dans le répertoire lambda-project qui inclut l'exemple de code suivant :

FROM public.ecr.aws/lambda/python:3.9

# Copy function code
COPY lambda_function.py ${LAMBDA_TASK_ROOT}

# Install the binary packages using yum install
RUN yum install -y curl

# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
CMD [ "lambda_function.lambda_handler" ]

4.    Utilisez un éditeur de texte pour créer un fichier lambda_function.py dans le répertoire lambda-project qui inclut l'exemple de code suivant :

import subprocess

def lambda_handler(event, context):
    my_output = subprocess.check_output(["curl","-X", "GET", "https://www.httpbin.org/get"], stderr=subprocess.STDOUT, shell=False)
    print(my_output.decode('utf8'))

Important : assurez-vous d'exécuter toutes les commandes suivantes (étapes 5 à 10) dans le répertoire lambda-project.

5.    Créez l'image de conteneur Lambda en exécutant la commande Docker CLI docker build suivante :

docker build -t hello-world

6.    Testez la configuration de l'image de conteneur en démarrant l'image du conteneur localement. Pour démarrer l'image de conteneur localement, exécutez la commande Docker CLI docker run suivante :

docker run -p 9000:8080 hello-world 
curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

7.    Authentifiez Docker auprès de votre registre Amazon Elastic Container Registry (Amazon ECR) en exécutant la commande AWS CLI get-login-password suivante :

Remarque : remplacez us-east-1 par votre région AWS. Remplacez 123456789012 par votre ID de compte AWS.

aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.us-east-1.amazonaws.com

Pour plus d'informations, consultez Utilisation d'un jeton d'autorisation dans le guide de l'utilisateur Amazon ECR.

8.    Créez un référentiel Amazon ECR en exécutant la commande AWS CLI create-repository suivante :

Important : remplacez hello-world par le nom de votre référentiel Amazon ECR.

aws ecr create-repository --repository-name hello-world --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE

Pour plus d'informations, consultez Étape 3 : créer un référentiel dans le guide de l'utilisateur Amazon ECR.

9.    Étiquetez votre image de conteneur pour l'envoyer par push vers votre référentiel en exécutant la commande Docker CLI docker tag suivante :

Important : remplacez 123456789012 par votre ID de compte AWS. Remplacez us-east-1 par votre région AWS.

docker tag  hello-world:latest 123456789012.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest

10.    Envoyez votre image de conteneur par push vers votre référentiel en exécutant la commande Docker CLI docker push suivante :

Important : remplacez 123456789012 par votre ID de compte AWS. Remplacez us-east-1 par votre région AWS.

docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest

Votre image de conteneur se trouve désormais dans votre référentiel Amazon ECR. Pour plus d'informations, consultez Étape 4 : envoyer une image par push vers Amazon ECR dans le guide de l'utilisateur Amazon ECR.

11.    Créez et testez votre fonction Lambda à l'aide de l'image de conteneur que vous avez créée. Pour obtenir des instructions, consultez Création de fonctions Lambda définies comme des images de conteneur dans le guide du développeur Lambda.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?