服务
关于
CloudProse博客
Think FaaS播客

无服务器服务发现-Think FaaS播客

Forrest可帮助您在AWS中为无服务器应用程序找到服务发现的浑水(并了解为什么Lambda环境变量如此危险)!
福雷斯特Brazeal Trek10 191210 171202
阿甘(Forrest Brazeal) | 2018年6月7日

2018年6月7日,星期四

在Google Play上订阅 订阅苹果播客

成绩单

嗨,我是Trek10的Forrest Brazeal,这是“ Think FaaS”,在这里我们比运行Lambda函数花费更少的时间了解无服务器计算的世界。因此,请紧记五分钟-现在是“ Think FaaS”的时候了。

今天,我想谈谈无服务器应用程序的服务发现。这显然是一个五分钟的大话题,但是当涉及到该领域的最佳实践时,确实存在真空,因此,让我们尝试在有空的时候清除一些问题。

服务发现是告诉您各种后端服务如何在云的广泛范围内相互查找的过程,这不是无服务器应用程序所独有的问题;它是任何具有多个相互通信的组件的分布式系统所固有的。

但是随着架构变得更加分散,微服务变成了单独部署的功能,每个功能都有自己的端点,因此确定功能A的哪个版本应该调用功能B的哪个版本可能是一个真正的挑战。

我们看到了很多不好的做法,所以让我首先回顾一下 如何不对无服务器应用程序进行服务发现。假设您有一个在无服务器框架项目中管理的Lambda函数,该事件会在发生某些事件时触发。我们将其称为本地服务。此功能需要进行一些处理,然后调用另一个服务的HTTP端点,我们将其称为“远程服务”。

但是,远程服务是在不同的无服务器框架项目中管理的,该项目部署在不同的环境中,甚至可能由不同的人来完成。因此,在部署本地服务时,您会将远程服务的终结点和API密钥作为环境变量传递给Lambda函数。

这是一个有几个原因的问题。显然,如果远程服务更改了其端点,则必须更新本地服务的部署。因此,您已经将两个应该解耦的事物紧密地结合在一起了。

不仅如此,任何部署本地服务的人都必须知道在哪里可以找到远程服务的最新配置信息,因此必须引入一些其他共享数据的过程,甚至可能访问远程环境。将其乘以许多服务,会造成延迟,安全问题和人为错误的余地。

当然,最糟糕的是,您将远程服务的API密钥以纯文本格式放置在您的环境变量中,这意味着任何可以登录Lambda控制台进行本地服务的人都可以看到它。

顺便说一句,我们之前在此播客中已经谈到过Lambda环境变量的局限性,但我将在这里重申。请勿将任何数据放入Lambda环境变量,即...

一种) 敏感且未加密

b) 动态 , 要么

C) 紧密耦合到其他服务

…除非您想要一个不安全且纠结的混乱。因此,显然我们需要其他方法来在不同服务之间共享配置信息。

最好的做法是 集中式服务注册表,这是存储所有共享配置值的知名位置。在AWS中有几种方法可以做到这一点。他们有一个称为“服务目录”的东西,可以维护产品列表并代表您部署它们,但这实际上并不是跟踪正在运行的服务之间的实时配置数据的一种方法。

相反,您可以在中央AWS账户中使用DynamoDB表,甚至更好的是,使用SSM参数存储。在这里,您可以放置​​参数键和值,使用KMS对它们进行静态加密,对它们进行版本控制,然后根据需要对其进行标记。

因此,回到我们的本地服务示例,您可以使用环境变量部署该服务,告诉它在参数存储中“ remote_service / prod / endpoint”的位置查找远程服务。现在,远程服务有责任根据需要更新该参数的值,所有本地服务需要知道的是如何访问参数存储。

但是显然,仅集中式注册表是不够的。 您还需要某种缓存解决方案 在本地服务上。查找远程参数时,您不希望每次执行函数时都受到性能影响。幸运的是,有一些开源工具可以为SSM参数存储实现Lambda缓存。严翠 在NodeJS中有一个;亚历克斯·卡萨博尼 在Python中有一个。这些实现应 大多 将参数查找延迟限制为功能的冷启动。

最后, 您将需要一些保护秘密的方法,尤其是在您开始跨环境使用服务时。 iRobot的Ben Kehoe是这一集的重要思想来源,他有一个名为 ssm-ctl 在SSM中使用一种非常巧妙的方法来管理秘密参数,我们在Trek10上通过 无服务器的秘密 无服务器框架插件。但是,正如我们之前在此播客上所说的那样,AWS现在推出了一项名为Secrets Manager的新服务,可让您安全地以集中方式轮换和检索秘密。我们还没有做很多工作,但是我建议您检查一下是否有新项目。

棘手的部分,无论您选择哪个选项,都是管理跨帐户IAM角色,该角色使您可以访问其他环境中的秘密。但是我们从来没有说过无服务器服务发现是很轻松的。好消息是,经过精心决定将配置抽象到中央存储,注意缓存并牢记安全性,您可能会“发现”您的服务比您想像的还要强大。

如果您准备针对无服务器环境采取最佳实践的下一步,Trek10将很乐意为您提供帮助。您可以在Twitter上找到我们 @ Trek10inc 或打我 @forrestbrazeal,我们将在下一集Think FaaS上见。

作者
福雷斯特Brazeal Trek10 191210 171202
阿甘(Forrest Brazeal)