基础设施即代码:初学者的视角 Terraform 结论 资源

2025-06-08

基础设施即代码:初学者的视角

地形

结论

资源

最初发表于WyeWorks 博客

几个月前,我意识到自己可能真的喜欢 DevOps。我当时不确定该怎么做,于是就和 WyeWorks 的工程副总裁聊了聊。聊完之后,我们找到了一个机会,让我在 DevOps 岗位上工作几个月,尝试一下。

我辞去了当时正在做的项目,并获得了一个月的时间来学习一些基础知识,以便能够在 DevOps 工作中有所作为。我的确这么做了。从今年 1 月 2 日开始,我每周 5 天、每天 7 个小时都在阅读和实践 DevOps 相关知识。

在本文中,我将讨论我对 IAC(基础设施即代码)的看法,它解决了哪些问题以及如何实现它。我还会分享一些进一步学习的资源,并简要介绍一款 IAC 工具 Terraform。

基础设施即代码是什么意思?

顾名思义,IAC 指的是编写描述基础设施的代码,类似于用高级语言编写程序。它允许您使用经过验证的工具来自动化配置基础设施的过程。

它对你有什么帮助?

IAC 允许您自动化、测试和重用与您正在使用的基础设施相关的代码。您还可以选择对基础设施代码进行版本控制,并将其与将要管理的代码一起进行检查。您还可以审查和测试代码,并且通常遵循您在代码库中通常会遵循的所有良好实践。

您可能会想: 好吧,这听起来很棒,但是您能给我一个具体的用例吗?

我可以给你两个。😁

案例 1 - 简单的 Web app_1、app_2、app_3、...、app_n

假设你在一家为客户构建基础 Web 应用的公司工作。那么,一个基础的 Web 应用需要什么呢?一台 Web 服务器和一个数据库(我这样说有点简化)应该会很方便。每次你的 Web 应用获得一个新客户时,你都会访问 AWS(或你使用的任何云提供商),在浏览一些资源后,你会得到两个虚拟机:一个用于运行你的应用,另一个用于运行相关的数据库。

哦,等等,我忘了,您至少需要这个基础设施的两个副本:一个用于生产,一个用于登台。

现在您拥有相同基础架构的两个副本,您可以开始为该客户端部署代码。

两个月过去了,您又有另一个客户需要相同的基础设施,因此您再次在 AWS 中点击以启动并运行它。

相反,使用 IAC,您可以拥有一个模块来为您完成所有繁重的工作。到时候,您只需运行这段代码,几分钟后就可以开始使用了。需要一次性更新所有客户端基础设施吗?没问题,只需更新模块,运行它,一切就绪!

如果您已经在 AWS 上手动执行过此操作,那么您可能已经看到了 IAC 的优势。但如果您还不相信,请阅读下一个用例。

案例 2 - 复杂的应用程序让人抓狂

你想出了一个很棒的点子——一个非常酷的 Web 应用——一开始很简单,但现在你有很多客户依赖于这个应用。在这种情况下,一台 Web 服务器和一个数据库显然不够用。

首先添加一个负载均衡器和另一台 Web 服务器,并记录整个过程。一段时间后,您需要添加另一台服务器,然后按照文档中的流程操作即可完成。

接下来的一个月,您意识到仅运行一个数据库服务器是不够的,因此您添加了一个副本。

然后,你需要将部分工作负载从主服务器上移出,这意味着你需要一个消息队列和一个运行工作进程的服务器。你手动完成了所有操作,却忘记更新文档了。

几个月过去了,你终于需要添加更多队列和工作器了,但由于上次忘记更新文档,所以用之前的方法做起来就没那么容易了。虽然完成了,也运行正常,但现在队列和工作器的配置略有不同。这被称为配置漂移

稍后,您决定为应用添加一些缓存级别,由于需要使用 Redis/Memcached,因此需要为这些服务添加更多服务器。您还需要为静态文件配置 S3,为全球静态文件配置 CDN,并为 DNS 配置 Route53。

此时,公司已经发展壮大,是时候为新开发人员创建 IAM 角色和用户,然后赋予他们正确的访问权限。

你还希望提高可靠性,所以你考虑在不同的数据中心分配更多服务器。最后,你疯了,关掉了公司。

诚然,最后这个例子的结论有点灾难性,但想象一下,手动维护这么多的服务器会是什么样的体验。这显然无法很好地扩展。

您应该利用 IAC 吗?

正如科技领域的一切一样,这个问题的答案是视情况而定。我个人无法想象哪个项目不能通过使用 IAC 而变得更好。在我看来,如果你有机会运用它,你应该尝试一下,亲自体验一下!

如果您已经在使用类似 Heroku 的工具来开发非常简单的应用程序,那么实现 IAC 可能会产生过多的开销。但是,如果您的 Heroku 项目规模超过一定规模,您或许也能从这类工具中受益。例如,您可以参考Terraform: Heroku Provider 。

地形

Terraform 是 Hashicorp 推出的一款 IAC 工具,可以解决上述案例中出现的问题以及更多其他问题。正如他们在网站上所说,

Terraform 使您能够安全且可预测地创建、更改和改进基础架构。它是一个开源工具,可将 API 编码为声明式配置文件,这些文件可在团队成员之间共享、视为代码、进行编辑、审阅和版本控制。

例如,您有一个连接了 5 个虚拟机的负载均衡器。运行以下简单代码,即可每次都返回到相同的状态。

resource "aws_elb" "frontend" {
  name = "frontend-load-balancer"
  listener {
    instance_port     = 8000
    instance_protocol = "http"
    lb_port           = 80
    lb_protocol       = "http"
  }

  instances = ["${aws_instance.app.*.id}"]
}

resource "aws_instance" "app" {
  count         = 5
  ami           = "ami-408c7f28"
  instance_type = "t1.micro"
}
Enter fullscreen mode Exit fullscreen mode

太棒了!想象一下,如果要手动操作,你得点击多少次。肯定不少!

利用类似的代码,我仅用一周时间就重现了之前提出的第二个案例,这真是太神奇了!我敢肯定,如果手动操作,我至少要花两倍的时间。

结论

您的基础设施与其运行的代码一样重要,因此我建议您以应有的方式对待它;您应该完成审查、版本控制、测试等。

即使你纪律严明、记录所有细节,手动管理基础设施也并非易事。毕竟,你只是凡人——总有一天你可能会忘记一些事情,到那时你就会后悔没有使用 IAC 工具。

您可以先使用 IAC 工具管理应用程序中的一些简单内容,然后逐步迁移其他内容。

如果您有机会使用 Terraform 或任何其他 IAC 工具,请将其视为改进基础架构管理方式的绝佳方法。它能让您快速成就伟业!

如果您有任何问题或意见,请在下面发表!

资源

  • 基础设施即代码:云服务器管理,作者:Kief Morris。链接
  • Terraform:启动并运行作者:Yevgeniy Brikman。关联
鏂囩珷鏉ユ簮锛�https://dev.to/fedekau/infrastruct-as-code-a-beginners-perspective-2l8k
PREV
学习 React - 第 1 部分 - 使用 Webpack 4 (+ CSS / SASS) 简单设置 React 应用程序
NEXT
自动管理个人和工作 git 配置