AWS SAM (Serverless Application Model)和serverless framework有什么区别?

16

我们正在进行一个项目,尝试在Node.js中构建无服务器应用程序。我遇到了AWS SAM和Serverless这两个术语。哪个更适合实现无服务器应用程序?

3个回答

20
您可以查看此文章,比较SAM和Serverless:SAM与Serverless的比较 该页面列出的关键区别如下:

Serverless Framework是一个框架,使编写包括AWS、Google Cloud、Kubeless等众多供应商的基于事件驱动的函数变得容易。对于每个提供商,可以配置一系列事件来调用该函数。该框架是开源的,并定期更新。

AWS Serverless Application Model (SAM)是CloudFormation前面的抽象层,使在AWS中编写无服务器应用程序变得容易。有三种不同类型的资源类型:Lambda、DynamoDB和API Gateway。使用SAM Local,可以通过使用Docker容器在本地运行Lambda和API Gateway。

这两个框架都具有生成CloudFormation的共同点。换句话说:它们都将CloudFormation抽象化,以便您需要编写更少的代码来构建无服务器应用程序(在SAM的情况下)和部署Lambda函数(对于SAM和Serverless)。最大的区别在于Serverless被编写为将FaaS(函数即服务)函数部署到不同的供应商。另一方面,SAM是专门针对AWS的抽象层,不仅使用Lambda和API Gateway,

使用FaaS进行函数计算,使用DynamoDB进行存储,使用API Gateway创建无服务器HTTP端点。

SAM Local的另一个不同之处在于,它允许您在本地运行Lambda函数并在本地启动API Gateway。这使得在不将Lambda函数部署到AWS的情况下更轻松地开发和测试Lambda函数。使用Serverless框架,您也可以通过命令行调用Lambda函数,但前提是它们已部署到AWS并通过API Gateway可用。


1
我对“无服务器”这个术语感到非常困惑。你能给我提供一个清晰的答案吗? - Sagar

12

SAM 和 SF 之间的主要区别:

1)SAM 只支持 AWS;而 SF 支持多个后端,因此可以部署多云/混合云应用程序。SF 还支持 Kubernetes 后端。

2)对于 AWS,SAM 和 SF 模板都编译到 CloudFormation(CF)。SAM 有使用Transform的能力,这实质上是 CF 的宏。

3)SAM 是用 Python 编写的;而 SF 是用 JavaScript 编写的。

4)SF 有插件,允许您运行任何代码(包括非 JavaScript 代码);这有效地意味着可以超越 CloudFormation(CF)的限制,因为始终会有一些尚不受 CF 支持的新功能。插件系统也非常灵活,非常有用。

5)SF 的变量系统更加灵活,可以根据其他参数(例如 stage)的存在来进行动态包含;而 SAM 的变量更接近 CF。


0
阅读了几个答案。在构建几个无服务器项目时,必须注意以下几点:
1. 无服务器不仅可以设置和运行函数,还可以通过CloudFormation使用几乎任何可用资源。 2. 无服务器本地启动不仅可以运行Lambda函数,还可以运行几乎任何资源,如数据库、队列、API等(有时需要一些技巧),而无需使用Docker。 3. 无服务器还允许将本地资源与AWS资源结合在单次运行中,隐式使用aws库。 4. 所以目前(在尝试SAM之前),我看不出为什么要使用SAM而不是无服务器。

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