Article original : How to Deploy an AWS Lambda Function with Serverless Framework
Le calcul serverless a révolutionné la manière dont les développeurs construisent et déploient des applications dans le cloud. Il élimine les complexités de la gestion des serveurs, permettant aux développeurs de se concentrer uniquement sur l'écriture de code et la livraison de valeur à leurs utilisateurs.
Dans le domaine du calcul serverless, AWS Lambda se distingue comme une plateforme de premier plan pour exécuter des fonctions serverless de manière scalable et rentable.
Table des matières
- Qu'est-ce que le Framework Serverless ?
- Objectif et portée du guide
- Prérequis
- Comment configurer l'AWS CLI
- Comment créer le rôle IAM
- Comment créer un projet Serverless
- Comment écrire la fonction Python
- Comment définir la configuration Serverless
- Comment déployer la fonction Python
- Comment tester l'API
- Surveillance et journalisation
- Conclusion
Qu'est-ce que le Framework Serverless ?
Le Framework Serverless est un outil puissant qui simplifie le déploiement et la gestion des applications serverless sur divers fournisseurs de cloud, y compris Amazon Web Services (AWS). Ce guide vise à vous guider à travers le processus d'utilisation du Framework Serverless pour déployer une simple fonction Python sur AWS Lambda, l'exposer via API Gateway, et la surveiller en utilisant AWS CloudWatch.
Objectif et portée du guide
L'objectif de ce guide est de vous fournir un tutoriel étape par étape sur le déploiement d'une fonction Python serverless sur AWS en utilisant le Framework Serverless. Que vous soyez nouveau dans le calcul serverless ou que vous cherchiez à développer vos compétences, ce tutoriel est conçu pour vous aider avec les éléments suivants :
- Comment configurer les prérequis nécessaires, y compris la configuration du compte AWS.
- Comment créer un nouveau projet serverless en utilisant le Framework Serverless.
- Comment écrire une fonction Python qui sera déployée sur AWS Lambda.
- Comment définir la configuration serverless dans un fichier
serverless.yml. - Comment déployer la fonction Python et API Gateway.
- Comment tester l'API déployée en utilisant divers outils comme cURL ou Postman.
- Comment configurer la surveillance et la journalisation avec AWS CloudWatch.
À la fin de cet article, vous aurez une compréhension claire de la manière d'utiliser le Framework Serverless pour déployer et gérer des applications serverless sur AWS.
Vous acquerrez également une expérience pratique dans le déploiement de fonctions serverless et leur exposition via un point de terminaison API, ouvrant la voie à la construction et à la mise à l'échelle d'applications serverless dans vos projets.
Maintenant, plongeons dans les prérequis nécessaires pour commencer ce tutoriel.
Prérequis
Pour suivre ce tutoriel, vous aurez besoin des éléments suivants :
- Un compte AWS.
- L'AWS CLI (Interface de Ligne de Commande).
- Le Framework Serverless.
Comment configurer l'AWS CLI
Vous devrez définir les informations d'identification AWS pour l'AWS CLI si vous ne l'avez pas déjà fait. Vous l'utiliserez avec le Framework Serverless pour déployer les ressources sur AWS.
Vous pouvez créer le fichier d'informations d'identification AWS en entrant la commande suivante dans le terminal :
cat <<EOF > ~/.aws/credentials
[default]
aws_access_key_id = <REPLACE_WITH_YOUR_SECRET_KEY>
aws_secret_access_key = <REPLACE_WITH_YOUR_ACCESS_KEY>
EOF
cat <<EOF > ~/.aws/config
[default]
region = eu-west-1
output = json
EOF
Comment créer le rôle IAM
Le rôle IAM est également utilisé par le Framework Serverless pour déployer les ressources sur AWS. Entrez la commande suivante pour créer le rôle :
aws iam create-role --role-name serverlessLabs --assume-role-policy-document '{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}'
Cette politique permet au rôle d'être utilisé par le service AWS Lambda.

Entrez la commande suivante pour attacher la politique AWSLambdaBasicExecutionRole au rôle :
aws iam attach-role-policy --role-name serverlessLabs --policy-arn arn:aws:iam::aws:policy/AWSLambda_FullAccess
Pour vérifier que le rôle a été créé avec succès, vous pouvez exécuter la commande suivante pour obtenir des informations sur le rôle IAM :
aws iam get-role --role-name serverlessLabs
Voici à quoi les informations devraient ressembler :

Comment créer un projet Serverless
Ce projet est une simple fonction Python qui est déployée sur AWS Lambda, API Gateway et CloudWatch en utilisant le Framework Serverless.
La fonction est déclenchée par une requête HTTP GET et retourne une simple chaîne de caractères. La fonction est déployée dans la région eu-west-1.
Tout d'abord, installez le Framework Serverless en utilisant npm :
npm install -g serverless
Ensuite, créez un nouveau projet Framework Serverless en utilisant la commande serverless puis suivez les instructions :
serverless
Choisissez ensuite AWS Python Starter dans la liste des modèles. Donnez-lui le nom de votre choix – j'ai utilisé serverless-lab.

Après que la commande s'exécute avec succès, vous verrez les deux composants principaux créés : serverless.yaml, et handler.py.
Comment écrire la fonction Python
Pour garder les choses organisées, créons un dossier nommé functions, et créons un fichier nommé __init__.py à l'intérieur. Vous pouvez faire cela en utilisant cette commande :
mkdir functions touch functions/__init__.py
Créez votre première fonction en créant un fichier nommé first_function.py à l'intérieur du dossier functions :
touch functions/first_function.py
Ouvrez ensuite le fichier first_function.py, et collez le code Python suivant pour définir la fonction que vous allez déployer :
def first_function(event, context):
print("La première fonction a été invoquée !!")
return {
'statusCode': 200,
'body': "Bonjour, le monde !.\n C'est la première fonction."
}
Le code ci-dessus est une simple fonction Python qui retourne un objet JSON avec des valeurs de code de statut et de corps. Comme vous pouvez le voir, nous avons inséré les deux paramètres — event et context — requis par les fonctions selon la convention du Framework Serverless.
Ensuite, ouvrez le fichier handler.py et supprimez son contenu et collez le code Python suivant pour définir le gestionnaire qui sera invoqué lorsque la fonction est déclenchée :
from functions.first_function import first_function
Le code ci-dessus expose la fonction que vous avez créée dans le fichier first_function.py. Nous avons importé la fonction et l'avons exposée au framework.
Comment définir la configuration Serverless
Pour commencer avec la configuration, ouvrez le fichier serverless.yaml et supprimez tout son contenu et collez le code YAML suivant pour définir le microservice que vous allez déployer :
service: serverless-lab
provider:
name: aws
runtime: python3.7
lambdaHashingVersion: 20201221
region: eu-west-1
timeout: 10 # Vous définissez un délai d'expiration de 10 secondes pour les fonctions
role: arn:aws:iam::155318317806:role/serverlessLabs # Entrez votre rôle Arn ici
memorySize: 512
functions:
first_function:
handler: handler.first_function
events:
- http:
path: first
method: get
Décomposons chaque section ligne par ligne :
service: serverless-lab
**service** spécifie le nom de votre service Serverless ou projet. Dans ce cas, il est nommé "serverless-lab", qui sera utilisé comme nom de service lors du déploiement sur AWS.
provider:
name: aws
runtime: python3.7
lambdaHashingVersion: 20201221
region: eu-west-1 # entrez votre région
profile: personalCaesarAcc
timeout: 10 # Vous définissez un délai d'expiration de 10 secondes pour les fonctions
role: arn:aws:iam::155318317806:role/serverlessLabs # Entrez votre rôle Arn ici
memorySize: 512
**provider** définit le fournisseur AWS pour votre service. Il spécifie divers paramètres de configuration pour les fonctions AWS Lambda et autres ressources AWS.
name: awsspécifie que vous utilisez AWS comme fournisseur de cloud.runtime: python3.7définit le runtime pour les fonctions AWS Lambda à Python 3.7.lambdaHashingVersion: 20201221spécifie la version de hachage de la fonction Lambda. Il s'agit d'un paramètre interne AWS.region: eu-west-1spécifie la région AWS où votre service sera déployé. Vous pouvez remplacer "eu-west-1" par la région AWS souhaitée.timeout: 10définit un délai d'exécution de 10 secondes pour les fonctions AWS Lambda. Cela signifie que chaque fonction doit terminer son exécution dans les 10 secondes.role: arn:aws:iam::155318317806:role/serverlessLabsspécifie l'ARN du rôle AWS IAM que vos fonctions Lambda assumeront. Ce rôle définit les permissions que vos fonctions ont au sein des services AWS. Vous pouvez remplacer cela par l'ARN de votre rôle IAM souhaité.
functions:
first_function:
handler: handler.first_function
events:
- http:
path: first
method: get
**functions** définit les fonctions AWS Lambda dans votre service.
first_functiondésigne le nom de votre fonction AWS Lambda.handler: handler.first_functionspécifie le point d'entrée pour cette fonction, qui esthandler.first_functiondans le modulehandler. Cela est généralement au format<nom_du_module>.<nom_de_la_fonction>.eventsspécifie les événements qui déclenchent la fonction.- httpindique que la fonction est déclenchée par un événement HTTP (API Gateway).path: firstspécifie le chemin du point de terminaison de l'API (/first) qui déclenche la fonction.method: getspécifie que cette fonction est déclenchée lorsqu'une requête HTTP GET est faite au chemin spécifié.
Comment déployer la fonction Python
Vous pouvez utiliser la commande suivante pour déployer le microservice sur AWS :
serverless deploy
Après un certain temps, le déploiement sera terminé et vous pourrez voir des informations comme le point de terminaison, hébergé sur API Gateway, pour déclencher la fonction que vous venez de déployer.

Le framework a déployé la fonction sur AWS Lambda et, parce que vous avez attaché un déclencheur HTTP à celle-ci. Il a déployé une API sur API Gateway pour permettre à la fonction d'être accessible.

Comment tester l'API
À partir du déploiement, vous avez une seule fonction nommée first_function, et un seul point de terminaison HTTP GET.
En utilisant le point de terminaison GET (le point de terminaison généré dans le terminal après le déploiement de la fonction) dans votre navigateur, vous pouvez appeler la fonction :

L'image ci-dessus montre la fonctionnalité créée dans la fonction déployée s'exécutant dans le navigateur.
Surveillance et journalisation
Le groupe de journaux est automatiquement enregistré sur AWS CloudWatch car il y a une instruction print définie dans la fonction. Entrez la commande suivante pour accéder aux journaux de la fonction :
serverless logs -f first_function
AWS CloudWatch est le service de journalisation natif AWS qui vous permet de surveiller et d'accéder aux journaux de vos applications. Vous pouvez trouver des groupes de journaux, et vous pouvez également appliquer des expressions de filtre sur les journaux pour récupérer ceux dont vous avez besoin.

Vous pouvez supprimer le microservice et les ressources que vous venez de déployer en utilisant la commande serverless remove.
Consultez mon dépôt GitHub pour voir le code complet.
Conclusion
Dans ce guide complet, nous avons exploré le monde puissant du calcul serverless et démontré comment exploiter ses capacités en utilisant le Framework Serverless et Amazon Web Services (AWS).
Vous avez entrepris un voyage depuis la configuration de votre environnement de développement jusqu'au déploiement d'une simple fonction Python en tant qu'API soutenue par AWS Lambda, tout en acquérant des connaissances sur la surveillance et la journalisation avec AWS CloudWatch.
Ce guide sert de point de départ pour votre voyage serverless. À mesure que vous deviendrez plus compétent avec le Framework Serverless et AWS, vous serez en mesure de construire et de déployer des applications serverless sophistiquées qui s'adaptent dynamiquement et répondent aux exigences des architectures modernes et natives du cloud.
Comme toujours, j'espère que vous avez apprécié l'article et appris quelque chose de nouveau. Si vous le souhaitez, vous pouvez également me suivre sur LinkedIn ou Twitter.