logo hsb.horse
← Retour au blog

Blog

Comment exécuter un serveur API construit avec Bun+Hono sur AWS Lambda

Étapes pour exécuter le serveur API Hono sur AWS Lambda avec le runtime Bun. Explique la configuration pour compiler en tant qu'exécutable à fichier unique et l'exécuter avec Lambda Web Adapter.

Publié:

Nous résumerons la configuration pour exécuter le serveur API à l’aide de Hono dans le runtime Bun sur AWS Lambda.

Le but est de l’exécuter avec le runtime Bun, pas avec Node.js ou LLRT.

##Code source

mktbsh/bun-on-lambda

Comment y parvenir

  1. Compiler en tant qu’exécutable à fichier unique (exécutable binaire)
  2. Exécutez à l’aide d’AWS Lambda Web Adaptor (LWA)

Je pense qu’il peut être exécuté sans utiliser LWA, mais cette fois, j’ai donné la priorité à la vérification du fonctionnement à l’aide de LWA.

Technologie utilisée

  • Chignon -Honô -AWS SAM
  • Adaptateur Web AWS Lambda

Structure du répertoire

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

Modèle SAM (configuration de l’infrastructure)

Définissez AWS Lambda, l’URL de la fonction Lambda et le rôle IAM.

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

Paramètres de construction

Lors du développement local, commencez par bun --hot localhost.ts.

À sam build, la tâche Build du Makefile est exécutée. C’est la clé ici.

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

Générez un binaire exécutable à l’aide de l’option --compile de Bun et affichez-le sous la forme bootstrap.

Point d’entrée

Je n’ai rien fait de particulièrement difficile. Recevez simplement le numéro de PORT de la variable d’environnement.

L’implémentation de l’API (implémentation Hono) est consolidée dans le répertoire de l’application.

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

Déployer

Définissez samconfig.toml.

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"

Commande de déploiement :

Terminal window
sam deploy

En cas de succès, une URL comme celle ci-dessous sera émise.

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

Lorsqu’il est utilisé avec CloudFront

Fondamentalement, une utilisation combinée est recommandée.

  • Modifiez l’AuthType de l’URL de la fonction Lambda en IAM_AUTH
  • Créer un OAC pour l’URL de la fonction Lambda dans CloudFront
  • Mettre à jour les déclarations de stratégie basées sur les ressources Lambda

résumé

En le compilant en tant qu’exécutable à fichier unique de Bun et en utilisant Lambda Web Adapter, vous pouvez exécuter le serveur API Hono sur Lambda avec le runtime Bun.

La différence entre le développement local et le déploiement est faible et la configuration permet d’utiliser la vitesse élevée de Bun dans l’environnement Lambda.