开发、测试和部署使用 AWS 服务 SQS、SES、Lambda 的无服务器应用程序的最佳方式是什么
What is the best way to develop, test and deploy serverless applications which uses AWS services SQS, SES, Lambda
我正在尝试开发一个无服务器应用程序,它将使用 AWS SQS(简单队列服务)、AWS SES(简单电子邮件服务)和 AWS Lambda。该应用程序将执行以下步骤:
- 在 SQS 队列中获取一些消息
- 触发 Lambda 函数来处理所有这些消息
- Lambda 将使用 AWS SES 发送电子邮件或使用第三方 API 发送短信,具体取决于消息的类型
为了对此进行测试,我创建了队列、lambda 并配置了 SES,所有这些都是使用 https://aws.amazon.com 的 Web 界面手动完成的。对于 Lambda 函数,我只是在 Lambda 控制台提供的网络 IDE 中输入我的代码。因为它是一个非常简单的 POC,所以不需要任何测试,我就让它工作了。
现在,我想把它变成一个生产就绪的应用程序。我的要求:
- 在我的机器上对整个应用程序进行本地编码
- 在类似于 AWS 的环境中进行本地测试
- 将代码发布到 GitLab,然后最终部署到 AWS
- 所有这些资源(SQS 队列、SES 配置、Lambda 函数)将通过代码自动创建
根据我在网上阅读的内容,我可以找到 3 种不同的选择:
- AWS Cloudformation
- AWS SAM
- 无服务器框架
我的问题是:
- 对于我的用例,无服务器应用程序是正确的技术还是我需要其他东西,例如 AWS SWF 或 AWS Step Functions?我还阅读了 AWS Lambda 应用程序。他们是别的东西吗?
- 在成本、设置和使用的便利性方面,哪一个是最佳选择?我检查过 CloudFormation 本身不需要任何费用,您只需为正在使用的服务(SQS、SES、Lambda)付费,但对于 Serverless,使用该框架会产生一些费用。
- 除了这些还有其他选择吗?
我将使用 NodeJS 编写代码,只使用 AWS 作为我的云平台。
简短回答:是的,这完全可以使用无服务器功能,实际上是一个典型的无服务器用例。
长答案:
这里没有必要使用 AWS SWF 或 AWS Step Functions。但是,您可以使用 Step Functions 以防您的流程变得更加复杂(例如,涉及更多外部服务并且您需要特定的错误处理,或者您想要提高并行处理能力)。
首先,CloudFront无法与AWS SAM或Serverless Framework相提并论。您是指 AWS CloudFormation 吗? CloudFront 是一个 CDN,可以提供(和缓存)任何类型的内容,而 CloudFormation 是一个将您的基础架构描述为代码的工具。
CloudFormation 是 AWS SAM 和无服务器框架的“基础”
因为他们都将模板代码翻译成 CloudFormation
代码在最后。然而,CloudFormation 使得开发无服务器
我认为功能有点复杂。这就是为什么像 AWS 这样的工具
SAM 或无服务器框架在某个时候突然出现。 AWS SAM 是
基本上是 CloudFormation 的扩展,即它提供
其他资源类型,例如 AWS::Serverless::Function
但
其他一切都是 CloudFormation。无服务器框架还允许
您添加 CloudFormation 资源但有自己的语法
指定无服务器函数。
在成本方面,CloudFormation、AWS SAM、Serverless Framework都是
自由。但是,您可以使用无服务器框架的一些高级功能,但不是必须的。但是,CloudFront 不是免费使用的 - 但我相信这不是您正在寻找的服务。除此之外,对于 SQS、SES 和 Lambda,您只需按使用量付费。
我个人更喜欢 AWS SAM,因为你更接近 CloudFormation 代码,并且与无服务器框架相比,你不需要插件来绕过无服务器框架为你做的抽象。对于要离开标准 hello world 示例的 'bigger' 个项目,您会注意到这一点。另一方面,无服务器框架非常流行,因此有很多资源可以帮助您。看你喜欢什么:)
在基础设施工具方面,你可以看看AWS CDK (a good starting point is cdkworkshop.com),它变得越来越流行。
本地开发可以看看Localstack。免费版支持在本地模拟SQS和SES,所以应该会有帮助。
我正在尝试开发一个无服务器应用程序,它将使用 AWS SQS(简单队列服务)、AWS SES(简单电子邮件服务)和 AWS Lambda。该应用程序将执行以下步骤:
- 在 SQS 队列中获取一些消息
- 触发 Lambda 函数来处理所有这些消息
- Lambda 将使用 AWS SES 发送电子邮件或使用第三方 API 发送短信,具体取决于消息的类型
为了对此进行测试,我创建了队列、lambda 并配置了 SES,所有这些都是使用 https://aws.amazon.com 的 Web 界面手动完成的。对于 Lambda 函数,我只是在 Lambda 控制台提供的网络 IDE 中输入我的代码。因为它是一个非常简单的 POC,所以不需要任何测试,我就让它工作了。
现在,我想把它变成一个生产就绪的应用程序。我的要求:
- 在我的机器上对整个应用程序进行本地编码
- 在类似于 AWS 的环境中进行本地测试
- 将代码发布到 GitLab,然后最终部署到 AWS
- 所有这些资源(SQS 队列、SES 配置、Lambda 函数)将通过代码自动创建
根据我在网上阅读的内容,我可以找到 3 种不同的选择:
- AWS Cloudformation
- AWS SAM
- 无服务器框架
我的问题是:
- 对于我的用例,无服务器应用程序是正确的技术还是我需要其他东西,例如 AWS SWF 或 AWS Step Functions?我还阅读了 AWS Lambda 应用程序。他们是别的东西吗?
- 在成本、设置和使用的便利性方面,哪一个是最佳选择?我检查过 CloudFormation 本身不需要任何费用,您只需为正在使用的服务(SQS、SES、Lambda)付费,但对于 Serverless,使用该框架会产生一些费用。
- 除了这些还有其他选择吗?
我将使用 NodeJS 编写代码,只使用 AWS 作为我的云平台。
简短回答:是的,这完全可以使用无服务器功能,实际上是一个典型的无服务器用例。
长答案:
这里没有必要使用 AWS SWF 或 AWS Step Functions。但是,您可以使用 Step Functions 以防您的流程变得更加复杂(例如,涉及更多外部服务并且您需要特定的错误处理,或者您想要提高并行处理能力)。
首先,CloudFront无法与AWS SAM或Serverless Framework相提并论。您是指 AWS CloudFormation 吗? CloudFront 是一个 CDN,可以提供(和缓存)任何类型的内容,而 CloudFormation 是一个将您的基础架构描述为代码的工具。
CloudFormation 是 AWS SAM 和无服务器框架的“基础” 因为他们都将模板代码翻译成 CloudFormation 代码在最后。然而,CloudFormation 使得开发无服务器 我认为功能有点复杂。这就是为什么像 AWS 这样的工具 SAM 或无服务器框架在某个时候突然出现。 AWS SAM 是 基本上是 CloudFormation 的扩展,即它提供 其他资源类型,例如
AWS::Serverless::Function
但 其他一切都是 CloudFormation。无服务器框架还允许 您添加 CloudFormation 资源但有自己的语法 指定无服务器函数。在成本方面,CloudFormation、AWS SAM、Serverless Framework都是 自由。但是,您可以使用无服务器框架的一些高级功能,但不是必须的。但是,CloudFront 不是免费使用的 - 但我相信这不是您正在寻找的服务。除此之外,对于 SQS、SES 和 Lambda,您只需按使用量付费。
我个人更喜欢 AWS SAM,因为你更接近 CloudFormation 代码,并且与无服务器框架相比,你不需要插件来绕过无服务器框架为你做的抽象。对于要离开标准 hello world 示例的 'bigger' 个项目,您会注意到这一点。另一方面,无服务器框架非常流行,因此有很多资源可以帮助您。看你喜欢什么:)
在基础设施工具方面,你可以看看AWS CDK (a good starting point is cdkworkshop.com),它变得越来越流行。
本地开发可以看看Localstack。免费版支持在本地模拟SQS和SES,所以应该会有帮助。