Skip to main content
AWS Lambda 是一项无服务器计算服务,可让您运行代码而无需配置或管理服务器。 在本指南中,我们将使用 Dockerfile 将 Bun HTTP 服务器部署到 AWS Lambda。
在继续之前,请确保您已具备:
  • 一个准备部署的 Bun 应用程序
  • 一个 AWS 账户
  • 已安装并配置 AWS CLI
  • 已安装 Docker 并添加到您的 PATH

1

创建新的 Dockerfile

确保您在包含项目的目录中,然后在项目的根目录中创建一个新的 Dockerfile。此文件包含初始化容器、将本地项目文件复制到其中、安装依赖项并启动应用程序的指令。
Dockerfile
# 使用官方 AWS Lambda 适配器镜像来处理 Lambda 运行时
FROM public.ecr.aws/awsguru/aws-lambda-adapter:0.9.0 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"]
确保启动命令对应于应用程序的入口点。如果您的 [package.json] 中有启动脚本,也可以是 CMD ["bun", "run", "start"]此镜像在容器内使用 Bun 安装依赖项并运行您的应用程序。如果您的应用程序没有依赖项,您可以省略 RUN bun install --production --frozen-lockfile 这一行。
在项目根目录中创建一个新的 [.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 存储库

要将镜像推送到 AWS Lambda,我们首先需要创建一个 ECR 存储库 来推送镜像。通过运行以下命令,我们:
  • us-east-1 区域中创建一个名为 bun-lambda-demo 的 ECR 存储库
  • 获取存储库 URI,并将存储库 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
[id].dkr.ecr.us-east-1.amazonaws.com/bun-lambda-demo
如果您使用 IAM Identity Center (SSO) 或使用配置文件配置了 AWS CLI,则需要向您的 AWS CLI 命令添加 --profile 标志。例如,如果您的配置文件名为 my-sso-app,请使用 --profile my-sso-app。使用 aws configure list-profiles 检查您的 AWS CLI 配置以查看可用的配置文件。
terminal
export ECR_URI=$(aws ecr create-repository --repository-name bun-lambda-demo --region us-east-1 --profile my-sso-app --query 'repository.repositoryUri' --output text)
echo $ECR_URI
4

使用 ECR 存储库进行身份验证

登录到 ECR 存储库:
terminal
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin $ECR_URI
Login Succeeded
如果使用配置文件,请使用 --profile 标志:
terminal
aws ecr get-login-password --region us-east-1 --profile my-sso-app | docker login --username AWS --password-stdin $ECR_URI
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 > 创建函数 > 选择 容器镜像
确保您选择了正确的区域,此 URL 默认为 us-east-1
创建函数
给函数起一个名称,如 my-bun-function
7

选择容器镜像

然后,转到 容器镜像 URI 部分,单击 浏览镜像。选择我们刚刚推送到 ECR 存储库的镜像。
选择容器存储库
然后,选择 latest 镜像,然后单击 选择镜像
选择容器镜像
8

配置函数

要获取函数的公共 URL,我们需要转到 其他配置 > 网络 > 函数 URL将其设置为 启用,身份验证类型为
设置函数 URL
9

创建函数

单击页面底部的 创建函数,这将创建函数。
创建函数
10

获取函数 URL

函数创建后,您将被重定向到函数页面,您可以在 “函数 URL” 部分看到函数 URL。
函数 URL
11

测试函数

🥳 您的应用现在已上线!要测试函数,您可以转到 测试 选项卡,或直接调用函数 URL。
terminal
curl -X GET https://[your-function-id].lambda-url.us-east-1.on.aws/
Hello from Bun on Lambda!