【问题标题】:Serverless - Options for communicating between services?无服务器 - 服务之间通信的选项?
【发布时间】:2017-03-26 13:08:32
【问题描述】:

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

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

fM61kaav8l3y_aLC/3ZZF7nlQGyYJsZVpLLiux5d84UnAoHOqLPu4dw3W7MiGwPiyN

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

【问题讨论】:

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


    【解决方案1】:

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

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

    为了更好地回答您的问题,您应该简要概述您的应用程序以及您将进行的服务间调用示例。

    【讨论】:

    • 谢谢!那讲得通。通信是异步的。一个简单的例子是一个服务执行任务,另一个服务发送电子邮件(但我只希望授权服务器能够触发发送电子邮件的功能)。
    • @samcorcos 听起来您想扭转这种依赖关系。您不希望电子邮件因为电子邮件服务关闭而无法发送。在这种情况下,您希望它被延迟。因此,一种解决方案可能是将 SendEmail 命令放在 SQS 上并让 lambda 监听这些命令。这样,如果 lambda 离线,要发送的电子邮件就会堆积起来,并在 lambda 再次在线时发送。
    【解决方案2】:

    据我了解,您打算将给定服务中的各种功能设为私有。这样做时,每个服务都可能具有类似于以下内容的 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 是一个很好的示例,说明当授权函数与私有函数在同一服务中时如何实现自定义授权。请注意,您的情况略有不同,但您应该期望他们的授权函数逻辑是相似的 - 只有项目结构应该不同

    【讨论】:

      猜你喜欢
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      • 2016-06-10
      相关资源
      最近更新 更多