Blog

AWS Lambda - Benutzerdefinierte Laufzeit

Dennis Vriend

Aktualisiert Oktober 21, 2025
3 Minuten

Auf der re:Invent 2018 hat AWS die Lambda Runtime API und Lambda Layers angekündigt, zwei neue AWS Lambda-Funktionen, die es Entwicklern ermöglichen, benutzerdefinierte Laufzeiten zu erstellen und gemeinsamen Code zwischen Funktionen zu teilen und zu verwalten. Mit der Lambda Runtime API können Sie jede beliebige Laufzeit ausführen. Sie können sogar Bash als Laufzeit verwenden, um Ihre AWS API Gateway-Funktionen zu betreiben! Lambda-Layer sind eine neue Art von Artefakten, die beliebigen Code und Daten enthalten können und dazu dienen, gemeinsame Abhängigkeiten für Ihre Lambda-Funktionen bereitzustellen. Layers können Bootstrap-Laufzeiten und Laufzeitabhängigkeiten bereitstellen. In diesem Blog sehen wir uns an, wie Sie Bash verwenden, um ein API Gateway Lambda zu betreiben.

Neue Laufzeiteinstellung

Der Ressourcentyp 'AWS::Lambda::Function' hat einen neuen Wert für 'Runtime', der 'provided' ist. Das Feld 'Handler' muss auf einen Dateinamen und eine Funktion innerhalb der Datei verweisen, die ausgeführt werden soll.

  CustomLambda:
    Type: AWS::Lambda::Function
    Properties:
      Handler: function.handler
      Runtime: provided
      Role: !GetAtt 'LambdaBasicExecutionRole.Arn'
      MemorySize: 128
      Timeout: 30
      Code:
        S3Bucket: !Ref S3Bucket
        S3Key: !Ref S3Key
        S3ObjectVersion: !Ref S3Version

Bootstrap

Wenn AWS serverlose Berechnungen plant, wird eine ausführbare Datei mit dem Namen bootstrap ausgeführt. Wie Bootstrap implementiert wird, ist frei wählbar. Es könnte eine statische Binärdatei sein, die mit Golang oder Rust erstellt wurde. Es kann auch ein ausführbares Bash-Skript sein. Der Zweck von bootstrap besteht darin, eine 'Funktion' zu verwalten, die von bootstrap aufgerufen wird. Wie Sie die Funktion aufrufen möchten, bleibt Ihnen überlassen. Die Funktion könnte Teil von 'Bootstrap' sein, d.h. Sie könnten eine einzelne Anwendung in Go erstellen, oder Sie könnten einen generischen Handler erstellen, der Funktionen aufruft, die in der CloudFormation-Konfiguration, d.h. im Feld 'Handler', angegeben wurden.Bootstrap ist für die Ausführung der Lambda-Funktion verantwortlich. Das bedeutet, dass es mit der 'AWS Lambda Runtime API' kommunizieren sollte, um das Ereignis zu erhalten, das bereit ist, von der Lambda-Funktion verarbeitet zu werden. Boostrap ruft dann die Lambda-Funktion mit dem Ereignis als Argument auf. Nachdem die Funktion abgeschlossen ist, sollte die Antwort in Form eines Resposne mit einer REQUEST_ID an die 'AWS Lambda Runtime API' zurückgegeben werden. Die benutzerdefinierte Lambda-Laufzeit hat noch mehr zu bieten und für weitere Informationen sollten Sie die Dokumentation zur benutzerdefinierten Lambda-Laufzeit lesen. In unserem Beispiel ist der Handler in Bash implementiert:

#!/bin/sh

set -euo pipefail

# Initialization - load function handler
source $LAMBDA_TASK_ROOT/"$(echo $_HANDLER | cut -d. -f1).sh"

# Processing
while true
do
  HEADERS="$(mktemp)"
  # Get an event
  EVENT_DATA=$(curl -sS -LD "$HEADERS" -X GET "http://${AWS_LAMBDA_RUNTIME_API}/2018-06-01/runtime/invocation/next")
  REQUEST_ID=$(grep -Fi Lambda-Runtime-Aws-Request-Id "$HEADERS" | tr -d '[:space:]' | cut -d: -f2)

  # Execute the handler function from the script
  RESPONSE=$($(echo "$_HANDLER" | cut -d. -f2) "$EVENT_DATA")

  # Send the response
  curl -X POST "http://${AWS_LAMBDA_RUNTIME_API}/2018-06-01/runtime/invocation/$REQUEST_ID/response"  -d "$RESPONSE"
done

Funktion

Die Funktion ist ein einfaches Bash-Skript, das 'Hello World' an API Gateway zurückgibt:

function handler () {
  EVENT_DATA=$1
  echo "$EVENT_DATA" 1>&2;
  RESPONSE="{"statusCode": 200, "body": "Hello World"}"
  echo $RESPONSE
}

Beispiel

Wir haben ein Beispielprojekt vorbereitet, damit Sie die Arbeit mit benutzerdefinierten Laufzeiten ausprobieren können. Zum Ausführen des Beispiels geben Sie ein. So rufen Sie den Bash-basierten Lambda-Typ auf . So entfernen Sie den Beispieltyp make delete.

Fazit

Die benutzerdefinierte Laufzeit von AWS Lambda ermöglicht es Ihnen, Ihren eigenen Bootstrap-Prozess zu definieren. Dadurch ist es möglich, eine hochspezialisierte Anwendung bereitzustellen, wenn Lambda aufgerufen wird. Wir haben unsere eigene Bash-basierte Bootstrap-Anwendung erstellt. Wir haben ein Lambda mit CloudFormation konfiguriert, das eine bereitgestellte Laufzeit definiert, und wir haben einen Bash-basierten Handler erstellt, der API Gateway Proxy-Ereignisse verarbeitet. Wie kann man nun ein Lambda in ein Lambda einfügen?

Verfasst von

Dennis Vriend

Contact

Let’s discuss how we can support your journey.