无服务器函数和 Lambda 函数有什么区别

What is the difference between a Serverless Function, and a Lambda Function

我正在玩弄 Cloudformation 无服务器转换,并试图弄清楚如何以及何时使用 AWS::Serverless::FunctionAWS::Lambda::Function。出于某种原因,Lambda 版本用于 AWS 中的 SAM 示例。这非常令人困惑。 SAM github。然后还有 servlerless 框架本身,它实际上是一个 nodejs 框架。所有这些东西让我非常困惑。

首先,让我解释一下。

AWS 无服务器堆栈 - AWS 提供的无服务器技术的组合,包括 API 网关、Lambda、S3 等

最初引入 Lambda 时,使用 Cloudformation 使用这些技术开发无服务器应用程序具有挑战性。问题是由于为 API Gateway 和 Lambda 编写 Cloudformation 的复杂性。

这就是无服务器框架的用武之地。

Serverless Framework - 一个开源 DevOps 框架,它使用一个名为 serverless.yml 的简单文件简化了 API 网关和 Lambda 的定义。由于 Serverless Framework 使用约定而不是配置,它只需要几行代码就可以定义 Lambda、API Gateway 等。在 Serverless Framework 下根据 serverless.yml 中定义的内容生成 Cloudformation。此外,无服务器框架支持多个云提供商。

后来 AWS 引入了他们自己的简化脚本语言,称为 AWS SAM(注意:AWS SAM 不像 Serverless 那样具有插件和扩展支持的框架),以降低定义 CloudFormation 作为 Serverless Framework 替代品的复杂性。

AWS::Lambda::Function 是用于定义 Lambda 函数的 Cloudformation 语法。

AWS::Serverless::Function 是用于定义 Lambda 函数的 AWS SAM 语法,在执行 AWS SAM 时,该函数在 Cloudformation (AWS::Lambda::Function) 和相关资源中按照约定在内部创建 Lambda 函数。

AWS::Serverless::Function 用于与 AWS SAM, whereas AWS::Lambda::Function is for usage with plain Cloudformation 一起使用时。它们本质上都是对 Lambda 函数进行建模,但只是针对不同的框架,因此它们或多或少具有不同的名称。

从概念上讲,无服务器函数或 Lambda 函数之间没有区别。无服务器是 AWS 称为 Lambda(和 API 网关)的通用术语。

无服务器框架只是一个基于无服务器原则构建的软件项目,可以与 AWS Lambda(以及其他)一起使用。它与其他框架(例如 Chalice 或 Zappa)(都是 Python 基于 运行 在 AWS Lambda 上的无服务器框架)确实没有太大区别。

在框架方面,两者之间没有太大区别,但在技术上存在细微差别,如下所示

无服务器:它创建 IAM 角色、S3 存储桶、Cloudformation 模板,创建、更新和部署代码。可以从命令调用程序。

还有一点很重要,当我们想删除函数和所有相关服务(如 S3、IAM 角色等)时,可以使用单行命令来完成。在 AWS Lambda 中,我们需要一个一个地手动删除每个服务

AWS Lambda:它允许执行代码片段以响应 activity 来自其他 AWS 资源的触发器,例如 AWS CloudWatch 警报、NoSQL table 作为 DynamoDB 的更改、在 S3 存储桶等中上传事件

AWS Lambda 函数有限制,建议您减小代码大小并将较大的函数分解为较小的函数。