这是一篇来自 DZone 的 2023 DevOps 趋势报告的文章。
更多信息:
阅读报告
基础架构即代码 (IaC) 是使用代码和软件开发技术配置和管理基础架构的实践。 IaC 背后的主要思想是消除每次部署时对服务器、负载均衡器或数据库等资源的手动基础设施配置和配置的需要。由于基础架构现在是整个软件开发过程中不可或缺的一部分,并且与应用程序交付的耦合度越来越高,因此让交付基础架构更改变得更加容易非常重要。
使用代码定义和管理基础架构及其配置使您能够采用版本控制、测试和自动部署等技术。这使得更容易防止各种应用程序问题,从性能瓶颈到功能故障。
本文将解释 IaC 的工作原理,重点介绍这两种方法,以及在 DevOps 环境中以代码形式交付基础设施的优势和挑战。
IaC 是如何工作的?
从历史上看,基础架构管理主要是由专门的系统管理员完成的手动过程。您需要手动创建虚拟机 (VM)、管理其软件更新并配置其设置。这变得非常昂贵和耗时,尤其是随着现代软件开发的快速发展。
IaC 演变为可扩展基础架构管理的解决方案。它允许您对基础架构进行编码,然后能够创建标准化、可重用和可共享的配置。 IaC 还允许您以代码文件的形式定义基础设施配置。例如,图 1 演示了如何使用 CloudFormation 在 AWS 中定义 S3 存储桶的创建。
Resources: S3Bucket: Type: 'AWS::S3::BUCKET' DeletionPolicy: Retain Properties: BucketName: DOC-EXAMPLE-BUCKET
当您将基础架构定义为代码时,您可以实施与应用程序开发代码相同的做法,例如版本控制、代码审查和自动化测试。
图 1:IaC 工作流程
要实施 IaC,您可以使用各种工具和技术,例如:
- 配置管理工具,确保基础架构处于您之前定义的所需状态,例如 Ansible、Chef 或 Puppet。
- 供应工具(例如,CloudFormation 模板)允许您以 JSON 或 YAML 文件的形式定义云资源,并在云平台上供应该基础设施。
- 容器化工具(例如 Docker、Kubernetes)用于将应用程序及其依赖项打包到可以在任何基础设施上运行的容器中。
IaC 的方法
有两种不同的基础架构即代码方法:命令式(过程式)IaC 和声明式(功能性)IaC。
使用命令式方法,开发人员指定 IaC 创建配置所需遵循的确切步骤。用户完全命令自动化,这使得这种方法对于需要完全控制的更具体的用例很方便。
命令式方法的主要优点是它允许您自动执行基础架构配置的几乎每个细节。这也意味着您需要更高水平的专业知识来实现这种类型的自动化,因为它主要是通过直接在系统上执行脚本来完成的。
以下是使用 AWS CLI 创建 S3 存储桶的命令式方法示例:
aws s3api create-bucket --bucket my-new-bucket --region eu-central-1
当您运行此命令时,AWS CLI 将在eucentral-1
区域中创建一个名为my-new-bucket
新 Amazon S3 存储桶。
使用声明性方法,开发人员指定所需的结果,而无需提供实现该状态所需的确切步骤。用户通过 JSON 或 YAML 等声明性语言描述他们希望基础架构如何查看。此方法有助于标准化、变更管理和云交付。可以更快地发布功能,并显着降低人为错误的风险。
以下是使用 AWS CloudFormation 的声明性基础设施即代码的简单示例:
{ “Resources”: { “EC2Instance”: { “Type”: “AWS::EC2::Instance”, “Properties”: { “InstanceType”: “t2.micro”, “ImageId”: “ami-0c94855bac71e”, “KeyName”: “my-key” } } } }
该脚本告诉 CloudFormation 创建类型为t2.micro
的 EC2 实例,CloudFormation 将处理所有必需的步骤以使用您定义的特定属性实现该状态。
图 2:IaC 方法概述
IaC 的好处和挑战
基础架构即代码是 DevOps 中的关键实践之一,提供了许多节省时间和金钱以及降低风险的好处。但与您在组织中采用的任何工具、解决方案或实践一样,重要的是要权衡实施 IaC 方法时可能面临的挑战。
因素 | 好处 | 挑战 |
---|---|---|
编纂 | 编码基础架构可帮助开发人员确保基础架构配置良好,无论何时供应,都不会发生任何意外更改。 | 如果未正确实施或管理基础设施即代码,它会降低对基础设施的可见性。通过确保代码文档齐全、易于访问、标准化、简单且经过适当测试,可以提高可见性。 |
配置漂移 | IaC 是幂等的,这意味着如果发生与您定义的 IaC 管道不同步的更改,则会自动更正到所需状态。 | 避免直接在控制台中进行手动更改,减少了与 IaC 实施相关的配置漂移带来的挑战。 |
版本控制 | 与您的团队使用的版本控制系统集成有助于创建可跟踪和可审核的基础架构更改,并有助于轻松回滚。 | 随着组织基础架构的规模和复杂性的增长,使用 IaC 进行管理会变得更加困难。 |
测试和验证 | 通过代码审查等常见的 CI/CD 实践,可以将基础架构更改作为交付管道的一部分进行验证和测试。 | 执行代码审查以确保基础设施的一致性并不总是足够的——通常有多种特定于用例的测试选项。 |
成本 | 使用 IaC 自动执行基础设施配置等耗时任务有助于最大限度地降低成本并将资源重新分配给更关键的任务。 | 如果每个人都能够创建云资源并启动新环境,那么额外成本很容易增加。这通常发生在开发和测试阶段,开发人员创建的资源在一段时间后可能会被遗忘。为防止这种情况,最好实施计费限制和警报。 |
速度 | 自动化基础设施交付可能需要更多的时间和精力投入,但从长远来看,自动化 IaC 会带来更快、更简单的过程。 | 对于运行简单工作负载的组织,自动化和管理 IaC 的过程可能会变得负担多于益处。 |
错误处理 | 使用 IaC 实现自动化可以消除人为的基础设施错误,并通过提供有关基础设施工作方式的详细报告和日志来减少配置错误。 | 在复杂的基础架构设置中,对基础架构进行调试和故障排除可能极具挑战性,尤其是在生产环境中出现问题时。 |
安全 | 您可以定义和执行自动化安全测试作为交付管道的一部分。安全专家可以审查基础设施的变化以确保它们符合标准,并且可以在部署到云之前将安全策略编纂和实施为护栏。 | 由于 IaC 是一种更加动态的供应实践,可用于优化基础设施管理,因此它几乎同样容易被滥用。 IaC 可以更容易地无意中引入安全漏洞,例如硬编码凭据或错误配置的权限。 |
表 1:IaC 优势与挑战——需要考虑的因素
结论
借助 IaC,系统可以轻松复制和重用;过程是一致的。随着 DevOps 文化变得越来越普遍,通过 IaC 保持战略优势可能会成为一个越来越重要的目标。如果您所在的组织旨在在其现有流程中实施基础架构即代码,那么了解您的团队可能遇到的好处和挑战会很有帮助。诀窍是在了解您的业务基础设施需求和认识到 IaC 提供的改进潜力之间找到一个很好的界限。
为确保正确实施 IaC,从小事做起很重要。您希望逐渐增加任务的复杂性,避免使代码库过于复杂,持续监控 IaC 实施以确定需要改进和优化的领域,并继续自学 IaC 中的不同工具、框架和最佳实践。
查看这些额外资源以继续了解 IaC:
- 开始使用 IaC , DZone Refcard
- IaC 安全:核心 DevOps 实践以保护您的基础架构即代码,DZone Refcard
- “ 基础架构即代码:保护应用程序的 6 个最佳实践”,作者 Jim Armstrong
- Marija Naumovska 的“ 基础设施即代码的 5 个最佳实践”
- “最佳基础设施即代码工具 (IaC):2023 年的前 11 名”,作者:Florian Pialoux
这是一篇来自 DZone 的 2023 DevOps 趋势报告的文章。
更多信息:
阅读报告