AWS Lambda + API 网关开发最佳实践

AWS Lambda + API Gateway Development Best Practices

我们是一个由 5 名开发人员组成的团队,需要一些关于在 AWS 上进行开发的最佳方式的指导,特别是使用 AWS Lambda、API Gateway、DynamoDB 和 Cognito。我们正在寻找开发的最佳实践。 5个开发者如何在不踩对方脚趾的情况下开发?是不是个人账户,使用每个开发者都可以使用的云生成模板更好?

还是使用serverless框架,每个开发者使用不同的环境?看起来无服务器提供了部署到各种环境的能力,但我相信不同环境的目的是 CI/CD 相同的代码可以通过各种 SDLC 移动,或者可以将特定代码推送到特定环境。

我建议使用无服务器框架来提高开发人员的工作效率。我们遵循的一些做法

  • 在无服务器框架生成的 CloudFormation 堆栈模板中保留所有基础架构更改。

  • 为每位开发人员创建不同的 API 网关阶段。

  • 利用无服务器插件。例如 Serverless Offline、Severless DynamoDB Local 等

  • 如果您计划设置混合开发环境,请使用 NodeJS 代理,例如使用无服务器离线插件模拟 API 本地网关和 Lambda,AWS 中带有 Cognito 的 S3。

  • 使用像 Gulp 这样的任务运行器来自动启动 Web 服务器、部署等

  • 使用环境变量来存储环境细节。

除此之外,最好使用单独的 AWS 帐户进行生产。您可以配置 AWS 组织以简化对多个账户的管理。

在我的公司,我们主要使用 Lambda + API Gateway + DynamoDB 构建了 5~6 个微服务,并提出了一些指南和模板 https://github.com/balmbees/lambda-microservice-template

对于环境变量,
我建议做 provider: name: aws runtime: nodejs4.3 environment: ${file(./env/${opt:stage}.yml)} 在 serverless.yml 中,只需使用 process.env,这意味着将环境变量放入 git 存储库中,(例如 /env/production.yml)
您可以编写 on CI/CD 脚本来仅在进行部署时注入这些变量,但我们只是决定这样做,因为 git 存储库无论如何都是私有的。

对于开发指南,

使用打字稿。

强烈推荐。非常有助于保持一切正常工作,而无需编写大量的测试代码来确保您不会犯编译可捕获的错误。

如果您正在考虑制作 Restful API,请查看 this