12 Factor App & AWS Serverless Applications

查看原文

12-Factor App 整理了一系列关于配置,部署,运行时,服务间通信等话题的方法论;这篇文章则讲述了如何在写 AWS Lambda + API Gateway 程序的时候符合这套标准。

  • 每个 Serverless 应用使用单独的库托管代码,编译成单独的交付产物拿去部署。拆库的标准是处理共享的事件的代码,需要放在一个仓库中。
  • 使用各种语言标准的库依赖管理软件,例如 node.js npm, python pip, java maven, NuGet-c#, go get 等。
  • 应用的配置放在环境变量中。应用读取配置的时候用类似 process.env, os.environ 等方法读取。如果配置是敏感的,那么将 key-value 存放在 KMS 这样的服务中。在 API Gateway 中这种配置可以是 stage variables。
  • Lambda 只允许给 function execution 起一个后端服务,如果想要别的后端服务,那就另起一个,对于本服务通过配置将其它服务的 dns 或者 http endpoint 传进来。
  • Lambda 程序提供了 CD & CD 的流程。
  • 如果程序有 stateful 的信息,那就把它们存进数据库,缓存。保证程序是 stateless 的。
  • Lambda 应用没有暴露出端口信息,但是会提供 AWS API 满足同步,异步,流式调用的需求。
  • Lambda 应用内建了根据流量自动扩展,不同与传统的基于物理机/虚拟机/容器的方案,你只需要管业务,而不用操心扩容。
  • Lambda 不需要 Shutdown,因为整个程序都是根据 event / trigger 自动创建销毁,所以 Disposability 特性不需要再去满足。只是它额外引入了 code starts 的问题。
  • Lambda 架构中你也不需要关心 log files, logging daemons, collectors 只需要将日志打到 console 即可。它提供了 Execution logs 和 Access logs 应该够大部分场景用。另外,CloudWatch Logs 可以将日志中的事件当作触发器,可以在满足某些模式的情况下触发新的 Lambda。