Go und Serverless: Wie man AWS Lambda-Funktionen schreibt, um die Python-Entwickler neidisch zu machen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Warum Go der neue König von Serverless ist (und Punkt)?

\n\n

Wenn 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\n

Stellen 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\n

Go (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
\n\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\n

Wie man AWS Lambda für Go einrichtet: Eine Schritt-für-Schritt-Anleitung

\n\n

Bevor 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
\n\n

Schritt 1. Projekt erstellen

\n

Erstellen Sie ein neues Verzeichnis und initialisieren Sie das Modul:

\n
mkdir go-lambda-example\ncd go-lambda-example\ngo mod init example.com/lambda
\n\n

Schritt 2. Erste Funktion schreiben

\n

Erstellen Sie eine Datei main.go. Hier ist ein minimales Beispiel einer Serverless-Funktion in Go, die JSON verarbeitet und eine Antwort zurückgibt:

\n
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\n

Wichtig: Die Funktion muss context.Context akzeptieren und (T, error) zurückgeben. Das ist der Standard für Go Lambda.

\n\n

Schritt 3. Für Linux kompilieren

\n

AWS Lambda läuft auf Linux, daher muss die Binärdatei für dieses Betriebssystem erstellt werden:

\n
GOOS=linux GOARCH=amd64 go build -o bootstrap main.go
\n

Beachten Sie: Die Ausgabedatei muss bootstrap heißen — das ist eine Anforderung von AWS Lambda für Go.

\n\n

Schritt 4. Packen und Hochladen

\n

Packen Sie die Binärdatei in ein ZIP:

\n
zip function.zip bootstrap
\n

Laden Sie es nun über die Konsole oder CLI in AWS Lambda hoch. Fertig! Ihre erste Serverless-Funktion in Go läuft.

\n\n

Fortgeschrittenes Beispiel: Arbeiten mit S3 und DynamoDB

\n

Nachdem 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\n

Installieren Sie die erforderlichen SDKs:

\n
go 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\

Blogs

Buchempfehlungen