Pourquoi Go est le nouveau roi du Serverless (et point final) ?
\n\nQuand on parle d'architecture serverless, la plupart des développeurs pensent à JavaScript (Node.js) ou Python. C'est logique : ils sont simples, populaires, et des tonnes de tutoriels existent pour eux. Mais il y a un problème : le démarrage à froid.
\n\nImaginez : vous lancez une fonction Lambda en Python. La première requête après une période d'inactivité prend 3 à 5 secondes à être traitée. L'utilisateur attend. L'entreprise perd de l'argent. Imaginez maintenant la même fonction en Go : 100 à 200 millisecondes. Vous sentez la différence ?
\n\nGo (Golang) est un langage créé chez Google pour résoudre des problèmes où la performance et la simplicité sont cruciales. Dans le monde serverless, il offre trois avantages clés :
\n- \n
- Démarrage à froid instantané — le binaire compilé se lance en quelques millisecondes. \n
- Faible consommation mémoire — vous payez moins, vous obtenez plus. \n
- Un seul binaire — pas de dépendances, vous le chargez et l'oubliez. \n
Dans cet article, nous allons voir comment écrire des fonctions serverless en Go pour AWS Lambda, examiner des exemples de code réels et les comparer aux alternatives. Si vous en avez assez d'attendre que votre fonction Python "chauffe" — bienvenue.
\n\nComment configurer AWS Lambda pour Go : guide étape par étape
\n\nAvant d'écrire du code, commençons par les outils nécessaires. Pour travailler avec Go sur AWS Lambda, vous aurez besoin de :
\n- \n
- Go installé (version 1.21+). \n
- L'utilitaire
aws-cli(ou la console AWS). \n - Une compréhension de base de ce qu'est un Handler. \n
Étape 1. Créer le projet
\nCréez un nouveau répertoire et initialisez le module :
\nmkdir go-lambda-example\ncd go-lambda-example\ngo mod init example.com/lambda\n\nÉtape 2. Écrire la première fonction
\nCréez un fichier main.go. Voici un exemple minimal de fonction serverless en Go qui traite du JSON et renvoie une réponse :
package main\n\nimport (\n "context"\n "fmt"\n\n "github.com/aws/aws-lambda-go/lambda"\n)\n\n// MyEvent — structure de l'événement entrant\ntype MyEvent struct {\n Name string `json:"name"`\n}\n\n// MyResponse — structure de la réponse\ntype MyResponse struct {\n Message string `json:"message"`\n Status int `json:"status"`\n}\n\n// HandleRequest — gestionnaire principal de la Lambda\nfunc HandleRequest(ctx context.Context, event MyEvent) (MyResponse, error) {\n if event.Name == "" {\n return MyResponse{Message: "Bonjour, anonyme !", Status: 200}, nil\n }\n return MyResponse{\n Message: fmt.Sprintf("Bonjour, %s ! Bienvenue dans le serverless avec Go.", event.Name),\n Status: 200,\n }, nil\n}\n\nfunc main() {\n lambda.Start(HandleRequest)\n}\n\nImportant : La fonction doit accepter context.Context et retourner (T, error). C'est le standard pour Go Lambda.
Étape 3. Compiler pour Linux
\nAWS Lambda fonctionne sous Linux, donc le binaire doit être compilé pour ce système d'exploitation :
\nGOOS=linux GOARCH=amd64 go build -o bootstrap main.go\nNotez que le fichier de sortie doit s'appeler bootstrap — c'est une exigence d'AWS Lambda pour Go.
Étape 4. Empaqueter et charger
\nCompressez le binaire en ZIP :
\nzip function.zip bootstrap\nChargez-le maintenant dans AWS Lambda via la console ou le CLI. Terminé ! Votre première fonction serverless en Go fonctionne.
\n\nExemple avancé : travailler avec S3 et DynamoDB
\nMaintenant que les bases sont acquises, écrivons quelque chose d'utile. Supposons que nous devions traiter le téléchargement de fichiers dans S3 et enregistrer les métadonnées dans DynamoDB. C'est un scénario classique pour le serverless.
\n\nInstallez les SDK nécessaires :
\ngo get github.com/aws/aws-lambda-go/events\ngo get github.com/aws/aws-sdk-go-v2/service/s3\ngo get github.com/aws/aws-sdk-go-v2/service/dynamodb\n\