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

时间:2017-03-25 16:03:48

标签: amazon-web-services aws-lambda aws-api-gateway serverless-framework

我有一些不同的服务(由无服务器框架生成)需要彼此之间进行通信。数据很敏感,需要进行身份验证。

我目前的策略是使用json web token(如下面的标记)为服务之间的每个服务通信创建一个api密钥。

fM61kaav8l3y_aLC/3ZZF7nlQGyYJsZVpLLiux5d84UnAoHOqLPu4dw3W7MiGwPiyN

服务之间进行通信还有哪些其他选择?这种方法有什么缺点吗?重申一下,需要对请求进行身份验证并妥善处理敏感数据。

2 个答案:

答案 0 :(得分:2)

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

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

为了更好地回答您的问题,您应该简要概述一下您的申请,以及您将进行的服务间电话示例。

答案 1 :(得分:0)

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

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

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

如果您在使用ReactRouter时熟悉onEnter函数,则自定义授权程序之间的逻辑类似。

关于实现,由于利用不同的服务来部署各种功能,考虑将功能部署到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是当授权程序功能与私有函数位于同一服务中时如何实现自定义授权程序的一个很好的示例。请注意,您的情况略有不同,但您应该期望他们的授权者函数逻辑是相似的 - 只有项目结构应该不同