我正在玩Cloudformation无服务器转换,并试图找出如何以及何时使用AWS::Serverless::Function
或AWS::Lambda::Function
。出于某种原因,Lambda版本用于AWS中的SAM示例。这非常令人困惑。 SAM github。然后还有servlerless
框架本身,它实际上是一个nodejs
框架。所有这些让我非常困惑。
首先,让我解释一下这些。
AWS无服务器堆栈 - AWS提供无服务器技术的组合,包括API Gateway,Lambda,S3等。
最初引入Lambda时,使用Cloudformation使用这些技术开发无服务器应用程序是一项挑战。问题是由于为API Gateway和Lambda编写Cloudformation的复杂性。
这就是无服务器框架的用武之地。
无服务器框架 - 一个开源DevOps框架,它使用名为serverless.yml的简单文件简化了API网关和Lambda的定义。由于无服务器框架使用约定优于配置,因此只需几行代码即可定义Lambda,API网关等。在无服务器框架下,生成基于serverless.yml中定义的数据的Cloudformation。此外,Serverless Framework还支持多个云提供商。
后来AWS引入了他们自己的简化脚本语言AWS SAM(注意:AWS SAM不是像目前一样的带有插件和扩展支持的无服务器的框架),以降低定义CloudFormation作为无服务器框架的替代方案的复杂性。
AWS::Lambda::Function
是用于定义Lambda函数的Cloudformation语法。
AWS::Serverless::Function
是用于定义Lambda函数的AWS SAM语法,该函数在执行AWS SAM时按照惯例在Cloudformation(AWS::Lambda::Function
)和相关资源内部创建Lambda函数。
AWS::Serverless::Function
适用于与AWS SAM一起使用,而AWS::Lambda::Function
适用于普通Cloudformation。它们本质上都是对Lambda函数进行建模,但它只是针对不同的框架,因此具有不同的名称或多或少相同的东西。
从概念上讲,无服务器或Lambda函数之间没有区别。无服务器是AWS称为Lambda(和API网关)的通用术语。
无服务器框架只是一个基于无服务器原则的软件项目,可以与AWS Lambda(以及其他)一起使用。它与其他框架(例如Chalice或Zappa(在AWS Lambda上运行的基于Python的无服务器框架)完全没有太大区别)。