logo hsb.horse
← Voltar para o índice do blog

Blog

Como executar um servidor API construído com Bun+Hono no AWS Lambda

Etapas para executar o servidor Hono API no AWS Lambda com tempo de execução Bun. Explica a configuração para compilar como executável de arquivo único e executá-lo com o Lambda Web Adaptor.

Publicado:

Resumiremos a configuração para executar o servidor API usando o tempo de execução Hono in the Bun no AWS Lambda.

O objetivo é executá-lo com o tempo de execução Bun, não com Node.js ou LLRT.

Código fonte

mktbsh/bun-on-lambda

Como conseguir isso

  1. Compilar como executável de arquivo único (binário executável)
  2. Execute usando AWS Lambda Web Adaptor (LWA)

Acho que pode ser executado sem usar LWA, mas desta vez priorizei a verificação do funcionamento usando LWA.

Tecnologia usada

  • Pão -Hono -AWS SAM
  • Adaptador Web AWS Lambda

Estrutura de diretório

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

Modelo SAM (configuração de infraestrutura)

Defina AWS Lambda, URL da função Lambda e função 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

Configurações de compilação

Ao desenvolver localmente, comece com bun --hot localhost.ts.

Em sam build, a tarefa Build do Makefile é executada. Esta é a chave aqui.

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

Gere um binário executável usando a opção --compile do Bun e produza-o como bootstrap.

Ponto de entrada

Não fiz nada particularmente difícil. Basta receber o número da PORTA da variável de ambiente.

A implementação da API (implementação Hono) é consolidada no diretório app.

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

Implantar

Defina 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"

Comando de implantação:

Terminal window
sam deploy

Se for bem-sucedido, um URL como o abaixo será emitido.

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

Quando usado com CloudFront

Basicamente, o uso combinado é recomendado.

  • Altere o AuthType do URL da função Lambda para IAM_AUTH
  • Criar URL de função OAC para Lambda no CloudFront
  • Atualizar declarações de políticas baseadas em recursos do Lambda

resumo

Ao compilá-lo como executável de arquivo único do Bun e usar o Lambda Web Adaptor, você pode executar o servidor Hono API no Lambda com o tempo de execução do Bun.

A diferença entre desenvolvimento local e implantação é pequena, e a configuração permite que a alta velocidade do Bun seja utilizada no ambiente Lambda.