在AWS无服务器基础设施中管理开发环境

无服务器平台为每个开发者提供了一个独立的全栈环境,他们可以利用这个环境进行开发和测试活动。

这是可能的,而不会增加显著的成本并影响其他人。也不会有开发者的设置会被意外改变的风险。

Serverless architecture从不同的角度看待了旧问题,并且在许多方面都带来了积极的刷新。最重要的优势是,您不再需要团队中的管理员来运行全面流程。另一个优势是,它现在针对的是内部开发团队而不是业务团队,因此它可以为开发团队提供无限制的开发条件。

我们将在这里详细解释它的具体含义,即:

  • 如何在无服务器平台上创建一个无限制的开发环境。
  • 这样设置的团队的好处是什么?
  • 在这样的设置中需要特别注意的关键领域,以防止其随着时间的推移而崩溃。
  • 这样设置的演示示例。

为每个开发者创建独立环境的路径

您可以将开发基础设施视为随时间推移的演变过程。

起初,有光…

管理开发账户环境的常见方式是创建一个或几个独立的开发环境。在更好的情况下,它们包含所有生产环境组件。但这在标准情况下并非总是如此。通常开发环境将仅包含一些最重要的服务,而其他服务则会缺失。

在这样的环境中,开发可靠解决方案变得更具挑战性。对于非存在系统组件的影响仅仅是不存在。管理团队可能会说,这可以在系统测试期间由团队解决。然而,从开发人员的角度来看,这永远不会在同理心上获得任何成就奖杯。

开发活动将变得不够准确。开发人员将花更多时间进行重工和修复,并且他们创建完美代码的动力将下降。除此之外,这样的设置已经在一开始就创建了一个不一致和不稳定的环境。

根据团队的规模,可能需要几个开发环境来减轻团队之间最关键的并行工作冲突。因为他们将共享开发环境,一个开发者会以某种方式影响另一个开发者。团队成员之间的广泛沟通是必不可少的。

更多的开发环境意味着更少的冲突,但共享因素仍然存在。这可能可行,但永远不会是一个完美的设置。开发人员往往会在本地直接在笔记本电脑上创建一些已经冲突的内容。这可能会在合并代码时造成后续问题。笔记本电脑上的行为可能与云上的行为不同。这在与其他人已经完成的开发代码合并后可能会导致问题。

但是,有人创造了这个世界…

现在显而易见的问题是-那又是什么呢?有什么设置可以消除共享因素,并且不会激励团队在云账户之外进行活动呢?

想象每个团队成员都获得一个可以用于自己活动的独立环境栈。它将包含与生产系统相同的组件。不包含全部数据负载,因为这对于开发活动来说是不需要的。

或者再进一步,为每个开发者正在处理的每个任务创建这样的环境栈是怎样的呢?

昂贵-您可能会这样想。

真的不是这样 – 我会这样说。

如果开发人员积极使用环境和资源,那么在一个共享环境中并行完成所有工作与将其拆分为更多环境的负载比较在成本上很可能是相等的。因为您拥有无服务器架构,并且只为实际使用付费。

如果开发人员不活跃,但他们仍然创建了这个全栈(或者同时创建了更多全栈),那么成本为零,因为您拥有无服务器架构。不使用的服务不会产生任何费用。

让我们更详细地谈谈这些好处。

只有开发团队才能欣赏的好处

首先,有一件事非常明确。只有开发团队本身才能欣赏到这种设置提供的所有好处。没有管理人员或业务用户会真正看到其中的价值。我的意思是,他们可能会理解价值所在。但很可能他们从不承认他们绝对需要它。他们不使用它,也不在他们的日常工作中看到它。

但是,要理解最佳开发结果只能在最佳工作环境中实现,真的有多难呢?

所以这里有一些好处:

  1. 开发人员确保没有其他人会更改他们当前正在使用的环境。所有组件都是为此任务和开发活动新创建的。
  2. 开发环境是生产环境的精确副本。这意味着可以准确模拟代码更改的行为。
  3. 团队将始终直接在云帐户内进行开发,因为在本地进行开发已经没有意义。
  4. 假设您已经为环境创建和更新构建了链接,您可以将它们与链接或ADO工具集成,以进行故事和工单管理,并与故事进展和关闭一起创建或终止开发环境。这将为每个故事提供一个单独的开发环境。或者说,这对于溯源目的真的很好。
  5. 每当开发人员向代码存储库提交更改时,流水线将使用最新的存储库代码更新环境。这意味着在构建新代码和更快的单元测试过程时进行部署自动化。
  6. 不需要定期维护开发环境。每个环境仅存在一段特定的时间。它总是从最新的存储库代码状态和最新的数据快照创建。在这种情况下,维护问题是自动解决的。

有什么缺点?

是的,有一些需要注意的注意事项。我不会明确称它们为缺点。但是,如果您对以下事项不合理注意,很可能随着时间的推移,它们可能会成为您进行基础架构重构的原因。

#1. 注意AWS限制

问题就在这里。如果您要为每个人和每个活动创建单独的环境堆栈,那么您将创建大量的AWS对象。

考虑链接、策略、角色、用户、数据库、VPC等等。

这是您必须监视和监控的必要条件。如果环境只是被创建,并且开发人员会不断添加更多环境,而不正确删除旧环境或与已完成的故事相关联的环境,那么早晚,您将遇到达到各种AWS限制的问题。

有些限制很容易增加。其他限制可以通过AWS支持请求增加。然后,一旦达到某些硬限制,您将无法做任何事情。

这将是一个关于控制每种对象类型使用的AWS对象总数的游戏。它将确保您不会一直在边缘上跳舞。您不希望大部分时间都处于限制的上限范围内。这实际上意味着在每次创建新环境之前,您需要先处理一些清理过程,手动或自动。

无论哪种方式,这只会导致整体开发活动的减速。开发团队将不断在创建新环境之前解决现有环境的问题。

与此相反,真正关键的是通过进行持续的后台清理来主动检查所有限制。理想情况下,以自动化的方式进行,这样下次开发人员需要一个全新的环境时,他们可以立即创建,而无需任何进一步的延迟。

#2. 将DevOps管道执行时间保持在较低水平

当你开始处理一个故事时,每个新的开发环境都会自动创建,听起来很好。

但如果实际上意味着开发人员需要等待几个小时才能获得这样的环境,那么听起来就很糟糕了。而且,不仅是等待创建环境,还要等待每个环境的后续更新(在每个存储库提交后)。

将其总结成一个公式,看看这种情况会产生多少空闲时间。对开发人员来说,每次等待环境准备好时都不可能跳到“其他事情”上。

这就好像在等待医生的地方等待计划好的检查时期间期望你去购物一样。这是不可能的。你坐在那里等待,因为可能随时会轮到你。

#3.定期更新主数据集

每次创建新环境都必须有一个参考源数据集。这用于将数据复制到刚创建的环境堆栈中。数据集必须定期更新(基本上在每个生产发布之后)。这将确保使用最新的数据集结构创建环境。

它不需要包含来自生产的完整数据库快照,尽管通常这是最简单的方法。但是,数据模型必须始终保持最新,以便每个新的开发活动都从正确的起点开始。

#4.教导团队“负责任地”对待环境

环保现在是所有大公司的一个重要话题和期望。类似的期望也应该适用于开发团队。

如果一个开发人员需要并行使用更多环境,因为这将显著提高效率,那就去做。但如果另一方面,开发人员之所以同时打开多个环境只是因为懒得关闭它们,那么这是需要尽快解决的问题。

拥有在私人沙箱上工作的特权应伴随着适当的责任水平。我们对这种权益的使用期望不低于负责任和团结的水平。

示例设置

现在将所有这些放在一起,以下是对这样一个无服务器多环境设置的期望。

  • 您可以使用DevOps管道来自动化新环境的创建、更新和终止。
  • 然后开发人员将在开发过程中工作并更新开发环境。
  • 一旦开发人员完成代码更改和unit testing,通过将代码合并到主存储库分支,结束此环境上的活动。
  • 由于许多开发人员可以同时进行此操作,因此合并代码活动是必要的,以确保将所有更改从开发环境传输到真正的单一位置 – 主分支。
  • 使用此主分支存储库状态更新中央测试环境,以便可以对所有开发人员的合并代码执行系统测试活动。
  • 使用专用的错误修复环境解决任何正在进行的问题。可以使用已经存在的DevOps管道创建此环境(将其视为另一个临时开发环境)。
  • 最后,进行QA测试和生产发布。

正如您所看到的,通过在体系结构的不同阶段重复使用相同的DevOps管道,您可以快速构建一个灵活的无服务器平台,拥有所需的多个独立的开发或测试环境。最重要的是,所有这些好处都不会产生额外成本。

您可能还对这些链接_6感兴趣,以运行您的代码。

类似文章