运行时包管理器打包器测试运行器代码检查格式化指南参考博客反馈

在 AWS Lambda 上部署 Bun 应用

AWS Lambda 是一项无服务器计算服务,允许您无需配置或管理服务器即可运行代码。

本指南使用 Dockerfile 将 Bun HTTP 服务器部署到 AWS Lambda。


  1. 创建新的 Dockerfile

    在项目根目录中创建一个新的 Dockerfile。此文件包含初始化容器、将本地项目文件复制到容器中、安装依赖项以及启动应用的指令。

    Dockerfile
    # Use the official AWS Lambda adapter image to handle the Lambda runtime
    FROM public.ecr.aws/awsguru/aws-lambda-adapter:1.0.1 AS aws-lambda-adapter
    
    # 使用官方 Bun 镜像来运行应用
    FROM oven/bun:debian AS bun_latest
    
    # 将 Lambda 适配器复制到容器中
    COPY --from=aws-lambda-adapter /lambda-adapter /opt/extensions/lambda-adapter
    
    # 设置端口为 8080,AWS Lambda 适配器需要此端口
    ENV PORT=8080
    
    # 设置工作目录为 `/var/task`,这是 Lambda 的默认工作目录
    WORKDIR "/var/task"
    
    # 复制 package.json 和 bun.lock 到容器中
    COPY package.json bun.lock ./
    
    # 安装依赖
    RUN bun install --production --frozen-lockfile
    
    # 复制其余应用文件到容器中
    COPY . /var/task
    
    # 运行应用
    CMD ["bun", "index.ts"]
    

    在项目根目录中创建一个新的 .dockerignore 文件。此文件列出要从容器映像中_排除_的文件和目录,例如 node_modules。排除这些文件和目录可以加快构建速度并减小映像体积:

    .dockerignore
    node_modules
    Dockerfile*
    .dockerignore
    .git
    .gitignore
    README.md
    LICENSE
    .vscode
    .env
    # 任何其他想排除的文件或目录
    
  2. 构建 Docker 镜像

    确保您位于包含 Dockerfile 的目录中,然后构建 Docker 镜像。本示例将镜像命名为 bun-lambda-demo,并将标签设置为 latest。

    terminal
    # cd /path/to/your/app
    docker build --provenance=false --platform linux/amd64 -t bun-lambda-demo:latest .
    
  3. 创建 ECR 仓库

    推送镜像之前,请创建一个用于存放镜像的 ECR 仓库。

    以下命令:

    • 在 us-east-1 区域中创建名为 bun-lambda-demo 的 ECR 仓库
    • 将仓库 URI 导出为环境变量。导出是可选的,但可以让后续步骤更加简单。
    terminal
    export ECR_URI=$(aws ecr create-repository --repository-name bun-lambda-demo --region us-east-1 --query 'repository.repositoryUri' --output text)
    echo $ECR_URI
    
    Text
    [id].dkr.ecr.us-east-1.amazonaws.com/bun-lambda-demo
    
  4. 认证登录 ECR 仓库

    登录到 ECR 仓库:

    terminal
    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin $ECR_URI
    
    Text
    Login Succeeded
    
  5. 标记 Docker 镜像并将其推送到 ECR 仓库

    确保您位于包含 Dockerfile 的目录中,然后使用 ECR 仓库 URI 为 Docker 镜像添加标签。

    terminal
    docker tag bun-lambda-demo:latest ${ECR_URI}:latest
    

    接着,将镜像推送到 ECR 仓库。

    terminal
    docker push ${ECR_URI}:latest
    
  6. 创建 AWS Lambda 函数

    打开 AWS 控制台 > Lambda > 创建函数 > 选择 容器映像

    创建函数

    为函数命名,例如 my-bun-function。

  7. 选择容器映像

    前往 容器映像 URI 部分,然后点击 浏览映像。选择您推送到 ECR 仓库的镜像。

    选择容器仓库

    然后选择 latest 镜像并点击 选择映像。

    选择容器映像

  8. 配置函数

    要获取函数的公共 URL,请前往 其他配置 > 网络 > 函数 URL。

    将其设置为 启用,认证类型选择 NONE。

    设置函数 URL

  9. 创建函数

    点击页面底部的 创建函数。

    创建函数

  10. 获取函数 URL

    函数创建完成后,您会被重定向到其页面。函数 URL 位于 “函数 URL” 部分。

    函数 URL

  11. 测试函数

    您的应用现在已经上线。要测试该函数,可以前往 测试 选项卡,或直接调用函数 URL。

    terminal
    curl -X GET https://[your-function-id].lambda-url.us-east-1.on.aws/
    
    Text
    Hello from Bun on Lambda!