Warum Go der neue König von Serverless ist (und Punkt)?
\n\nWenn es um Serverless-Architektur geht, denken die meisten Entwickler an JavaScript (Node.js) oder Python. Das ist logisch: Sie sind einfach, beliebt, und es gibt Unmengen von Tutorials für sie. Aber es gibt ein Problem: Cold Start.
\n\nStellen Sie sich vor: Sie starten eine Lambda-Funktion in Python. Die erste Anfrage nach einer Ruhephase wird in 3-5 Sekunden verarbeitet. Der Benutzer wartet. Das Geschäft verliert Geld. Stellen Sie sich nun dieselbe Funktion in Go vor: 100-200 Millisekunden. Spüren Sie den Unterschied?
\n\nGo (Golang) ist eine Sprache, die bei Google entwickelt wurde, um Probleme zu lösen, bei denen Leistung und Einfachheit wichtig sind. In der Serverless-Welt bietet es drei entscheidende Vorteile:
\n- \n
- Sofortiger Cold Start — eine kompilierte Binärdatei startet in Millisekunden. \n
- Geringer Speicherverbrauch — Sie zahlen weniger und bekommen mehr. \n
- Eine einzige Binärdatei — keine Abhängigkeiten, einfach hochladen und vergessen. \n
In diesem Artikel werden wir uns ansehen, wie man Serverless-Funktionen in Go für AWS Lambda schreibt, reale Codebeispiele betrachten und mit Alternativen vergleichen. Wenn Sie es leid sind, darauf zu warten, dass eine Python-Funktion "warm wird" — willkommen.
\n\nWie man AWS Lambda für Go einrichtet: Eine Schritt-für-Schritt-Anleitung
\n\nBevor wir Code schreiben, lassen Sie uns die Werkzeuge klären. Für die Arbeit mit Go auf AWS Lambda benötigen Sie:
\n- \n
- Installiertes Go (Version 1.21+). \n
- Das Dienstprogramm
aws-cli(oder die AWS-Konsole). \n - Ein grundlegendes Verständnis davon, was ein Handler ist. \n
Schritt 1. Projekt erstellen
\nErstellen Sie ein neues Verzeichnis und initialisieren Sie das Modul:
\nmkdir go-lambda-example\ncd go-lambda-example\ngo mod init example.com/lambda\n\nSchritt 2. Erste Funktion schreiben
\nErstellen Sie eine Datei main.go. Hier ist ein minimales Beispiel einer Serverless-Funktion in Go, die JSON verarbeitet und eine Antwort zurückgibt:
package main\n\nimport (\n "context"\n "fmt"\n\n "github.com/aws/aws-lambda-go/lambda"\n)\n\n// MyEvent — Struktur des eingehenden Ereignisses\ntype MyEvent struct {\n Name string `json:"name"`\n}\n\n// MyResponse — Struktur der Antwort\ntype MyResponse struct {\n Message string `json:"message"`\n Status int `json:"status"`\n}\n\n// HandleRequest — der Haupt-Handler der Lambda\nfunc HandleRequest(ctx context.Context, event MyEvent) (MyResponse, error) {\n if event.Name == "" {\n return MyResponse{Message: "Hallo, Unbekannter!", Status: 200}, nil\n }\n return MyResponse{\n Message: fmt.Sprintf("Hallo, %s! Willkommen bei Serverless mit Go.", event.Name),\n Status: 200,\n }, nil\n}\n\nfunc main() {\n lambda.Start(HandleRequest)\n}\n\nWichtig: Die Funktion muss context.Context akzeptieren und (T, error) zurückgeben. Das ist der Standard für Go Lambda.
Schritt 3. Für Linux kompilieren
\nAWS Lambda läuft auf Linux, daher muss die Binärdatei für dieses Betriebssystem erstellt werden:
\nGOOS=linux GOARCH=amd64 go build -o bootstrap main.go\nBeachten Sie: Die Ausgabedatei muss bootstrap heißen — das ist eine Anforderung von AWS Lambda für Go.
Schritt 4. Packen und Hochladen
\nPacken Sie die Binärdatei in ein ZIP:
\nzip function.zip bootstrap\nLaden Sie es nun über die Konsole oder CLI in AWS Lambda hoch. Fertig! Ihre erste Serverless-Funktion in Go läuft.
\n\nFortgeschrittenes Beispiel: Arbeiten mit S3 und DynamoDB
\nNachdem die Grundlagen gemeistert sind, schreiben wir etwas Nützliches. Angenommen, wir müssen Datei-Uploads in S3 verarbeiten und Metadaten in DynamoDB speichern. Dies ist ein klassisches Szenario für Serverless.
\n\nInstallieren Sie die erforderlichen SDKs:
\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\