服务
关于
CloudProse博客
无服务器

检查AWS如何构建自己的无服务器应用程序

没有魔术,只有彻底执行。
福雷斯特Brazeal Trek10 191210 171202
阿甘(Forrest Brazeal) | 2019年10月15日

本周,AWS开源 一个应用程序 乍一看似乎并没有什么实际用途:这是对其实现的精简实现 无服务器应用程序存储库服务,实际上是带有CRUD后端的静态网站。可能不是您一直想要在环境中部署的东西。当然,在这种情况下,应用程序本身并不是重点,除非它反映了真实的生产服务而不是人为的示例。真正的价值在于,或多或少地了解AWS如何为他们在生产环境中部署和运行的无服务器应用程序布置代码和配置。

您可以阅读他们的 博客文章 并通过 知识库Wiki 详细介绍如何将它们组合在一起,我建议您这样做。在这里,我想指出一些对我很重要的要素。

Monorepo,许多模板

应用程序的每个``组件''(后端,前端,异步分析管道,监视)都有自己的子文件夹,自己的SAM模板,自己的CI / 光盘,自己的单元测试。还有一个顶层模板可以将所有内容嵌套在其中。这种方法的好处是:可以更好地控制发布的管理方式。部署顶层堆栈,并以正确的顺序将整个应用程序与所有组件一起吐出,而不必担心依赖关系。向单个堆栈推出更新,您可以快速移动而不会破坏太多东西。

通用的CI / 光盘接口,但按组件角色

``您必须深入研究才能找到它们,但该项目中最有用的元素可能甚至不在回购中:它们作为单独的SAR应用程序发布,用于 CI (一个用于单元测试的CodeBuild项目,与GitHub存储库集成)和 光盘 (带有构建的CodePipeline-> test ->部署阶段)。即插即用CI / 光盘?是的。这里一个有趣的选择是将IAM角色保留在SAR应用程序之外:换句话说,不存在具有绝对部署权限的全局管理员``CD''角色。取而代之的是,AWS做出了一个更安全但劳动密集型的选择,以传递一个角色给每个包含成功部署该组件所需的(通常是相当广泛的)权限列表的组件。这是其他商店很难遵循AWS足迹的地方。

每个组件都是其自己的SAR应用程序,而不仅仅是嵌套堆栈

回购Wiki包含一个 可爱,自以为是的CloudFormation最佳做法集 并且非常适合使用嵌套堆栈, 我们也是Trek10的粉丝。从技术上讲,虽然此应用程序不使用嵌套的CloudFormation堆栈,但使用嵌套的SAR应用程序。同样的想法,还有在内部发布这些应用程序以提高可发现性的额外好处。根据您是否认为自己的应用程序组件值得单独发布到SAR,里程可能会有所不同。在这种情况下,这可能是过大的。但是不能责怪无服务器应用仓库团队为自己服务的使用建模!

没有部署时间参数

``除了必须在Secrets Manager中播种的CI / 光盘的Github令牌外,您在部署时可以指定的唯一参数是阶段描述符,它负责堆栈的命名空间。其他所有内容都是动态生成的(此处没有硬编码的S3存储桶或DynamoDB表名称),也可以通过Trem10的Ryan Scott Brown通过SSM参数存储在嵌套堆栈之间共享。 最近推荐。甚至扩展到Lambda函数,该函数从SSM中提取其参数,而不使用环境变量。

无环境变量策略确实需要功能正常的缓存解决方案来避免压倒性的Parameter Store有限的吞吐量,而且我不确定我是否知道在突发负载期间它将如何扩展。我认为它可能更多地受到折衷的启发,例如Lambda环境变量并非在所有地区都可用,并且我认为对于非敏感参数,您仍应考虑将它们尽可能地放入环境变量中。

堆栈本地的任何配置(例如DynamoDB计费模型)都硬编码在SAM模板中。除非您希望您的服务在不同的环境中使用不同的配置,否则这将很好地工作,这让我感到失望...

提供的CI / 光盘尚未真正投入生产。

``所有要素都在这里提供真正的生产服务:存在一个带有某些CloudWatch指标和仪表板的''操作''堆栈,您可以使用管道来推送您的代码...只要将其保留在相同的AWS环境中即可。没有多帐户管道,代码升级等概念。令我感到失望的是,作为管道的一部分,没有对部署的代码运行端到端测试。我确信这些东西已经存在于AWS的实际无服务器App Repo服务中,但是显然,为了提供合理的示例大小,它们必须停下来。

总体而言:没有魔力,只有彻底执行

真的,这里没有秘密的调味料。 AWS多年来一直在执行他们告诉我们的所有工作。无服务器应用程序回购可能没有明显目的被滥用(尽管亚历山大·西莫维奇(Aleksandr Simovic)的 “部署到S3” SAR应用程序可轻松用于静态网站),但总的来说,令人鼓舞的是,无服务器并不需要一些神奇的公式:AWS以与客户相同的方式使用相同的服务。

像往常一样,最难的部分包括在细节中:IAM权限,参数卫生,缓解冷启动。此存储库为您克服这些挑战提供了一个很好的蓝图,但这取决于您执行。

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