服务
关于
CloudProse博客
开发人员经验

无服务器软件开发生命周期

快速构建,测试和部署基于AWS Lambda的应用程序,以及如何为成功做好准备。
7992035
艾米·阿拉姆布洛·尼格莱特(Amy Arambulo Negrette) | 2020年4月24日

软件开发生命周期标准化了构建,测试和部署应用程序的方式。一致且可靠的生命周期可减少摩擦并提高开发人员及其应用程序工作方式的可见性,从而加快开发速度。

在建立和管理无服务器项目的多年中,我创建了一些准则,使我们的项目获得最大的成功机会。这篇博文不是特别冗长,但即使少量也能发挥作用。

建立

使用“基础结构即代码”框架来构建云资源,使开发人员能够标准化他们需要为其应用程序部署的云原生服务。这允许使用环境变量来实施适当的登台实践并保护代码秘密。然后,可以通过云提供商本地或使用外部服务(例如GitHub或GitLab)在自动CI / CD管道中部署和升级这些服务。

“将开发环境移向云,请勿尝试将云移至开发环境。” -- 本·基霍

该怎么办:

  • 使用诸如CloudFormation之类的Infrastructure as Code框架定义资源,该框架创建可监视的CloudFormation堆栈。
  • 通过CI / CD管道使用CodeBuild等资源使构建自动化& CodePipeline.
  • 强制执行环境变量和过渡实践。

在Trek10,我们倾向于使用 SAM,SAM CLI 以及用于CI / CD的本机AWS工具。实际上,我们甚至发布和维护AWS的官方参考部署。 无服务器企业CI / CD.

测试

在为Lambda开发时,应该在功能内构建单元测试,就像在微服务应用程序中一样。集成测试应涵盖服务之间的各种边界和连接,以确保数据在整个工作流程中传递。

“仔细研究应用程序中至关重要的部分并编写测试,以确保这些功能的可靠运行(和集成)。生产测试是捕捉回归,评估预期行为并成为软件文档的一部分的测试。” -- 小保罗·钦(Paul Chin Jr.)

该怎么办:

  • 在应用程序之间进行集成测试,以确保完整的端到端传输。
  • 自动化烟雾测试以验证建筑物的可行性。
  • 将模拟数据用于测试案例以增加代码覆盖率。

部署

良好部署实践的关键是使用可预测的环境来尽可能多地把握使应用程序良好安全地运行所需的哪些因素,以及哪些因素会导致失败。

“每个环境至少要使用一个帐户。您甚至可以比这更细粒度。 AWS组织和IAM角色假设使这一点易于管理。” -- 亚历克斯·德布里

该怎么办:

  • 而是使用环境变量和Secret Manager参数化Lambda函数
  • 使用可用的AWS资源自动部署
  • 使用策略一致的标记将元数据附加到适用的资源
  • 使用合规工具,例如 CloudSploit 实施标记要求

更新资料

在直接通过AWS控制台,通过CloudFormation堆栈中的更改或通过API调用更新Lambda时,它独立于其他已部署服务(包括同一CloudFormation堆栈内的其他Lambda)进行更新。通过控制台更新Lambda时,代码将通过自动保存进行更新。所有其他相关的配置(例如最大运行时间)必须在命令中保存。

在Trek10,我们强烈建议仅通过IaC实用程序(如CloudFormation或SAM)来更新代码。一旦您冒险通过控制台推送有意义的更新的路径,只有很短的时间才能发生非同寻常的停机时间或其他损失。

不要轻易从控制台作为代码的安全性和便捷性方面来体验控制台的点击体验。回到光明的道路是黑暗的,充满了恐怖(和中断)。 -- 贾里德·肖特(Jared Short)

该怎么办:

  • 确保对任何代码更改进行测试更新...您的CI管道为绿色,对不对?
  • 对配置的任何更改也应更新基础架构监视。没有静音警报,“我们将修复后者”。
  • 控制台中完成的所有最终更改都应翻译为“基础结构,如代码”。没有“仅此一次手动”。

尽管我们没有涵盖开发的每个阶段,但了解生命周期如何与Lambda等云功能一起使用可以使以标准化,设计良好的方式更轻松地加载其他服务。

一旦计划了部署的基础,团队就可以更全面地了解如何通过监控和指标来操作无服务器应用程序。

如果您想更深入地研究,我强烈建议您考虑一下我们的细分 AWS如何构建和部署实际的无服务器应用程序!

作者
7992035
艾米·阿拉姆布洛·尼格莱特(Amy Arambulo Negrette)