logo hsb.horse
← Zur Blog-Übersicht

Blog

So führen Sie einen mit Bun+Hono erstellten API-Server auf AWS Lambda aus

Schritte zum Ausführen des Hono-API-Servers auf AWS Lambda mit Bun-Laufzeit. Erläutert die Konfiguration zum Kompilieren als Single File Executable und zum Ausführen mit Lambda Web Adaptor.

Veröffentlicht:

Wir fassen die Konfiguration zum Ausführen des API-Servers mit Hono in der Bun-Laufzeitumgebung auf AWS Lambda zusammen.

Der Zweck besteht darin, es mit der Bun-Laufzeitumgebung auszuführen, nicht mit Node.js oder LLRT.

Quellcode

mktbsh/bun-on-lambda

Wie man es erreicht

  1. Als einzelne ausführbare Datei kompilieren (ausführbare Binärdatei)
  2. Ausführung mit AWS Lambda Web Adapter (LWA)

Ich denke, es kann ohne die Verwendung von LWA ausgeführt werden, aber dieses Mal habe ich der Überprüfung des Vorgangs mit LWA Priorität eingeräumt.

Verwendete Technologie

  • Brötchen -Hono
  • AWS SAM
  • AWS Lambda-Webadapter

Verzeichnisstruktur

.
├── Makefile
├── README.md
├── app
│ └── index.ts
├── bun.lockb
├── lambda.ts
├── localhost.ts
├── package.json
├── samconfig.toml
├── template.yaml
└── tsconfig.json

SAM-Vorlage (Infrastrukturkonfiguration)

Definieren Sie AWS Lambda, die Lambda-Funktions-URL und die IAM-Rolle.

AWSTemplateFormatVersion: "2010-09-09"
Transform: AWS::Serverless-2016-10-31
Description: >
bun compiled sfe binary on Lambda demo
Globals:
Function:
Timeout: 10
Resources:
BunAppFunction:
DeletionPolicy: Delete
Type: AWS::Serverless::Function
Properties:
CodeUri: .
MemorySize: 256
Handler: bootstrap
Runtime: provided.al2023
Architectures:
- x86_64
Environment:
Variables:
PORT: "8000"
Layers:
- !Sub arn:aws:lambda:${AWS::Region}:753240598075:layer:LambdaAdapterLayerX86:22
FunctionUrlConfig:
AuthType: NONE
Metadata:
BuildMethod: makefile
Outputs:
FunctionUrl:
Value: !GetAtt BunAppFunctionUrl.FunctionUrl

Build-Einstellungen

Beginnen Sie bei der lokalen Entwicklung mit bun --hot localhost.ts.

Bei sam build wird die Build-Aufgabe des Makefiles ausgeführt. Das ist hier der Schlüssel.

Terminal window
bun build --compile --minify --sourcemap --target=bun-linux-x64 ./lambda.ts --outfile bootstrap
cp ./bootstrap $(ARTIFACTS_DIR)/.

Generieren Sie eine ausführbare Binärdatei mit der Option --compile von Bun und geben Sie sie als bootstrap aus.

Einstiegspunkt

Ich habe nichts besonders Schwieriges gemacht. Erhalten Sie einfach die PORT-Nummer aus der Umgebungsvariablen.

Die API-Implementierung (Hono-Implementierung) ist im App-Verzeichnis konsolidiert.

import { app } from "./app";
export default {
port: process.env.PORT,
fetch: app.fetch,
};

Einsetzen

Legen Sie samconfig.toml fest.

version = 0.1
[default.deploy.parameters]
stack_name = "<your_stack_name>"
resolve_s3 = true
s3_prefix = "<your_stack_name>"
region = "<region>"
confirm_changeset = true
capabilities = "CAPABILITY_IAM"

Befehl bereitstellen:

Terminal window
sam deploy

Bei Erfolg wird eine URL wie die folgende ausgegeben.

https://<random-string>.lambda-url.<region>.on.aws

Bei Verwendung mit CloudFront

Grundsätzlich empfiehlt sich eine Kombinationsanwendung.

– Ändern Sie den AuthType der Lambda-Funktions-URL in IAM_AUTH. – Erstellen Sie OAC für die Lambda-Funktions-URL in CloudFront – Aktualisieren Sie die ressourcenbasierten Richtlinienanweisungen von Lambda

Zusammenfassung

Indem Sie es als Single File Executable von Bun kompilieren und Lambda Web Adaptor verwenden, können Sie den Hono API-Server auf Lambda mit der Bun-Laufzeit ausführen.

Der Unterschied zwischen lokaler Entwicklung und Bereitstellung ist gering und die Konfiguration ermöglicht die Nutzung der hohen Geschwindigkeit von Bun in der Lambda-Umgebung.