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