AWS Lambda ist ein serverloser Compute-Dienst, mit dem Sie Code ausführen können, ohne Server bereitstellen oder verwalten zu müssen.
In dieser Anleitung stellen wir einen Bun-HTTP-Server mit einer Dockerfile auf AWS Lambda bereit.
NOTE
Bevor Sie fortfahren, stellen Sie sicher, dass Sie Folgendes haben:Eine neue Dockerfile erstellen
Stellen Sie sicher, dass Sie sich im Verzeichnis mit Ihrem Projekt befinden, und erstellen Sie dann eine neue Dockerfile im Stammverzeichnis Ihres Projekts. Diese Datei enthält die Anweisungen zum Initialisieren des Containers, zum Kopieren Ihrer lokalen Projektdateien, zum Installieren von Abhängigkeiten und zum Starten der Anwendung.
# Verwenden Sie das offizielle AWS Lambda-Adapter-Image zur Handhabung der Lambda-Laufzeitumgebung
FROM public.ecr.aws/awsguru/aws-lambda-adapter:0.9.0 AS aws-lambda-adapter
# Verwenden Sie das offizielle Bun-Image zum Ausführen der Anwendung
FROM oven/bun:debian AS bun_latest
# Kopieren Sie den Lambda-Adapter in den Container
COPY --from=aws-lambda-adapter /lambda-adapter /opt/extensions/lambda-adapter
# Legen Sie den Port auf 8080 fest. Dies ist für den AWS Lambda-Adapter erforderlich.
ENV PORT=8080
# Setzen Sie das Arbeitsverzeichnis auf `/var/task`. Dies ist das Standard-Arbeitsverzeichnis für Lambda.
WORKDIR "/var/task"
# Kopieren Sie die package.json und bun.lock in den Container
COPY package.json bun.lock ./
# Installieren Sie die Abhängigkeiten
RUN bun install --production --frozen-lockfile
# Kopieren Sie den Rest der Anwendung in den Container
COPY . /var/task
# Führen Sie die Anwendung aus.
CMD ["bun", "index.ts"]NOTE
Stellen Sie sicher, dass der Startbefehl dem Einstiegspunkt Ihrer Anwendung entspricht. Dies kann auch `CMD ["bun", "run", "start"]` sein, wenn Sie ein Start-Skript in Ihrer `package.json` haben.Dieses Image installiert Abhängigkeiten und führt Ihre App mit Bun in einem Container aus. Wenn Ihre App keine Abhängigkeiten hat, können Sie die Zeile RUN bun install --production --frozen-lockfile weglassen.
Erstellen Sie eine neue .dockerignore-Datei im Stammverzeichnis Ihres Projekts. Diese Datei enthält die Dateien und Verzeichnisse, die vom Container-Image ausgeschlossen werden sollten, wie z.B. node_modules. Dies macht Ihre Builds schneller und kleiner:
node_modules
Dockerfile*
.dockerignore
.git
.gitignore
README.md
LICENSE
.vscode
.env
# Alle anderen Dateien oder Verzeichnisse, die Sie ausschließen möchtenDas Docker-Image erstellen
Stellen Sie sicher, dass Sie sich im Verzeichnis mit Ihrer Dockerfile befinden, und erstellen Sie dann das Docker-Image. In diesem Fall nennen wir das Image bun-lambda-demo und taggen es als latest.
# cd /path/to/your/app
docker build --provenance=false --platform linux/amd64 -t bun-lambda-demo:latest .Ein ECR-Repository erstellen
Um das Image zu AWS Lambda zu pushen, müssen wir zuerst ein ECR-Repository erstellen, in das wir das Image pushen können.
Mit dem folgenden Befehl:
- Erstellen wir ein ECR-Repository namens
bun-lambda-demoin der Regionus-east-1 - Holen wir die Repository-URI und exportieren die Repository-URI als Umgebungsvariable. Dies ist optional, erleichtert aber die nächsten Schritte.
export ECR_URI=$(aws ecr create-repository --repository-name bun-lambda-demo --region us-east-1 --query 'repository.repositoryUri' --output text)
echo $ECR_URI[id].dkr.ecr.us-east-1.amazonaws.com/bun-lambda-demoNOTE
Wenn Sie IAM Identity Center (SSO) verwenden oder AWS CLI mit Profilen konfiguriert haben, müssen Sie das `--profile`-Flag zu Ihren AWS CLI-Befehlen hinzufügen.Wenn Ihr Profil beispielsweise my-sso-app heißt, verwenden Sie --profile my-sso-app. Überprüfen Sie Ihre AWS CLI-Konfiguration mit aws configure list-profiles, um verfügbare Profile anzuzeigen.
export ECR_URI=$(aws ecr create-repository --repository-name bun-lambda-demo --region us-east-1 --profile my-sso-app --query 'repository.repositoryUri' --output text)
echo $ECR_URIMit dem ECR-Repository authentifizieren
Melden Sie sich beim ECR-Repository an:
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin $ECR_URILogin SucceededNOTE
Wenn Sie ein Profil verwenden, nutzen Sie das `--profile`-Flag:aws ecr get-login-password --region us-east-1 --profile my-sso-app | docker login --username AWS --password-stdin $ECR_URIDas Docker-Image taggen und in das ECR-Repository pushen
Stellen Sie sicher, dass Sie sich im Verzeichnis mit Ihrer Dockerfile befinden, und taggen Sie dann das Docker-Image mit der ECR-Repository-URI.
docker tag bun-lambda-demo:latest ${ECR_URI}:latestPushen Sie dann das Image in das ECR-Repository.
docker push ${ECR_URI}:latestEine AWS Lambda-Funktion erstellen
Gehen Sie zu AWS Console > Lambda > Funktion erstellen > Wählen Sie Container-Image

Geben Sie der Funktion einen Namen, z.B. my-bun-function.
Das Container-Image auswählen
Gehen Sie dann zum Abschnitt Container-Image-URI, klicken Sie auf Images durchsuchen. Wählen Sie das Image aus, das wir gerade in das ECR-Repository gepusht haben.

Wählen Sie dann das latest-Image und klicken Sie auf Image auswählen.

Die Funktion konfigurieren
Um eine öffentliche URL für die Funktion zu erhalten, müssen wir zu Zusätzliche Konfigurationen > Netzwerk > Funktions-URL gehen.
Stellen Sie dies auf Aktivieren mit dem Auth-Typ KEINE.

Die Funktion erstellen
Klicken Sie unten auf der Seite auf Funktion erstellen, dies erstellt die Funktion.

Die Funktions-URL abrufen
Sobald die Funktion erstellt wurde, werden Sie zur Seite der Funktion weitergeleitet, wo Sie die Funktions-URL im Abschnitt "Funktions-URL" sehen können.

Die Funktion testen
🥳 Ihre App ist jetzt live! Um die Funktion zu testen, können Sie entweder zum Tab Test gehen oder die Funktions-URL direkt aufrufen.
curl -X GET https://[your-function-id].lambda-url.us-east-1.on.aws/Hello from Bun on Lambda!