基础设施即代码:你需要知道的一切

  基础设施是软件开发过程的核心原则之一 —— 它直接负责软件应用程序的稳定运行。这种基础设施的范围从服务器、负载平衡器、防火墙和数据库一直到复杂的容器集群。
  
  对基础设施的考虑不仅要适用于生产环境,因为它们遍及整个开发过程,还包括工具和平台,如 CI/CD 平台、登台环境和测试工具。随着软件产品复杂度的增加,对这些基础设施的考虑也要随之变化。为了满足 DevOps 现代快速软件开发周期的需求,手工管理基础设施的传统方法很快就变成了一个无法扩展的解决方案。这就是 IaC 已成为如今开发中事实上的解决方案的原因。
  
  什么是基础设施即代码?
  
  IaC,Infrastructure as Code,基础设施即代码,是通过代码而非手动定义的基础设施的供应和管理过程。IaC 从开发人员那里拿走了大部分资源调配工作,开发人员可以执行脚本以准备好基础设施。这样一来,应用程序部署就不会因为等待基础设施而受阻,系统管理员也无需管理耗时的手动流程。
  
  以下是创建 IaC 环境工作原理的步骤说明:

  ●开发人员用特定于域的语言(DSL)定义配置参数。
  
  ●●指令文件被发送到主服务器、管理 API 或代码存储库。
  
  ●IaC 平台按照开发人员的指示创建和配置基础设施。

  通过将基础设施作为代码,用户不必在每次开发、测试或部署软件时都配置环境。所有基础设施参数都以称为清单的文件的形式保存。
  
  与所有代码文件一样,清单易于重用、编辑、复制和共享,它使构建、测试、准备和部署基础设施更快、更一致。
  
  开发人员对配置文件进行编码,并将其存储在版本控制中。如果有人编辑了一个文件,拉取请求和代码审查工作流可以检查更改的正确性。
  
  IaC 最佳实践
  
  基础设施自动化的实施将需要大量的更改和重构,这对组织来说可能是相当繁重的过程。如果想避免大多数的限制,并使过渡尽可能平滑,请遵循下面的最佳实践!

  为 IaC 的版本库使用 CI/CD 和质量控制
  
  这将帮助您保持代码的良好质量,并从您的 DevOps 团队或开发人员那里获得快速反馈循环(在应用更改之后)。幸运的是,有一些测试框架,比如 Terratest for Terraform,允许我们编写实际的测试。越早尝试用它覆盖所有内容,就越能从中受益,基础设施发生的意外问题也就越少。可以肯定的是,在这里虽无法预测应用程序错误,但至少可以对自己的基础架构更有信心。
  
  让你的基础设施成为模块化的代码
  
  微服务体系结构是软件开发中的一种流行趋势,它通过开发更小、模块化的代码单元来构建软件,这些代码单元可以独立于产品的其他组件进行部署。
  
  同样的概念也适用于 IaC。可以将基础设施分解为单独的模块或堆栈,并以自动化的方式将它们组合起来。
  
  这种方法有如下优势:

  ●首先,可以灵活控制基础结构代码各部分的访问权限。例如,初级工程师可能不熟悉或不具备基础设施配置某些部分的专业知识,通过模块化基础架构代码,就可以在初级工程师跟上进度之前,拒绝他们访问这些组件。
  
  ●此外,模块化基础设施自然地限制了可以对配置进行的更改数量。较小的更改使 bug 更容易检测,并使您的团队更加灵活。
  
  如果使用 IaC 来支持微服务体系结构,那么应该使用配置模板来确保基础设施扩展为大型服务器集群时的一致性。这最终将对配置服务器和指定它们应该如何交互非常有价值。

  持续测试、集成和部署
  
  持续的测试、集成和部署过程是管理可能对基础架构代码进行的所有更改的好方法。
  
  测试应该严格应用于您的基础架构配置,以确保没有部署后问题。根据您的需要,应该执行一系列测试。可以设置自动测试,以便在每次更改配置代码时运行。
  
  基础设施的安全性也应该被持续监控和测试。DevSecOps 是一种新兴的实践,安全专业人员与开发人员一起工作,在整个软件开发生命周期中不断地整合威胁检测和安全测试,而不是仅仅在最后投入。通过增加测试、安全和开发团队之间的协作,可以在开发生命周期的早期识别 Bug 和威胁,从而在上线时将其最小化。
  
  通过良好的持续集成过程,这些配置模板可以在不同的环境(如开发、测试和质量保证)中多次使用。然后,开发人员就可以在这些环境中使用一致的基础设施配置。这种持续集成将降低在将基础架构部署到生产环境中时出现可能对应用程序有害的错误的风险。
  
  维护版本控制
  
  这些配置文件将受版本控制。因为所有配置细节都是用代码编写的,所以对代码库的任何更改都可以进行管理、跟踪和协调。
  
  与应用程序代码一样,应该使用 Git、Mercurial、Subversion 等源代码控制工具来维护 IaC 代码库的版本。这不仅可以为代码更改提供审计跟踪,还可以在 IaC 代码上线之前进行协作、同行评审和测试。
  
  代码分支和合并最佳实践也应该用于进一步增加开发人员的协作,并确保对 IaC 代码的更新得到正确管理。
  
  如果刚刚开始使用 IaC,不要试图在一开始就将一切自动化。原因是变化的速度很快。一旦您的平台变得或多或少稳定,您将能够自动化其资源调配和维护。
  
  IaC 的挑战
  
  IaC 的好处很多,但这种模式确实存在一些需要解决的挑战,可以在实施过程之前了解并妥善解决。

  配置漂移
  
  无论您配置服务器的一致性或频率如何,从长远来看,都可能出现配置漂移。这就是在建立 IaC 工作流程后,需确保没有外部干扰的原因。每次需要修改基础设施时,必须确保按照预先建立的维护工作流程进。这一原则被称为基础设施不变性 —— 即基础设施应完全按照指定的方式运行,如果需要更改,则会提供一套全新的基础设施,并完全替换过时的基础设施。
  
  如果您最终仍然对类似的系统组进行了不一致的更改,其中一些更改将不可避免地与其他更改不同,这可能会导致配置的变化。
  
  错误的潜在重复
  
  尽管 IaC 的实施过程和机器创建在很大程度上依赖于自动化,但整个过程中仍有某些部分需要手动完成。编写父代码是其中一个过程,而且当涉及人工工作时,总是有可能出错。即使在 QA 检查定期且一致的环境中,人们也可能犯错误或忽略关键的事情。
  
  作为自动化的副作用,这些错误可能会在多台机器上发生,并且可能会造成尽可能多的安全漏洞。请记住,几乎所有云漏洞都来自错误配置。为了确保自始至终的安全,建议仔细检查生成 IaC 体系结构的代码,这可以通过严格且极为一致的测试和彻底的审核过程来实现。当然,这些额外的工序往往也会增加相应的费用支出。
  
  对于寻求自动化和更快交付的组织来说,作为代码的基础设施正在缓慢但确定地成为常态。只有通过简化的工作流程和改进的开发环境,才能更快地开发应用程序。

1 声望
0 粉丝
0 条评论
推荐阅读
全新知识付费源码系统免授权(内容付费网站系统源码搭建下载)
本文系统阐述知识付费源码系统的架构、搭建安装教程和接入小程序并直播的方法。知识付费领域不断扩大,吸引了越来越多的研究人员。本文全面总结了知识付费的发展和研究脉络,不仅有助于研究人员了解知识付费的现...

打酱油的灭火器阅读 628

javascript变量命名规范
程序员三大难题:变量命名、缓存失效、循环边界。驼峰命名首先,和其他语言一样,大部分变量建议采用驼峰命名法。 {代码...} 而对于常量,使用大写字母和下划线来组合命名。 {代码...} 根据变量类型来命名普通变...

一丁目1阅读 328

好的代码的品味
1. 代码检测工具代码格式检测工具-CheckStyle代码规范检测工具-Sonarlint代码规范检测工具-Alibaba-Java-Coding-GuidelinesAlibabaJava开发规范PDF版代码规范检测工具-SonarQube2. 代码规范书籍Effective JavaAli...

async_wait1阅读 274

封面图
遗留代码处理技巧与案例演示
本质是一种技术债务,产生原因一方面是业务原因:如业务本身场景繁多、流程复杂等;另一方面是技术原因:如代码不规范、设计不合理、祖传代码文档注释缺失等。它会影响我们的程序很多方面:如可读性、可修改性、...

京东云开发者1阅读 215

封面图
祖传代码重构:从25万行到5万行的血泪史
导语| 近期,我们接管并重构了十多年前的 Query 理解祖传代码,代码量减少80%,性能、稳定性、可观测性都得到大幅度提升。本文将介绍重构过程中系统实现、DIFF修复、coredump 修复等方面的优化经验。

腾讯云开发者阅读 234

乐高式扩展:在Seal软件供应链防火墙中轻松集成代码规范工具
在前一个版本中,Seal 集成了 SCA、SAST 和配置检查等功能,在这一架构中最大的优势是调试方便、调用链路短,但同时也伴随着模块耦合、依赖树深以及扩展困难等问题。因此,在新版本中使用了新的 ⌈插件化框架⌋ 来...

SEAL安全阅读 218

代码质量与安全 | 嵌入式开发中不得不说的编码标准——Barr-C
来自Barr Group的编码标准Barr-C能够减少嵌入式软件中的bug,并引入风格指南(stylistic guidelines),让维护、移植更简单。引用本文将讲述开发人员如何使用Barr-C:1018来检测用C语言编译的固件中的错误,以及它...

龙智DevSecOps阅读 211

1 声望
0 粉丝
宣传栏