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
Wie man es erreicht
- Als einzelne ausführbare Datei kompilieren (ausführbare Binärdatei)
- 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.jsonSAM-Vorlage (Infrastrukturkonfiguration)
Definieren Sie AWS Lambda, die Lambda-Funktions-URL und die IAM-Rolle.
AWSTemplateFormatVersion: "2010-09-09"Transform: AWS::Serverless-2016-10-31Description: > 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.FunctionUrlBuild-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.
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 = trues3_prefix = "<your_stack_name>"region = "<region>"confirm_changeset = truecapabilities = "CAPABILITY_IAM"Befehl bereitstellen:
sam deployBei Erfolg wird eine URL wie die folgende ausgegeben.
https://<random-string>.lambda-url.<region>.on.awsBei 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.
hsb.horse