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

112
我正在尝试使用Cloudformation Serverless Transformation,并试图弄清何时以及如何使用AWS :: Serverless :: Function或AWS :: Lambda :: Function。由于某种原因,Lambda版本在AWS的SAM示例中使用。这非常令人困惑。请参考SAM github还有serverless框架本身,它实际上是一个nodejs框架。所有这些东西都让我感到非常困惑。
3个回答

129

首先,让我解释一下这些术语。

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

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

这就是 Serverless Framework 发挥作用的地方。

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

后来,AWS 推出了自己的简化脚本语言 AWS SAM(注:AWS SAM 目前不像 Serverless 那样具有插件和扩展支持的框架),以减少定义 CloudFormation 的复杂性,作为 Serverless Framework 的替代品。

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

AWS::Serverless::Function 是 AWS SAM 语法,用于定义 Lambda 函数,内部会按照惯例使用 Cloudformation (AWS::Lambda::Function)和相关资源创建 Lambda 函数。


1
在 Visual Studio 中,用于无服务器应用程序的 serverless.template 文件是否为 SAM 文件? - Royi Namir
1
@RoyiNamir 的 serverless.template 文件是 AWS CloudFormation 模板。参考 https://aws.amazon.com/blogs/developer/aws-serverless-applications-in-visual-studio/。 - Ashan
它没有提到它是否是S.A.M。我感到困惑。 - Royi Namir

37

AWS::Serverless::Function 用于与AWS SAM一起使用,而AWS::Lambda::Function 用于在普通的Cloudformation中使用。它们本质上都是模拟Lambda函数,只是针对不同的框架,因此有更或多或少相同的名称。

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

然后,无服务器框架只是建立在无服务器原则之上的软件项目,并且可以与AWS Lambda(以及其他一些服务)一起工作。 它与其他框架(如Chalice或Zappa)并没有太大差异(它们都是基于Python构建的运行在AWS Lambda上的serverless框架)。


8

从框架角度来看,两者之间没有太大的区别,但是在技术上有以下细微差异:

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

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

AWS Lambda:它允许在其他AWS资源引起触发器的情况下执行代码片段,例如AWS CloudWatch警报、DynamoDB表中的更改、S3存储桶中的上载事件等。

AWS Lambda函数存在限制,建议您将代码大小降低,并将较大的函数分解成较小的函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接