Fonctions Serverless en Go : AWS Lambda de A à Z — Guide complet

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Fonctions Serverless en Go : AWS Lambda de A à Z



L'architecture serverless est devenue le standard de facto pour créer des applications évolutives et économiques dans le cloud. AWS Lambda est l'un des services les plus populaires pour exécuter du code sans gérer de serveurs. Dans cet article, nous allons voir comment créer, configurer et déployer des fonctions serverless en Go (Golang) sur AWS Lambda, des bases aux techniques avancées.



Pourquoi Go pour AWS Lambda ?



Go est le langage idéal pour les fonctions serverless. Il se compile en un seul fichier binaire, a un temps de démarrage à froid minimal (souvent moins de 100 ms) et une faible consommation mémoire. Cela en fait l'une des options les plus rapides et les moins chères pour Lambda.



  • Démarrage rapide : Le binaire compilé se lance instantanément.
  • Faible coût : Une consommation minimale de ressources réduit les factures cloud.
  • Simplicité de déploiement : Un seul fichier, aucune dépendance côté serveur.
  • Excellente intégration : Prise en charge native du AWS SDK pour Go.


Configuration de l'environnement et premier Handler



Avant d'écrire du code, assurez-vous d'avoir installé :

  • Go version 1.19+
  • L'utilitaire AWS CLI (configuré avec des clés d'accès)
  • Make ou tout système de build (optionnel)


Créez un nouveau module et installez le package officiel pour Lambda :



mkdir my-lambda-functioncd my-lambda-functiongo mod init my-lambda-functiongo get github.com/aws/aws-lambda-go/lambda


Écrivons maintenant une fonction très simple qui retourne un message de bienvenue :



package main

import ( "context" "github.com/aws/aws-lambda-go/lambda")

type MyEvent struct { Name string `json:"name"`}

type MyResponse struct { Message string `json:"message"`}

func HandleRequest(ctx context.Context, event MyEvent) (MyResponse, error) { if event.Name == "" { event.Name = "Invité" } return MyResponse{Message: "Bonjour, " + event.Name + " !"}, nil}

func main() { lambda.Start(HandleRequest)}


Ce code accepte un JSON avec le champ name et retourne un message de bienvenue personnalisé. Notez que la fonction doit être exportée (commencer par une majuscule) et que sa signature doit strictement correspondre aux attentes du runtime.



Compilation et déploiement sur AWS Lambda



Pour un binaire compatible Linux (celui attendu par Lambda), utilisez la compilation croisée :



GOOS=linux GOARCH=amd64 go build -o bootstrap main.gozip function.zip bootstrap


Le nom du fichier de sortie doit obligatoirement être bootstrap — c'est une exigence du runtime Go sur AWS Lambda.



Créez maintenant la fonction via AWS CLI :



aws lambda create-function \    --function-name my-go-function \    --runtime provided.al2023 \    --role arn:aws:iam::123456789012:role/lambda-execution-role \    --handler bootstrap \    --zip-file fileb://function.zip


Notez le --runtime provided.al2023 — c'est le runtime spécial pour Go (basé sur Amazon Linux 2023). Si vous avez une version plus ancienne, utilisez provided.al2.



Après la création, testez la fonction :



aws lambda invoke --function-name my-go-function \    --payload '{"name": "Monde"}' output.jsoncat output.json


Vous devriez voir : {"message":"Bonjour, Monde !"}



Travailler avec les événements AWS (S3, DynamoDB, API Gateway)



La véritable puissance de Lambda se révèle lors de l'intégration avec d'autres services AWS. Voici un exemple de gestionnaire pour les événements S3 :



package main

import ( "context" "fmt" "github.com/aws/aws-lambda-go/events" "github.com/aws/aws-lambda-go/lambda")

func HandleS3Event(ctx context.Context, s3Event even

Blogs

Book Recommendations