The Serverless Framework – 使您可以轻松使用 AWS Lambda 和其他托管云服务,构建能够自动扩展、空闲时零成本且维护成本极低的应用。
Serverless Framework 是一个命令行工具,采用易用的 YAML 语法,既部署您的代码,也部署支持众多无服务器应用场景(如 API、前端、数据管道和定时任务)所需的云基础设施。它是一个多语言框架,支持 Node.js、Typescript、Python、Go、Java 等。它还通过 1,000 多个插件实现完全可扩展,这些插件为框架添加了更多无服务器用例和工作流。
由 Serverless Inc 积极维护。
2026 年 7 月 – V.4 持续带来重要更新。请查看以下所有内容。最近的版本增加了 Sandboxes(AWS Lambda 上的隔离的、临时的计算环境)、原生 Amazon Bedrock AgentCore 支持、托管实例、持久函数,以及内置的 AWS Login 与 SSO。一如既往,我们比以往任何时候都更加期待无服务器的未来。
以下是目前 V.4 中所有新增内容的列表:
serverless.yml 中通过 ai 属性定义 AI 代理、记忆、工具、网关、浏览器和代码解释器,并使用 serverless agent 命令进行管理。点击此处了解更多信息。serverless login aws 和 serverless login aws sso。serverless diff 预览部署将如何改变您线上的 AWS CloudFormation 堆栈。serverless reconcile 保持使用记录与您的 AWS 账户同步。我们力求避免对 "aws" 提供商造成破坏性变更。但是,有几项大的变化需要注意:
如果您发现其他破坏性变更,请创建一个 issue。要了解更多关于差异和潜在破坏性变更的信息,请参阅我们的 升级到 Serverless Framework V4 文档。
请注意,V.4 仓库的结构和许可证与 V.4 npm 模块不同。npm 模块包含一些专有许可软件,因为 V.4 正转型为常见的 SaaS 产品,如先前宣布的那样。原始的 Serverless Framework 源代码等将继续保持 MIT 许可证软件,并且仓库结构清晰地区分专有和开源组件——MIT 许可的代码在 packages/serverless 中带有自己的 LICENSE 文件,而仓库根目录的 LICENSE 涵盖专有组件。
以下介绍如何安装 Serverless Framework、设置项目,并将其部署到 AWS Lambda、AWS DynamoDB、AWS S3 等无服务器基础设施上的 Amazon Web Services。
首先,您必须安装 Node.js 运行时,版本 18.17.0 或更高,然后您可以通过 NPM 安装 Serverless Framework。
打开您的 CLI,运行以下命令以全局安装 Serverless Framework。```text npm i serverless -g
运行 `serverless` 来验证你的安装是否正常工作,并显示当前版本。
<br/>
## 更新 Serverless Framework
从版本 4 开始,Serverless Framework 会自动更新自身,并每 24 小时执行一次更新检查。
你可以通过运行以下命令来强制更新:```text
serverless update
或者,您可以设置此环境变量:```text SERVERLESS_FRAMEWORK_FORCE_UPDATE=true
<br/>
## `serverless` 命令
Serverless Framework 附带一个 `serverless` 命令,可引导你在 AWS 上创建并部署项目。它有助于下载模板、设置 AWS 凭证、设置 Serverless Framework 仪表板等,并沿途解释每个概念。
本指南还将引导你开始使用 Serverless Framework,但请注意,直接键入 `serverless` 命令或许会是更佳的体验。```text
serverless
Serverless Framework 中项目的主要概念被称为“服务”,它由 serverless.yml 文件声明,该文件包含用于部署云基础设施的简化语法,例如 AWS Lambda 函数、通过事件触发这些函数的基础设施,以及 AWS Lambda 函数在各种用例中可能需要的其他基础设施(例如 AWS DynamoDB 数据库表、AWS S3 存储桶、用于接收 HTTP 请求并将其转发到 AWS Lambda 的 AWS API 网关)。
一个服务可以是整个应用程序、特定领域的逻辑(例如“博客”、“用户”、“产品”),也可以是处理单一任务的微服务。你可以自行决定如何组织项目。通常,我们建议从单体架构开始,以降低复杂性,直到绝对需要拆分逻辑为止。
要创建并完整设置 Serverless Framework 服务,请使用 serverless 命令,该命令提供了交互式设置工作流。```text
serverless
这将向你展示几个模板。选择一个符合你所需语言和用例的模板。```text
Serverless ϟ Framework
Welcome to Serverless Framework V.4
Create a new project by selecting a Template to generate scaffolding for a specific use-case.
? Select A Template: …
❯ AWS / Node.js / HTTP API
AWS / Node.js / Express API
AWS / Node.js / Express API with DynamoDB
AWS / Node.js / Scheduled Task
AWS / Node.js / Simple Function
AWS / Python / HTTP API
AWS / Python / Flask API
AWS / Python / Flask API with DynamoDB
AWS / Python / Scheduled Task
AWS / Python / Simple Function
(Scroll for more)
选择 Service Template 后,其文件将被下载,您将有机会为您的 Service 命名。```text ? Name Your Service: ›
请只使用小写字母、数字和连字符。同时,请保持 Service 名称简短,因为 Serverless Framework 创建的每个云资源名称中都会加入 Service 名称,而某些云资源对名称有字符长度限制。
请参阅 [核心概念文档](https://www.serverless.com/framework/docs/providers/aws/guide/intro),了解更多关于 Services 及其他内容的信息。
<br/>
## 登录
自 Serverless Framework V.4 起,如果你使用 `serverless` 命令来设置 Service,最终它会要求你登录。
如果你需要在其他情况下登录,请运行 `serverless login`。
登录后,浏览器会跳转到 [Serverless Framework Dashboard](https://app.serverless.com)。完成注册或登录后,返回你的 CLI,即可完成登录。
请注意,你可以免费使用 Serverless Framework CLI 和 Dashboard,并且 CLI 对于小型组织和独立开发者将始终免费。有关定价的更多信息,请查看我们的 [定价页面](https://serverless.com/pricing)。
<br/>
## 创建 App
“App” 概念是一个或多个 “Service” 的父级容器,你可以选择在 `serverless.yml` 中通过 `app` 属性进行设置。设置 `app` 还会为该 Service 启用 Serverless Framework Dashboard 功能,例如在 Serverless Framework Dashboard 中跟踪你的 Services 及其部署、在它们之间共享输出、在它们之间共享密钥,以及启用指标、追踪和日志。
如果你使用 `serverless` 入门命令,它会帮助你设置 `app` 并将其添加到你的 Service。你也可以使用 `serverless` 命令在现有 Service 上创建 App,或者在 Dashboard 中创建 App。```text
❯ Create A New App
ecommerce
blog
acmeinc
Skip Adding An App
应用也可以通过 serverless.yml 中的 app 属性手动设置:```yaml
service: my-service
app: my-app
如果你不想使用 Serverless Framework Dashboard 的功能,只需不要添加 `app` 属性即可。App 不是必需的。
<br/>
## 设置 AWS 凭据
要将云基础设施部署到 AWS,你必须授予 Serverless Framework 访问你的 AWS 凭据的权限。
在新的或现有的 Service 中运行 Serverless Framework 的 `serverless` 命令,将有助于确认 AWS 凭据是否正确设置或是否已过期,或者帮助你从头开始设置它们。```text
No valid AWS Credentials were found in your environment variables or on your machine. Serverless Framework needs these to access your AWS account and deploy resources to it. Choose an option below to set up AWS Credentials.
❯ Create AWS IAM Role (Easy & Recommended)
Save AWS Credentials in a Local Profile
Skip & Set Later (AWS SSO, ENV Vars)
我们建议创建一个存储在 Serverless Framework Dashboard 中的 AWS IAM 角色。在不久的将来,我们将支持大量的提供商凭据,而 Dashboard 是跨团队集中管理这些凭据的理想位置,可帮助你保持组织有序,并安全地消除在团队成员机器上保存凭据的需求。
如果你使用 AWS SSO,可以运行 serverless login aws sso 通过浏览器登录,或者直接将临时 SSO 凭据作为环境变量粘贴到终端中。
要了解有关设置 AWS 凭据的更多信息,请阅读本指南。
使用 serverless 命令完成所有设置后,就可以将你的服务部署到 AWS 了。
请确保你的终端会话位于包含 serverless.yml 文件的目录中。如果你刚刚创建了一个服务,别忘了使用 cd 进入该目录。```text
cd [your-new-service-name]
部署将同时在 AWS 上创建/更新云基础设施和代码。
运行 `deploy` 命令:```text
serverless deploy
有关部署的更多详细信息,请参见此处。
许多 Serverless Framework 和 serverless 开发者通常选择在云端进行开发,因为这更符合实际情况(即你的生产环境),而在本地模拟 Lambda 和其他基础设施依赖可能非常复杂。
在 Serverless Framework V.4 中,我们创建了一种_混合开发方法_,帮助开发者以真实云环境的准确性快速开发。这就是新的 dev 命令:```text
serverless dev
当您运行此命令时,将发生以下操作...
将执行一次 AWS Cloudformation 部署,以对您的 Service 内的所有 AWS Lambda 函数进行轻微修改,使它们包含一个轻量级包装器。
一旦此 AWS Cloudformation 部署完成,您的 Service 内正在运行的 AWS Lambda 函数仍将能够在 AWS 中接收事件并被调用。
但是,事件将被安全且即时地代理到您的本机,并且运行的是您本机上的代码,而不是您的 AWS Lambda 函数中的代码。
这让您无需在本地部署或重建架构的每个部分,即可修改代码,从而快速进行开发。
来自本地代码的日志也会显示在您的终端 `dev` 会话中。
一旦您的代码执行完成,来自本地代码的响应将被转发回您的 AWS Lambda 函数,并由它们返回该响应——就像云端普通的 AWS Lambda 函数一样。
请注意,`dev` 仅设计用于开发或个人阶段/环境,不应在生产环境或任何处理大量事件的阶段中运行。
当您结束 `dev` 会话后,您必须使用 `serverless deploy` 重新部署,将您最近的本地更改推送到正在运行的 AWS Lambda 函数——否则您的 AWS Lambda 函数将失败(!)
有关 dev 模式的更多详细信息,请参阅[此处](https://www.serverless.com/framework/docs/providers/aws/cli-reference/dev)。
<br/>
## 调用
要在云端调用您的 AWS Lambda 函数,您可以在 `serverless deploy` 输出中找到带有 API 端点的函数 URL,或通过 `serverless info` 获取它们。如果您的函数没有 API 端点,您可以使用 `invoke` 命令,如下所示:```bash
sls invoke -f hello
# Invoke and display logs:
serverless invoke -f hello --log
有关 invoke 命令的更多详情,请参见此处。
若要快速部署代码更改,可以跳过 serverless deploy 命令(该命令会触发完整的 AWS CloudFormation 更新,因此速度要慢得多),而只将代码和配置更改部署到特定的 AWS Lambda 函数。
若要在几秒内将代码和配置更改部署到单个 AWS Lambda 函数,请使用 deploy function 命令,并将 -f [serverless.yml 中的函数名] 设置为要部署的函数。```text
serverless deploy function -f my-api
关于 `deploy function` 命令的更多详细信息,请参阅 [此处](https://www.serverless.com/framework/docs/providers/aws/cli-reference/deploy-function)。
<br/>
## 流式日志
您可以使用 Serverless Framework 将 AWS Cloudwatch 的日志直接流式传输到终端。请在单独的终端窗口中使用 `sls logs` 命令:```bash
sls logs -f [Function name in serverless.yml] -t
通过 -f 选项定位特定函数,并通过 -t 选项启用尾部跟踪(即流式输出)。
许多 Serverless Framework 用户选择在本地模拟其整个 serverless 架构。请注意,模拟 AWS Lambda 和其他云服务从来都不是完全准确的,而且这一过程可能非常复杂,尤其是当您的项目和团队成员不断增多时。从 V.4 开始,我们强烈建议使用带有个人阶段的全新 dev 模式。
如果您确实选择在本地开发,我们推荐以下工作流程...
使用 invoke local 命令在本地调用您的函数:```bash
sls invoke local -f my-api
您还可以通过多种方式将数据传递到此本地调用。以下是其中一种方式:```bash
sls invoke local --function functionName --data '{"a":"bar"}'
关于 invoke local 命令的更多详细信息,请参阅此处。
Serverless Framework 还有一个很棒的插件,允许你在本地运行服务器并模拟 AWS API Gateway。这就是 serverless-offline 插件。
更多详细信息请参阅 serverless-offline 文档。
Serverless Framework 的一大优势在于其插件生态系统。
插件可以扩展或覆盖 Serverless Framework,为其带来新的用例或功能,这样的插件数以百计。
请注意,一些曾经流行的插件已不再需要——它们的功能现已内置于框架中,包括 Python requirements、custom domains、AppSync、Prune 和 API Gateway Service Proxy。
一些最常见的插件包括:
你可以使用 serverless plugin install --name pluginName 为你的服务添加插件,该命令会通过 npm 安装插件,并将其注册到你的 serverless.yml 中。
Serverless Framework Compose 允许你同时处理多个 Serverless Framework 服务,并可以执行以下操作...
以下是一个项目结构可能的样子:```bash my-app/ service-a/ src/ ... serverless.yml service-b/ src/ ... serverless.yml
使用 Serverless Framework Compose 需要一个 `serverless-compose.yml` 文件。在其中,你可以指定要部署的服务。你还可以在服务之间共享数据,这也会创建部署顺序。```yaml
# serverless-compose.yml
services:
service-a:
path: service-a
service-b:
path: service-b
params:
queueUrl: ${service-a.queueUrl}
要由另一个服务继承的输出通常定义为 AWS CloudFormation Outputs:```yaml
resources: Resources: MyQueue: Type: AWS::SQS::Queue # ... Outputs: queueUrl: Value: !Ref MyQueue
该值将作为名为 `queueUrl` 的[参数](https://www.serverless.com/framework/docs/guides/parameters)传递给 `service-b`。在 Serverless Framework 配置中,可以通过 `${param:xxx}` 语法引用参数:```yaml
# service-b/serverless.yml
provider:
...
environment:
# Here we inject the queue URL as a Lambda environment variable
SERVICE_A_QUEUE_URL: ${param:queueUrl}
有关 Serverless Framework Compose 的更多详细信息,请参阅 此处。
在 Serverless Framework V.4 中,我们引入了 serverless support 命令,这是一项突出功能,可让你生成问题报告,或直接联系我们的支持团队。它会自动包含相关上下文,并省略敏感细节(如密钥和账户信息),你可以在提交前进行检查。这一简化的流程可确保你的问题得到快速且安全的处理。
要使用此功能,在出现错误或执行任何命令后,运行:```bash sls support
每次命令执行后,无论成功与否,上下文都会保存在当前工作目录下的 `.serverless` 文件夹中。
要打开新的支持工单,请运行 `sls support` 命令并选择 `Get priority support...`。你还可以选择审阅和编辑生成的报告。打开支持工单的功能仅对注册了订阅的用户开放。
你也可以在不提交新支持工单的情况下生成报告。这对于与他人共享上下文、打开 GitHub issues,或与 ChatGPT 等 AI 提示词一起使用非常有用。为此,请运行 `sls support` 命令并选择 `Create a summary report...` 或 `Create a comprehensive report..`。你可以通过运行 `sls support --summary` 或 `sls support --all` 来跳过提示。这对于将报告捕获到剪贴板尤为有用(例如 `sls support --summary | pbcopy`)。
<br/>
## 删除你的服务
如果你想删除你的服务,请运行 `remove`。这将删除项目创建的所有 AWS 资源,并确保你不会产生任何意外费用。它还会从 Serverless Dashboard 中移除该服务。```bash
sls remove
关于 remove 命令的更多详细信息,请参阅此处。
以下是一些有助于继续使用 Serverless Framework 的资源:
serverless.yml 指南我们非常重视安全问题。如果您发现安全漏洞,请通过 [email protected] 与我们联系以负责任地披露。在我们处理完漏洞之前,请勿公开披露。
更多详细信息,请参阅我们的安全政策。
serverless.yml 的 AWS Lambda 函数中使用 .ts 处理器,并在部署时自动构建。ESBuild 现已包含在框架中,使这一切成为可能。点击此处了解更多信息。serverless dev,将来自您线上架构的事件路由到本地代码,使您无需部署即可快速进行更改。点击此处了解更多信息。nodejs24.x)、Python 3.14 (python3.14) 和 Java 25 (java25)。ap-southeast-6。stages 轻松组织特定于阶段的配置,并设置 default 配置作为回退。serverless 命令已重写,在设置新项目或现有项目时更具帮助性。nodejs22.x)。