无服务器 - 服务之间通信的选项?

Serverless - Options for communicating between services?

我有几个不同的服务(由无服务器框架生成)需要相互通信。数据敏感,需要身份验证。

我目前的策略是为每个服务创建一个 api 密钥,使用 json 网络令牌在服务之间进行通信,如下面的令牌。

fM61kaav8l3y_aLC/3ZZF7nlQGyYJsZVpLLiux5d84UnAoHOqLPu4dw3W7MiGwPiyN

服务间通信还有哪些其他选项?这种方法有什么缺点吗?重申一下,请求需要经过身份验证并适当处理敏感数据。

您需要同步还是异步通信? 一个好的方法是使用事件,因为 aws-lambda 被设计为基于事件的系统。因此,您可以使用 SNS or SQS 来分离您的服务。

如果您只想从一项服务调用另一项服务,您可以直接通过 aws-sdk see docs 调用 lambda 函数。因此,您不会添加 API 网关端点,您的 lambda 将保持私有。

为了更好地回答您的问题,您应该简要介绍一下您的应用程序,并举例说明您将进行的服务间调用。

据我了解,您打算将给定服务中的各种功能设为私有。这样做时,每个服务都可能有类似于以下内容的 serverless.yml 文件: Image shows the setup for api keys used with a serverless framework rest api

虽然这是一种合适的方法,但不如使用 ** 自定义授权器 ** 可取。

自定义授权器允许您在目标 AWS Lambda 函数之前 运行 AWS Lambda 函数。这对微服务架构很有用,或者当您只想在 运行 整合您的业务逻辑之前进行一些授权时。

如果你熟悉ReactRouter的onEnter函数,Custom Authorizers之间的逻辑是相似的。

关于实现,由于是利用不同的服务来部署各种函数,考虑将函数部署到AWS上,并记下Lambda函数的ARN。按照这些链接查看自定义授权方的适当设置。

These images show the serverless.yml file for using custom authorizers when the authorizers are not part of the service but rather deployed on lambda already

以下 github 项目 aws-node-auth0-custom-authorizers-api/frontend 是一个很好的示例,说明当授权函数与私有函数位于同一服务中时如何实现自定义授权。请注意,您的情况略有不同,但您应该期望他们的授权函数逻辑是相似的——只有项目结构应该不同