Installation
Loch Lambda Runtime est distribué sous forme de binaire Linux statique sur GitHub Releases. Il n'y a pas d'image Docker : vous montez le binaire dans l'image de base de votre fonction (les images de base AWS Lambda™, par exemple).
Fichiers d'une release
| Fichier | Contenu |
|---|---|
loch-lambda-runtime-linux-amd64 | Binaire pour x86-64 |
loch-lambda-runtime-linux-arm64 | Binaire pour ARM64 |
loch-lambda-runtime-linux-<arch>.cdx.json | SBOM CycloneDX de chaque binaire |
SHA256SUMS | Sommes de contrôle des quatre fichiers ci-dessus |
SHA256SUMS.cosign.bundle | Signature cosign keyless de SHA256SUMS |
Télécharger et vérifier
Il vous faut cosign et, pour la vérification de provenance, la CLI GitHub.
-
Téléchargez le binaire de votre architecture, les sommes de contrôle et la signature :
VERSION=v1.0.1ARCH=amd64 # ou arm64BASE=https://github.com/loch-sh/lambda-runtime/releases/download/$VERSIONcurl -fLO "$BASE/loch-lambda-runtime-linux-$ARCH"curl -fLO "$BASE/SHA256SUMS"curl -fLO "$BASE/SHA256SUMS.cosign.bundle" -
Vérifiez la signature de
SHA256SUMS. L'identité la lie au workflow de release et au tag :cosign verify-blob SHA256SUMS --bundle SHA256SUMS.cosign.bundle \--certificate-identity "https://github.com/loch-sh/lambda-runtime/.github/workflows/ci.yml@refs/tags/$VERSION" \--certificate-oidc-issuer https://token.actions.githubusercontent.com -
Vérifiez la somme de contrôle du binaire (
--ignore-missing: vous n'avez pas téléchargé tous les fichiers) :sha256sum -c --ignore-missing SHA256SUMS# macOS : shasum -a 256 -c --ignore-missing SHA256SUMS -
Facultatif : vérifiez la provenance du build, qui lie le binaire au commit et au tag qui l'ont produit :
gh attestation verify "loch-lambda-runtime-linux-$ARCH" --repo loch-sh/lambda-runtime -
Rendez-le exécutable. Il tourne sous un utilisateur non root dans le conteneur : il doit être lisible et exécutable par tous :
chmod 0755 "loch-lambda-runtime-linux-$ARCH"
Démarrage rapide
Lancez une fonction Node.js avec l'image de base publiée par AWS, le binaire monté comme point d'entrée. Docker choisit l'image adaptée à votre machine ; ARCH doit lui correspondre.
mkdir -p fn && echo 'exports.handler = async (event) => ({ hello: event.name ?? "world" });' > fn/index.js
ARCH=$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/')
docker run --rm -p 127.0.0.1:8080:8080 \
-v "$PWD/loch-lambda-runtime-linux-$ARCH:/loch/lambda-runtime:ro" \
-v "$PWD/fn:/var/task:ro" \
-e LOCH_RUNTIME_AUTH=off \
--entrypoint /loch/lambda-runtime \
public.ecr.aws/lambda/nodejs:22 index.handler
index.handler est le handler, comme sur AWS : l'export handler de index.js. Invoquez-le depuis un autre terminal :
curl localhost:8080/2015-03-31/functions/function/invocations -d '{"name":"you"}'
# {"hello":"you"}
Ou avec l'AWS CLI. Authentification désactivée, les identifiants ne sont pas vérifiés, mais la CLI en a besoin pour signer :
AWS_ACCESS_KEY_ID=x AWS_SECRET_ACCESS_KEY=x AWS_DEFAULT_REGION=us-east-1 \
aws lambda invoke --endpoint-url http://localhost:8080 --function-name function \
--payload '{"name":"cli"}' --cli-binary-format raw-in-base64-out /dev/stdout
LOCH_RUNTIME_AUTH=off sert uniquement à cet essai local. Par défaut, le runtime refuse de démarrer sans identifiant. Voir Exécuter en production.
Bon à savoir
functionest le nom de fonction par défaut. DéfinissezAWS_LAMBDA_FUNCTION_NAMEpour en utiliser un autre dans l'URL.- Le binaire ne dépend ni de la libc ni des outils de l'image : il fonctionne sur toute image de base Linux.
- Pour ajouter le binaire à une image au lieu de le monter, voir Runtimes et images personnalisés.
« AWS » et « AWS Lambda » sont des marques d'Amazon.com, Inc. ou de ses sociétés affiliées. Ce projet n'est ni affilié à Amazon ni approuvé par Amazon. Il implémente les API Runtime et Invoke d'AWS Lambda, documentées publiquement, et ne contient aucun code de l'AWS Lambda Runtime Interface Emulator.