您需要了解的基础设施即代码的优势
如果您刚刚开始学习亚马逊网络服务 (AWS) 或谷歌云平台 (Google Cloud Platform) 等云服务提供商,您可能已经听说过“基础设施即代码 (IaC)”这个术语。对于开发人员和系统管理员来说,它就像一把瑞士军刀。在本文中,我们将深入探讨 IaC 是什么、它带来的好处以及它的不同形式。
像我五岁一样解释基础设施即代码
简而言之,它是用某种形式的代码来表示我们基础设施的实践。在 IaC 中,“代码”的定义非常宽泛,因为它可以是 YAML 或 JSON 配置文件,可以是 HCL 等自主开发的语言,也可以是 Node.js 或 Ruby 等传统语言。
虽然 IaC 经常在云的背景下被谈论,但它并不仅限于我们的云资源。
我们知道,基础设施种类繁多。有公有云资源和私有云资源,也有云端资源和本地资源。或者所有这些资源的组合,有时被称为混合云。
因此,从最高层次来看,我们可以将 IaC 概括为用一种通用语言来表示系统所运行的基础设施的过程或实践。这种语言使基础设施对整个团队可见,并且相对容易地复制。
优势
好的,我们明白了,基础设施即代码就是……只是代码。
但是我们究竟为什么要使用它以及我们能从中得到什么呢?
在我看来,只有亲身体验过手动配置基础设施,才能体会到其中的好处。你是否曾经按照教程一步步操作,点击这个按钮、那个按钮、这个按钮,再点击其他按钮,直到最终在云服务提供商那里完成设置?
答案很可能是肯定的。
也许你在测试环境中这样做了。然后,当投入生产时,你不得不再次点击相同的按钮,并祈祷顺序正确。
如果团队中的其他人为了创建自己的环境而不得不重复同样的按钮点击操作,该怎么办?想想这有多痛苦吧。有些人可能会说,记录流程就能解决问题。这话没错,但仍然不够理想。
文档最初可以分享知识,但可能会变得陈旧。开发人员有一个坏习惯,如果文档不在眼前,他们就不会阅读。最后,文档无法像代码那样进行测试。
这是基础设施即代码提供的最大好处,即自动化、可重复、可测试和自文档化的基础设施。
通过将资源表示为代码,我们可以参数化代码以支持多种环境,与我们的队友共享代码,甚至测试代码以确保准确性。
就像我们应用程序代码中的更改会经过测试、同行评审并可供团队中的每个人使用一样,使用 IaC,我们基础设施的配置、维护和更新过程也可以融入到同一个流程中。
潜在的缺点
虽然我相信将基础设施表示为代码的好处远远超过坏处,但仍然值得了解我们可能陷入的陷阱。
基础设施即代码的最初缺点是学习曲线。正如我之前提到的,代码在这个过程中非常灵活,因此通常需要根据所使用的工具学习一种新的代码风格。学习如何在 AWS CloudFormation 中表示您的 VPC 网络堆栈是一项不容易掌握的技能。
除了学习曲线之外,时间也是 IaC 的另一个潜在缺点。进入 AWS 控制台点击几个按钮通常比在 Terraform 中编写基础设施代码要快得多。许多团队为了加快速度并交付产品或服务,很早就做出了这种权衡。
最后一个陷阱是基础设施分歧。一旦我们决定走上基础设施即代码的道路,就必须坚持到底。在控制台中手动更改由基础设施即代码 (IaC) 工具配置的基础设施堆栈可能会导致分歧。这意味着我们的基础设施状态因为手动编辑而发生了变化,而我们的 IaC 工具对此一无所知。
虽然这些都是明显的缺点,但它们不应该阻止我们进一步探索 IaC。然而,在选择能够帮助我们完成这一旅程的工具时,我们应该考虑这些因素。
工具、工具、工具、更多工具
当谈到 IaC 工具时,将它们分为两个不同但经常重叠的类别会很有帮助。
- 配置编排工具旨在自动化我们的基础设施部署。
- 配置管理工具旨在帮助配置已配置的基础设施上的软件和系统。
值得注意的是,这些类别经常重叠。正如我们将看到的,一些 IaC 工具不仅允许您配置/编排基础设施,还允许您对其进行配置。此外,随着基础设施变得越来越复杂,两种类型的工具同时使用的情况并不少见。
到目前为止,你还理解我的意思吗?非常好。以下是一些目前在基础设施即代码领域流行的工具。
Terraform是一款与云无关的基础设施配置工具。它允许开发人员使用一种定义明确的语言(称为 HCL)来表示我们的基础设施,无论它是 AWS、Google Cloud 还是 Azure。
Terraform 可通过插件高度扩展,并且拥有非常强大的社区,可以生成用于配置大量基础设施的优秀开源模块。
AWS CloudFormation与云平台无关,专用于在 AWS 账户内配置基础设施。它允许我们将 AWS 基础设施以 JSON 或 YAML 配置文件的形式呈现,然后执行这些配置文件来创建、更新和销毁资源。
CloudFormation 与 AWS 生态系统很好地集成在一起,并开发了许多用于预览、回滚和管理资源变更的功能。
Chef属于配置管理工具。它允许我们创建配方和烹饪手册,定义实现应用程序必要配置所需的确切步骤。
Chef 与 Terraform 类似,与云无关。它使用常见的 Ruby 语言。它通常用于配置弹性计算 (EC2) 实例,甚至是本地服务器。
Puppet是另一个基于 Ruby 的配置管理工具,类似于 Chef。两者的区别在于,Puppet 是一种声明式工具。这意味着,作为开发人员,我们定义基础设施应该是什么样子,而 Puppet 则负责实现它。
Ansible是 Red Hat 推出的一款基础设施自动化工具。开发人员需要描述其组件和系统之间的相互关系。它旨在端到端地管理和规范系统,而非独立运行。这些定义以 YAML 格式编写,被称为“剧本 (Playbook)”。
Juju是 Ubuntu 的一款 IaC 工具,它允许开发人员将其基础架构表示为 charms,这些 charms 是一组用于部署和操作系统的脚本。这些 charms 可以打包成 bundles,用于为应用程序部署整个基础架构。
这绝对不是一个完整的列表。在配置编排和管理领域,新工具层出不穷。但就目前而言,这些是整个行业正在使用的主流工具。
下一步该怎么做
我们现在知道了基础设施即代码的定义、它提供的好处以及缺陷,并且我们现在知道了一些可以让我们通过代码配置资源的工具。
了解 IaC 的下一步是从上面的列表中选择一个工具并开始探索它。
- 从一个简单的用例开始,例如配置 S3 存储桶或 EC2 实例。
- 资源配置完成后,探索其他需要配置的资源。
- 尝试参数化代码来支持多种环境。
- 了解创建、更新和销毁该工具资源之间的区别。
一旦我们探索出一种能够让我们将基础设施表示为代码的工具,我们就可以探索该工具与上面列表中的其他工具之间的差异。
结论
基础设施即代码是指用代码来表示支撑我们系统的底层资源的过程和实践。这使我们能够沿用编写应用程序代码时已经使用的流程。
这包括与我们的团队共享基础设施,以便团队能够协作维护资源。这还包括测试基础设施的创建、更新和删除方式。与应用程序代码一样,我们基础设施的定义也可以进行同行评审。
基础设施即代码是 DevOps 工具箱中的一把瑞士军刀。无论团队规模大小,无论他们使用的云平台是 AWS、GCP、Azure 还是自己的数据中心,都可以利用它。
您是否渴望了解有关 Amazon Web Services 的更多信息?
想了解更多关于 AWS 的信息吗?我最近发布了一本电子书和视频课程,希望能帮您从海量信息中脱颖而出。它专注于在 AWS 上托管、保护和部署静态网站。目标是让您在使用过程中学习与此问题相关的服务。如果您一直想学习 AWS,但又不确定从哪里开始,不妨看看我的课程。
文章来源:https://dev.to/kylegalbraith/the-benefits-you-need-to-know-about-infrastruct-as-code-8c4