Fonctions Serverless en Go : AWS Lambda — Guide complet
L'architecture Serverless continue de gagner en popularité parmi les développeurs grâce à sa scalabilité, la réduction des coûts opérationnels et l'absence de besoin de gérer des serveurs. AWS Lambda est l'un des leaders dans ce domaine. Et si on combinait la puissance du serverless avec les performances et la simplicité de Go (Golang) ? Dans cet article, nous allons voir comment créer, configurer et déployer des fonctions serverless en Go pour AWS Lambda. Vous découvrirez les avantages de cette approche, écrirez votre première fonction et obtiendrez des conseils pratiques pour l'optimisation.
Pourquoi Go (Golang) est-il idéal pour AWS Lambda ?
Le choix du langage de programmation pour les fonctions serverless est crucial. Go (Golang) possède plusieurs avantages uniques qui en font l'un des meilleurs candidats pour travailler avec AWS Lambda :
- Démarrage à froid rapide : Contrairement aux langages interprétés (Python, Node.js), Go est compilé en un fichier binaire natif. Le temps de démarrage (cold start) se mesure en millisecondes, ce qui est critique pour les API et les microservices.
- Faible consommation mémoire : Les applications Go sont légères et utilisent efficacement la mémoire, ce qui impacte directement le coût d'exécution des fonctions (vous payez pour la mémoire allouée).
- Simplicité de déploiement : Vous compilez un seul fichier binaire, vous le chargez dans AWS Lambda, et il fonctionne sans aucune dépendance externe (sauf la bibliothèque standard). Pas d'environnements virtuels ni de node_modules.
- Haute performance : Go est un langage compilé avec un support intégré de la concurrence (goroutines). Cela permet de traiter des milliers de requêtes au sein d'une seule fonction Lambda sans frais généraux significatifs.
- Excellente intégration avec AWS SDK : Le SDK AWS officiel pour Go (v2) fournit des clients pratiques et typés pour tous les services AWS.
Création de votre première fonction Serverless en Go pour AWS Lambda
Écrivons une fonction simple qui traite une requête HTTP via AWS Lambda Function URL ou API Gateway. Pour cela, nous aurons besoin du package github.com/aws/aws-lambda-go.
Étape 1 : Initialisation du projet et installation des dépendances
mkdir my-lambda-gocd my-lambda-gogo mod init my-lambda-gogo get github.com/aws/aws-lambda-go/lambdago get github.com/aws/aws-lambda-go/eventsÉtape 2 : Code de la fonction (main.go)
Cette fonction va recevoir une requête JSON avec le nom d'un utilisateur et retourner un message de bienvenue.
package main
import (\t"context"\t"encoding/json"\t"fmt"\t"log"
\t"github.com/aws/aws-lambda-go/events"\t"github.com/aws/aws-lambda-go/lambda")
// Request structure pour la requête entrantetype Request struct {\tName string `json:"name"`}
// Response structure pour la réponsetype Response struct {\tMessage string `json:"message"`}
func handleRequest(ctx context.Context, request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {\tvar req Request
\t// Parse le corps de la requête\tif err := json.Unmarshal([]byte(request.Body), &req); err != nil {\t\tlog.Printf("Error parsing request: %v", err)\t\treturn events.APIGatewayProxyResponse{\t\t\tStatusCode: 400,\t\t\tBody: `{"error":"Invalid JSON"}`,\t\t\tHeaders: map[string]string{"Content-Type": "application/json"},\t\t}, nil\t}
\t// Forme la réponse\tmessage := fmt.Sprintf("Hello, %s! Welcome to Serverless Go.", req.Name)\tresp := Response{Message: message}
\tjsonResp, _ := json.Marshal(resp)
\treturn events.APIGatewayProxyResponse{\t\tStatusCode: 200,\t\tBody: string(jsonResp),\t\tHeaders: map[string]string{"Content-Type": "application/json"},\t}, nil}
func mai