「DevOps系列」 深入理解Terraform

2,703 阅读4分钟

今天,我打算写一系列关于在生产环境中如何使用Terraform定义和管理基础设施即代码(以下简称IaC)的文章。如果你之前没有使用过,那么这里给一个简单的定义,Terraform是一种可以让你通过简单的,可声明的编程语言来为各种云服务商(AWS,Azure,Aliyun等)定义基础设施并且用一些命令来部署和管理这些基础设施。

在Gruntwork,我们使用Terraform 作为Infrastructure as Code Library的主要的IaC工具之一。这是一个为广泛使用的云厂商AWS,GCP和Azure提供超过300,000行可重复使用,经过实战考验的生产级别的基础架构代码的集合。在这篇介绍文章中,我们会讨论我们为什么会坚信每个软件公司都应该使用IaC。接下来我们会讲到如下主题:

  1. 为什么我们使用Terraform 而不是Chef,Puppet,Ansible,SaltStack。
  2. Terraform 简介
  3. 如何管理Terraform 状态
  4. 如何使用Terraform 模块创建可复用的基础设施
  5. Terraform小技巧:循环,条件语句,和各种坑
  6. 团队中如何使用Terraform

好了,现在言归正传。现在我们开始深入讨论下为什么每个互联网软件公司都应该定义他们的IaC。

为什么需要基础设施即代码

以前,在遥远的一个数据中心里。一支古老而富有能力经验的为人所知的系统管理员手动来部署基础设施。每台服务器、路由表项,数据库配置和负载均衡器都是通过手动来创建和管理的。那是一个黑暗而恐惧的时代:担心宕机,担心意外配置文件错误,担心缓慢而易错的部署。好消息是感谢DevOps的崛起,我们现在可以有更好的方式来处理这些事情:Infrastructure-as-Code(IAC)。

相比于点击Web界面或者SSH 到一台服务器,然后手动执行命令。IAC背后的想法是通过写代码来定义,拓展和管理你的基础设施。这有很多好处:

  • 你可以自动化你的整个扩展和部署程序,这使得比手动操作更加快速也更加可靠。
  • 你可以在源文件中表示整个基础设施的状态,这样任何人的都可以阅读,而不是只有管理员才知道。
  • 你可以版本化存储这些源文件,这意味着你的基础设施整个历史都可以在提交日志中追溯,这可以让你debug 问题,同时如果必要,完全可以回滚到旧版本。
  • 你可以通过代码审核和自动化测试来验证每次基础设施的变化。
  • 你可以创建(或者购买)一系列可以重复使用,经过实战考验的生产级别的基础架构代码的集合。

还有另外一个重要切格外受关注的原因:它会然让开发者更开心。部署代码是很枯燥和繁琐的任务。电脑可以快速而高校地做这些事情,但是人类就会效率低下而易犯错。还有,开发者会很反感工作。因为这没有任务创造力,挑战性以及受人认可。你可以月复一月地完美地部署代码,但是没人会在乎和注意这些,知道有一天你出错了。

这些都创造了一种压力重重而又令人不快的环境气氛。而IAC 提供了更好的选择可以让电脑和开发者只做他们本身擅长的事情。

为什么是Terraform?

有很多方式可以实现IAC,从最简单的手动创建shell 脚本到类似于Puppet、Ansible 等这样的管理服务。那为什么我们坚持选择Terraform最为我们的IAC 工具呢?欲知详情,请看下一节——No1:为什么我们使用Terraform 而不是Chef,Puppt,Ansible。

每天三分钟,知识效率高。轻文章,更高效。

每天三分钟,知识更轻松。

欢迎关注同名微信公众账号极客24h。