AWS Lambda 带 API 网关用于 Angular 后端?

AWS Lambda w/ API Gateway for Angular back-end?

我仍在努力思考 AWS Lambda 的局限性,尤其是现在 AWS API 网关为使用 Lambda 提供 REST 请求提供了很多选择。

我正在考虑使用 Lambda 作为后端在 Angular 中构建网络应用程序。

对于简单的 CRUD 内容,它似乎很简单,但是身份验证呢?我可以在 Lambda 中使用 Passport 之类的东西来进行用户身份验证吗?

是的,您几乎可以做任何事情,只需将会话存储在 AWS 托管数据库(RDS、Dynamo 等)上即可。但请注意 确切地说 您是使用 lambda 购买的。它有很多权衡。

  • 价格: EC2 服务器每月收费固定,但 lambda 按调用收费。哪个更便宜取决于您的使用模式。当没有人使用您的产品时,Lambda 更便宜,随着使用量的增加,EC2 很可能更便宜。

  • 扩展: EC2 可以扩展(在很多方面),但更多的是 "manual" 和 "chunky"(您只能 运行 1 个服务器或 2 个,而不是 1.5)。 Lambda 具有细粒度缩放。你不用担心它,但你对它的控制也少了。

  • 性能: Lambda 有一定的速度,你几乎没有控制权。在某些情况下,它可能会有巨大的延迟,因为它们会启动新的容器来处理流量。 EC2 为您提供了更多的性能调整选项。 (盒子大小、机上缓存、使用最新的 node.js、从盒子中删除不需要的服务、能够 运行 strace 等)您可以为超额容量付费以确保低延迟。

  • 代码: Lambda 与 EC2 的编码方式略有不同。 Lambda 强制您遵守一些主要是最佳实践的惯例。但是 EC2 允许您为了性能或开发速度而违反它们。 Lambda 是一个 "black box",当您需要进行故障排除时,您的控制和可见性较低。

  • 设置: Lambda 更容易设置,总体上需要的知识更少。 EC2 要求您是一名系统管理员并了解 VPC、EBS、VPN、AMI 等首字母缩略词

but what about authentication?

最模块化的方法是使用 API 网关的 Custom Authorizers(自 2016 年 2 月以来新增)来提供实施身份验证和授权的 AWS Lambda 函数。

我写了一个通用的 Custom Authorizer that works with Auth0 第三方单点登录服务。

另请参阅此问题:

Would I be able to use something like Passport within Lambda to do user authentication?

不容易。 Passport 依赖于您必须创建和配置的回调 URL。

在此发布,因为这是我在 Lamdba 上搜索 运行ning NodeJS Passport 身份验证时发现的第一个线程。

既然你可以 运行 Express apps on Lamda,你真的可以 运行 直接在 Lambda 上使用 Passport。然而,Passport 确实是专门为 Express 设计的中间件,如果您一开始就为 Lamda 设计,您可能不希望 Express 臃肿(因为 API Gateway 基本上完成了所有这些工作)。

正如@Jason 提到的,您可以使用自定义授权方。这看起来很简单,但是谁想要构建所有可能的身份验证方法呢?这是 Passport 的优势之一,人们已经为您做到了。

如果您使用 Servlerless Framework, someone has built out the "Serverless-authentication" project. This includes modules for many of the standard auth providers: Facebook, Google, Microsoft. There is also a boilerplate for building out more auth providers

我花了很多时间研究 运行 所有这些,希望它能帮助其他人。