【问题标题】:AWS Lambda + API Gateway Development Best PracticesAWS Lambda + API Gateway 开发最佳实践
【发布时间】:2017-10-28 15:05:46
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    • 为每个开发者创建不同的 API Gateway 阶段。

    • 利用无服务器插件。例如无服务器离线、无服务器 DynamoDB 本地等。

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

    • 使用 Gulp 等任务运行器自动启动 Web 服务器、部署等。

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

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

    【讨论】:

    • 我不完全同意“生产的单独帐户”部分,但除此之外我们有类似的经历。
    • 这不是必须的,您可以使用不同的阶段或区域进行制作。我们在这里面临的挑战是,很难在阶段授予权限,并且可能会意外地使部署进入开发人员生产的阶段。
    • 你的解释很有道理。但对我们来说,lambda 只是数据流中的一小步,即使开发人员不小心将某些东西部署到生产环境中,我们也可以轻松恢复。所以对我们来说使用阶段就足够了:)
    【解决方案2】:

    在我的公司,我们主要使用 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 repo 中,(例如 /env/production.yml)
    您可以在 CI/CD 脚本上编写仅在进行部署时注入这些变量,但我们只是决定这样做,因为 git repo 无论如何都是私有的。

    对于开发指南,

    使用打字稿。

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

    如果您正在考虑制作 Restful API,也可以查看 this

    【讨论】:

      猜你喜欢
      • 2017-04-15
      • 1970-01-01
      • 2019-02-10
      • 2010-09-06
      • 1970-01-01
      • 1970-01-01
      • 2021-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多