Bun 런타임에서 Hono를 사용한 API 서버를 AWS Lambda에서 실행하는 구성을 정리한다.
Node.js나 LLRT가 아니라 Bun 런타임으로 움직이는 것이 목적이다.
소스 코드
실현 방법
- Single File Executable(실행 가능 바이너리)로 컴파일
- AWS Lambda Web Adapter(LWA)를 사용하여 이동
LWA를 사용하지 않아도 움직일 수 있다고 생각하지만, 이번은 LWA를 사용한 동작 확인을 우선했다.
사용 기술
- 번
- Hono
- AWS SAM
- AWS Lambda 웹 어댑터
디렉토리 구성
.├── Makefile├── README.md├── app│ └── index.ts├── bun.lockb├── lambda.ts├── localhost.ts├── package.json├── samconfig.toml├── template.yaml└── tsconfig.jsonSAM 템플릿 (인프라 구성)
AWS Lambda, Lambda Function URL, IAM 역할을 정의합니다.
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.FunctionUrl빌드 설정
로컬 개발시는 bun --hot localhost.ts로 기동.
sam build시에는 Makefile의 Build 태스크가 실행된다. 여기가 이번 간이다.
bun build --compile --minify --sourcemap --target=bun-linux-x64 ./lambda.ts --outfile bootstrap
cp ./bootstrap $(ARTIFACTS_DIR)/.Bun의 --compile 옵션으로 실행 가능 바이너리를 생성하고 bootstrap이라는 이름으로 출력한다.
진입 점
특히 어려운 일은 하지 않는다. PORT 번호를 환경 변수에서 받기만 하면 됩니다.
API의 구현(Hono의 구현)은 app 디렉토리 부하에 집약한다.
import { app } from "./app";
export default { port: process.env.PORT, fetch: app.fetch,};배포
samconfig.toml을 설정합니다.
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"배포 명령:
sam deploy성공하면 아래와 같은 URL이 발행된다.
https://<random-string>.lambda-url.<region>.on.awsCloudFront와 함께 사용하는 경우
기본적으로는 병용을 추천.
- Lambda Function URL의 AuthType을
IAM_AUTH로 변경 - CloudFront에서 Lambda Function URL용 OAC 만들기
- Lambda 리소스 기반 정책 문 업데이트
요약
Bun의 Single File Executable로 compiled하고, Lambda Web Adapter를 사용하는 것으로, Bun 런타임으로 Hono API 서버를 Lambda상에서 움직일 수 있다.
로컬 개발과 배포의 차이가 작고 Bun의 고속성을 Lambda 환경에서도 살릴 수 있는 구성이다.
hsb.horse