基础设施即代码(IaC)是指利用代码(以预构建模板的形式)来提供支持基于云的应用程序所需的基础设施资源的实践. 开发人员可以利用这种高度可重复的实践来编写, test, 并发布将创建应用程序运行的基础结构的代码. 整个过程可以作为持续集成/持续部署(CI/CD) software pipeline.
IaC非常有益,因为它避免了每次将新代码推送到生产环境时手动配置资源. 可重复的任务可以自动化,团队可以更快地部署产品.
而实现IaC可以帮助开发人员更快、更有效地进行开发, there is often a trade-off to do so. 这种速度的提高通常会导致平台和DevOps团队的控制和监督减少, 在某些情况下,这可能导致资源配置不当, or worse, created in an insecure manner. Perhaps to combat this, a recent Forrester report 注意到58%的全球高级安全决策者计划在2022年增加其应用程序安全预算.
However, 将安全性集成到开发周期中可能会导致开发人员和安全人员之间的摩擦, 因为SecOps试图跟上DevOps的步伐,并尽可能快地确保工作负载的安全.
Each environment and its purpose is unique. Some tools will be better fits than others, 所以有必要研究一下什么最适合你的具体需求. 值得注意的是,许多云提供商为其平台提供原生工具和服务. 尝试在研究过程中考虑到这一点,以避免在采用特定平台时可能已经可用的功能冗余.
Learn more about our approach: 将云安全与DevOps和CI/CD工具集成
Terraform帮助用户以人类可读的方式定义资源和基础设施, declarative configuration files. 它可以在多个云平台上管理基础设施的生命周期, 以及在整个部署过程中跟踪资源更改.
Chef Infra允许用户通过定义可重复的策略来自动化配置管理, consistent, and reusable. 它可以将配置和策略定义为可测试的代码, 可强制执行,并且可以作为自动化管道的一部分大规模交付. Chef还可以检测配置漂移并在需要时进行纠正.
Puppet是一个使用声明性代码来帮助管理和自动化服务器配置的工具. 它支持根据组织的It需求扩展基础设施自动化. 用户可以描述所需的系统状态,而不是到达那里所需的步骤.
AWS CloudFormation帮助用户通过DevOps管理基础设施. 它支持自动化、测试和具有CI/CD自动化的基础设施部署模板. 它还可以扩展和管理基础设施,以包括在CloudFormation Registry中发布的云资源, the developer community, and a user’s library.
Ansible是一个开源的命令行IT自动化软件应用程序. It can configure systems, deploy software, 并编排高级工作流以支持应用程序部署, system updates, and more. Ansible具有最小的“移动部件”,并使用OpenSSH进行传输. 它还采用了一种人类可读的语言,因此用户可以快速入门.
SaltStack is a Python-based, 用于远程任务执行和配置管理的开源软件, 使用户能够部署和配置复杂的IT系统. 它将人类可读的YAML与事件驱动的自动化相结合,从而使ITOps受益, DevOps, NetOps, or SecOps functions.
在云环境中,基础设施即代码的主要好处是——如上所述——速度. 再深入一点,就会发现以下更切实、更具体的商业利益:
大多数现代企业希望实现的宏观效益是巨大的。”shift left.也就是说,将DevOps和SecOps整合成一个真正的 DevSecOps 将安全性移入CI/CD管道的文化, 将安全性和遵从性从被动的立场转变为预防性立场.
Again, what is IaC? 很明显,有很多方法可以回答这个问题. Drilling down a bit further, 一般有两种方式:声明式IaC和命令式IaC. 简单地说,这两种方法是开发人员告诉IaC自动化平台要做什么的方法.
In stating a desired outcome, 用户让系统依赖于预构建的模板和规则来获得该结果. Therefore, 用户对配置过程的技术知识要求更少,并且通过委托获得效率. A user is essentially saying, “我希望这个结果能在整个过程结束后出现, and I don’t care how you do it.“另一个好处是,用户可以采取更具战略性的方法来塑造和部署整个应用程序.
As a quick refresher, IaC的本质是编写定义代码运行的云基础设施的语句. 声明性IaC只是一种更快、更容易获得预期结果的方法, 是绝大多数时候使用的方法.
负责定义每个步骤以获得最终结果可能听起来像是一个很大的缺点, and it can be. 用户必须熟悉编程语言,并且必须完美地执行整个操作的每一步. 这样做的好处是用户可以更好地控制自动化过程和代码, 并且可以根据具体情况定制配置过程.
它包括告诉控制器如何做确切的事情. “Iterate through this loop, check this boundary condition, 如果满足条件,执行此操作, 但如果条件不满足,这另一个动作.命令式编程本质上是微观管理,通常由人主导.
团队必须确保通过IaC将速度和效率添加到开发生命周期中不会产生安全问题——在过程中尽可能早地实现安全控制和检查是至关重要的. 这样做可以通过在创建模板之前捕获问题来帮助避免创建不遵循组织标准的资源. 让我们来看看IaC面临的一些挑战(别担心, 好处肯定超过了它们):