所有文章 > 日积月累 > 从零开始使用 AWS 运行 Serverless
从零开始使用 AWS 运行 Serverless

从零开始使用 AWS 运行 Serverless

Serverless 是一种云计算模型,帮助开发人员快速构建和运行应用程序,而无需管理底层服务器。在这个模型中,云服务提供商负责自动扩展和维护基础架构,开发人员只需专注于应用程序代码。本篇文章将详细介绍如何在 AWS 上运行 Serverless 应用。

什么是 Serverless

Serverless 并不意味着没有服务器存在,而是从开发者的角度看,无需关心服务器的管理。AWS 提供了一系列 Serverless 服务,如 Lambda、API Gateway 等,帮助开发者简化应用的部署和管理。

Serverless 的特性

  1. 按需扩展:Serverless 应用根据实际需求自动伸缩,无需为闲置资源付费。
  2. 高可用性:由于底层资源由 AWS 管理,Serverless 应用天生具备高可用性和容错性。
  3. 无服务器管理负担:开发者无需处理服务器配置和维护,专注于代码开发。

AWS Serverless Services

获取一个需要部署的项目

要在 AWS 上运行 Serverless 应用,首先需要一个项目。在此示例中,我们将使用 NestJS 来创建一个简单的 Serverless 应用。

> nest new nestjs-serverless-demo

创建项目

安装必要的依赖

在项目创建后,我们需要安装一些依赖来支持 Serverless 环境的运行。

pnpm add @vendia/serverless-express aws-lambda
pnpm add -D @types/aws-lambda serverless-offline

配置 Serverless 文件

配置文件是 Serverless 应用的核心部分之一。我们需要创建一个 serverless.ts 文件来启动和配置应用。

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import serverlessExpress from '@vendia/serverless-express';
import { Callback, Context, Handler} from 'aws-lambda';

let server: Handler;

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.init();
  const expressApp = app.getHttpAdapter().getInstance();
  return serverlessExpress({ app: expressApp });
}

export const handler: Handler = async (
  event: any,
  context: Context,
  callback: Callback
) => {
  server = server ?? (await bootstrap());
  return server(event, context, callback);
};

如何启动 Serverless 应用

完成以上配置后,我们可以通过以下命令启动应用:

> npm i -g serverless
> sls offline

启动应用

部署应用到 AWS

在本地测试成功后,我们可以将应用部署到 AWS。

> sls deploy --stage prod

部署成功

使用 Lambda 的优势

AWS Lambda 是 Serverless 架构的核心组件之一,它允许用户只为代码的实际执行时间付费,同时自动处理所有计算资源的配置和扩展。

何时使用 Lambda

  1. 事件驱动的应用:如文件上传触发的图像处理
  2. 快速响应的微服务:无需长时间运行的任务。
  3. 自动化任务:如定时数据备份和清理。

FAQ

什么是 AWS Serverless?

AWS Serverless 是一种无需管理服务器的云计算架构,用户只需专注于应用程序的开发和部署,底层资源由 AWS 自动管理。

使用 AWS Lambda 的费用高吗?

AWS Lambda 提供免费层,每月一百万次调用和 400,000 GB-seconds 的计算时间是免费的,超出后按实际使用量收费。

如何选择合适的 Lambda 配置?

根据应用的执行需求选择合适的内存和超时配置,较高的内存配置会提供更多的 CPU 资源。

为什么要使用 Serverless?

Serverless 可以减少基础设施管理的复杂性,降低运营成本,并且提供按需扩展的灵活性。

Lambda 可以与哪些服务集成?

AWS Lambda 可以与多种 AWS 服务集成,如 S3、DynamoDB、API Gateway 等,用于构建复杂的事件驱动架构。

#你可能也喜欢这些API文章!