在本页
如何将 Deno 部署到 AWS Lambda
AWS Lambda 是亚马逊网络服务提供的无服务器计算服务。它允许您运行代码而无需配置或管理服务器。
这是一个使用 Docker 将 Deno 应用部署到 AWS Lambda 的分步指南。
此操作的先决条件是
步骤 1:创建 Deno 应用 跳转到标题
使用以下代码创建一个新的 Deno 应用
Deno.serve((req) => new Response("Hello World!"));
将此代码保存在名为 main.ts
的文件中。
步骤 2:创建 Dockerfile 跳转到标题
创建一个名为 Dockerfile
的新文件,内容如下
# Set up the base image
FROM public.ecr.aws/awsguru/aws-lambda-adapter:0.8.4 AS aws-lambda-adapter
FROM denoland/deno:bin-1.45.2 AS deno_bin
FROM debian:bookworm-20230703-slim AS deno_runtime
COPY --from=aws-lambda-adapter /lambda-adapter /opt/extensions/lambda-adapter
COPY --from=deno_bin /deno /usr/local/bin/deno
ENV PORT=8000
EXPOSE 8000
RUN mkdir /var/deno_dir
ENV DENO_DIR=/var/deno_dir
# Copy the function code
WORKDIR "/var/task"
COPY . /var/task
# Warmup caches
RUN timeout 10s deno run -A main.ts || [ $? -eq 124 ] || exit 1
CMD ["deno", "run", "-A", "main.ts"]
此 Dockerfile 使用 aws-lambda-adapter
项目来适配常规 HTTP 服务器(如 Deno 的 Deno.serve
)到 AWS Lambda 运行时 API。
我们还使用 denoland/deno:bin-1.45.2
镜像来获取 Deno 二进制文件,并使用 debian:bookworm-20230703-slim
作为基础镜像。debian:bookworm-20230703-slim
镜像用于保持镜像尺寸较小。
PORT
环境变量设置为 8000
,以告知 AWS Lambda 适配器我们正在监听端口 8000
。
我们将 DENO_DIR
环境变量设置为 /var/deno_dir
,以将缓存的 Deno 源代码和转译的模块存储在 /var/deno_dir
目录中。
预热缓存步骤用于在调用函数之前预热 Deno 缓存。这样做是为了减少函数的冷启动时间。这些缓存包含函数代码的编译代码和依赖项。此步骤将启动您的服务器 10 秒钟,然后退出。
当使用 package.json 时,请记住在预热缓存或运行函数之前运行 deno install
以从您的 package.json
文件中安装 node_modules
。
步骤 3:构建 Docker 镜像 跳转到标题
使用以下命令构建 Docker 镜像
docker build -t hello-world .
步骤 4:创建 ECR Docker 仓库并推送镜像 跳转到标题
使用 AWS CLI,创建一个 ECR 仓库并将 Docker 镜像推送到其中
aws ecr create-repository --repository-name hello-world --region us-east-1 | grep repositoryUri
这应该输出一个仓库 URI,看起来像 <account_id>.dkr.ecr.us-east-1.amazonaws.com/hello-world
。
使用上一步的仓库 URI,对 Docker 进行 ECR 身份验证
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin <account_id>.dkr.ecr.us-east-1.amazonaws.com
使用仓库 URI 标记 Docker 镜像,再次使用前几步的仓库 URI
docker tag hello-world:latest <account_id>.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
最后,使用前几步的仓库 URI,将 Docker 镜像推送到 ECR 仓库
docker push <account_id>.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
步骤 5:创建 AWS Lambda 函数 跳转到标题
现在您可以从 AWS 管理控制台创建一个新的 AWS Lambda 函数。
- 转到 AWS 管理控制台,并导航到 Lambda 服务。
- 单击“创建函数”按钮。
- 选择“容器镜像”。
- 输入函数的名称,例如“hello-world”。
- 单击“浏览镜像”按钮,然后选择您推送到 ECR 的镜像。
- 单击“创建函数”按钮。
- 等待函数创建完成。
- 在“配置”选项卡中,转到“函数 URL”部分,然后单击“创建函数 URL”。
- 为身份验证类型选择“NONE”(这将使 lambda 函数公开访问)。
- 单击“保存”按钮。
步骤 6:测试 Lambda 函数 跳转到标题
现在您可以访问您的 Lambda 函数的 URL 以查看来自您的 Deno 应用的响应。
🦕 您已成功使用 Docker 将 Deno 应用部署到 AWS Lambda。现在您可以使用此设置将更复杂的 Deno 应用部署到 AWS Lambda。