Fonctions Serverless en Go : AWS Lambda de A à Z

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

Introduction aux fonctions Serverless en Go avec AWS Lambda

\n

L'architecture serverless est devenue la norme pour créer des applications évolutives et économiques. AWS Lambda est l'un des leaders dans ce domaine, et Go (Golang) est le langage idéal pour écrire des fonctions serverless grâce à ses performances, son démarrage rapide et la petite taille de son fichier binaire. Dans cet article, nous allons parcourir le cycle de travail complet : de la création d'une fonction simple au déploiement et au monitoring.

\n

Pourquoi Go ? Contrairement à Node.js ou Python, Go se compile en un fichier binaire natif, ce qui réduit le démarrage à froid (cold start) à quelques dizaines de millisecondes. C'est crucial pour les systèmes à forte charge.

\n\n

Partie principale

\n\n

1. Création et structure d'une fonction Lambda en Go

\n

Toute fonction Lambda en Go commence par l'importation du package github.com/aws/aws-lambda-go/lambda. Voici un exemple minimal :

\n\n
package main\n\nimport (\n    "github.com/aws/aws-lambda-go/lambda"\n)\n\ntype MyEvent struct {\n    Name string `json:"name"`\n}\n\ntype MyResponse struct {\n    Message string `json:"message"`\n}\n\nfunc HandleRequest(event MyEvent) (MyResponse, error) {\n    return MyResponse{Message: "Bonjour, " + event.Name + " !"}, nil\n}\n\nfunc main() {\n    lambda.Start(HandleRequest)\n}
\n\n

Points essentiels :

\n
    \n
  • Handler est la fonction appelée par AWS Lambda. Elle peut accepter et retourner tout type de données (structures, chaînes, interfaces).
  • \n
  • Contexte — premier argument optionnel : func HandleRequest(ctx context.Context, event MyEvent) (MyResponse, error). Permet d'annuler l'exécution en cas de timeout.
  • \n
  • L'erreur (error) signale à Lambda un échec d'exécution.
  • \n
\n\n

2. Gestion des événements de différents services AWS

\n

Lambda est souvent utilisée comme déclencheur pour les événements S3, DynamoDB, SQS et API Gateway. Go prend en charge tous les types d'événements via le package github.com/aws/aws-lambda-go/events.

\n\n

Exemple pour API Gateway (requête HTTP) :

\n
package main\n\nimport (\n    "github.com/aws/aws-lambda-go/lambda"\n    "github.com/aws/aws-lambda-go/events"\n)\n\nfunc handler(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {\n    return events.APIGatewayProxyResponse{\n        Body:       "Hello, World!",\n        StatusCode: 200,\n        Headers:    map[string]string{"Content-Type": "text/plain"},\n    }, nil\n}\n\nfunc main() {\n    lambda.Start(handler)\n}
\n\n

Exemple pour S3 (nouvel objet dans un bucket) :

\n
package main\n\nimport (\n    "context"\n    "fmt"\n    "github.com/aws/aws-lambda-go/lambda"\n    "github.com/aws/aws-lambda-go/events"\n)\n\nfunc handler(ctx context.Context, s3Event events.S3Event) error {\n    for _, record := range s3Event.Records {\n        bucket := record.S3.Bucket.Name\n        key := record.S3.Object.Key\n        fmt.Printf("Nouveau fichier : %s dans le bucket %s\\n", key, bucket)\n    }\n    return nil\n}\n\nfunc main() {\n    lambda.Start(handler)\n}
\n
    \n
  • Utilisez events.S3Event, events.SNSEvent, events.DynamoDBEvent et autres.
  • \n
  • Pour les événements personnalisés (ex : depuis CloudWatch), utilisez json.Unmarshal.
  • \n
\n\n

3. Compilation, déploiement et meilleures pratiques

\n

Go se compile pour Linux (architecture x86_64 ou arm64). Compilez le fichier binaire pour Lambda :

\n
# Pour x86_64\nGOOS=linux GOARCH=amd64 go build -o bootstrap main.go\n\n# Pour ARM (Graviton) — moins cher et plus rapide\nGOOS=linux GOARCH=arm64 go build -o bootstrap main.go
\n\n

Ensuite, compressez en ZIP et téléchargez via AWS CLI ou la console :

\n
zip function.zip bootstrap\naws lambda create-function \\\n    --function-name my-go-function \\\n    --runtime provided.al2023 \\\n    --role arn:aws:iam::XXXXXXXXXXX                

Blogs

Book Recommendations