首先,让我解释一下这些术语。
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 函数。
AWS::Serverless::Function
用于与AWS SAM一起使用,而AWS::Lambda::Function
用于在普通的Cloudformation中使用。它们本质上都是模拟Lambda函数,只是针对不同的框架,因此有更或多或少相同的名称。
概念上讲,无服务器或Lambda函数之间没有区别。无服务器是AWS称为Lambda(和API Gateway)的通用术语。
然后,无服务器框架只是建立在无服务器原则之上的软件项目,并且可以与AWS Lambda(以及其他一些服务)一起工作。 它与其他框架(如Chalice或Zappa)并没有太大差异(它们都是基于Python构建的运行在AWS Lambda上的serverless框架)。
从框架角度来看,两者之间没有太大的区别,但是在技术上有以下细微差异:
无服务器:它创建IAM角色、S3存储桶、Cloudformation模板、创建、更新和部署代码。可以通过命令调用程序。
还有一个重要点是,当我们想要删除函数和所有相关服务(如S3、IAM角色等)时,可以使用一条单行命令完成。 在AWS Lambda中,我们需要逐个手动删除每个服务。
AWS Lambda:它允许在其他AWS资源引起触发器的情况下执行代码片段,例如AWS CloudWatch警报、DynamoDB表中的更改、S3存储桶中的上载事件等。
AWS Lambda函数存在限制,建议您将代码大小降低,并将较大的函数分解成较小的函数。
serverless.template
文件是否为 SAM 文件? - Royi Namir