前言

很多年以前参加过一次AWS AWSome Day,那是一种AWS在全球各大城市巡回举办的免费的技术研讨会,时长一天,为初次接触AWS大的开发人员、IT技术人员以及企业技术领域的决策者提供入门级的AWS产品介绍。在那次AWSome Day中,我第一次接触到了现在公有云里那些耳熟能详的概念,比如Region、Availability Zone、Auto Scaling Group、RDS这些经典产品。

最让我觉得惊奇的是,培训师现场演示了一种名为CloudFormation的产品,用培训师的话说就是“撒豆成兵”,通过编写一些JSON就可以批量反复创建一批云端资源,例如AWS官方提供的一个CloudFormation例子

{

    "Description" : "Create an EC2 instance running the Amazon Linux 32 bit AMI.",

    "Parameters" : {

        "KeyPair" : {

            "Description" : "The EC2 Key Pair to allow SSH access to the instance",

            "Type" : "String"

        }

    },

    "Resources" : {

        "Ec2Instance" : {

            "Type" : "AWS::EC2::Instance",

            "Properties" : {

                "KeyName" : { "Ref" : "KeyPair" },

                "ImageId" : "ami-3b355a52"

            }

        }

    },

    "Outputs" : {

        "InstanceId" : {

            "Description" : "The InstanceId of the newly created EC2 instance",

            "Value" : {

                "Ref" : "Ec2Instance"

            }

        }

    },

    "AWSTemplateFormatVersion" : "2010-09-09"

}

这样一段简单的JSON,就可以让我们用指定的镜像id创建一台云端虚拟机,不需要在界面上点点点。要知道在当时,我正在一家初创公司工作,同时身兼架构师、后台开发程序员、DBA以及运维数职,要维护测试、预发布以及生产三套环境,时不时还因为要去修复因环境之间配置不一致而引发的种种错误而焦头烂额,那时的我就很期待CloudFormation能够给予我这种能够批量创建并管理"招之能来,来之能战,战之能胜,胜之能去"的环境的能力。但很可惜,CloudFormation是AWS独家拥有的能力,而那时的AWS价格对我们来说太贵了,中国区的产品也非常少,所以这个梦想也就不了了之了,但是CloudFormation的那种高度标准化与自动化给我带来的冲击一直挥之不去。

我当时并不知道在西雅图的华盛顿大学,有一个美日混血大帅哥Mitchell Hashimoto和他的老板Armon Dagar也深深沉迷于CloudFormation所带来的那种优雅与高效,同时他们也在头疼CloudFormation本身的一系列问题,最主要的就是它是AWS独占的。强人和我这种庸人最大的区别就是,强人有了想法直接就去做,Mitchell和Armon在讨论中渐渐有了一个想法——打造一个多云(Multi-Cloud)的开源的基础设施即代码(IaC)工具,并且要超越CloudFormation。他们组建了一家名为HashiCorp的公司来实现这个目标。

在今年3月,HashiCorp宣布成功获得1.75亿美元的E轮融资,投后公司估值51亿美元。HashiCorp的产品线主要有Nomad、Consul、Valut以及Terraform,另外还有Vagrant以及Packer两个开源工具,2020年还推出了Boundary以及Waypoint两个新产品。

Nomad、Consul、Vault、Terraform组成的HashiStack
图 1.1/1 - Nomad、Consul、Vault、Terraform组成的HashiStack

HashiCorp的产品线主要是由Nomad、Consul、Vault、Terraform组成的HashiStack,Terraform扮演了承载整个HashiStack的关键角色,负责在不同的云平台之上创建出一致的基础设施来,当然我们完全可以只使用Terraform而不是使用完整的HashiStack。

HashiCorp这家公司有一个显著特点,就是他们极其有耐心,并且极其重视“基础设施”的建设。例如,他们在思考Terraform配置文件该用JSON还是YAML时,对两者都不满意,所以他们宁可慢下来,花时间去设计了HCL(HashiCorp Configuration Language),使得他们对于声明式代码的可读性有了完全的掌控力。再比如在他们设计Terraform以及Vault、Packer时,他们使用的go语言因为是把引用代码下载下来后静态链接编译成单一可执行文件,所以不像jar或者dll那样有运行时动态加载插件的能力。因此他们又花时间开发了go-plugin这个项目,把插件编译成一个独立进程,与主进程通过rpc进行互操作。该项目上的投资很好地支撑了Terraform、Vault、Packer项目的插件机制,进而演化出如今百花齐放的HashiCorp开源生态。

我这些年陆陆续续向很多人推荐过Terraform,并且很高兴地看到行业内越来越多的团队开始认可并采纳,但是前不久我仍然十分惊讶地意识到,由于Terraform官方并没有提供任何的中文文档,导致了许多中国互联网从业者没有足够的动力去啃完所有英文文档并付诸实践。这当然是一件非常正常的事情,对国人来说阅读英文文档毕竟比读中文的文档费力一些。先贤说:山不来就我,我便去就山。既然我期望Terraform能在中国得到更大的推广,那么我就为此做一些工作,为Terraform写一个入门级的中文教程,降低学习和推广的难度。

这个教程受到HashiCorp Infrastructure Automation Certification的启发,这是一个HashiCorp出品的Terraform认证,是一个相当基础的认证考试,内容涵盖了Terraform所有的常规操作技能。通过这门认证并不能让你成为一个高效的Terraform开发人员,但可以确保你装备齐全,拥有了足够全面的知识来进行Terraform实战和探索。

这个教程基本按照Terraform认证考试所列的考纲来编写,第三章到第五章内容主要是翻译官方文档,目标读者是((对“基础设施即代码”以及Terraform有兴趣 || 厌倦了在浏览器中依靠大量低级重复点点点操作云) && (懒得阅读英文文档)) 的人。如果你是为了确认Terraform某项功能,或是你的英语阅读能力足够好,请直接按照考纲去阅读官方文档,毕竟官方文档最为权威,更新也比较及时。假如你只是想偷个懒,想通过快速浏览中文文档来对Terraform有一个大概的了解,那么这个教程就是为你准备的。另外如果有朋友担心学习曲线问题的话,请不用担心,Terraform在设计时就为降低学习曲线做了大量工作,可以这样说,只要你能够看懂JSON,那么就能轻松掌握Terraform。

另外本教程在编写过程中参考了Terraform著名教材——Yevgeniy Brikman编纂的《Terraform Up & Runnning》:

Terraform著名教材《Terraform Up & Running》,建议直接阅读第二版
图 1.1/2 - Terraform著名教材《Terraform Up & Running》,建议直接阅读第二版

这本书是目前Terraform最好的教材,喜闻电子工业出版社已于2020年12月出版,建议读者在掌握了Terraform基础知识以后阅读该教材,掌握更多的Terraform生态高阶技能。

对于这本书我再安利一下,目前中国人参加ACM(acm.org,计算机协会)年费有折扣,折下来160+一年,可以在learning.acm.org上进入O'REILLY在线学习中心畅读大量O'REILLY的电子书,非常划算,基本读两三本就回本了。这本书也可以通过这种方式在线阅读。

教程编写时Terraform对主力版本是0.13.5;Terraform提供了Macos、Linux以及Windows的发行版,所以读者完全可以自己跟着教程进行一些练习和实验。

另外,Terraform的生态环境到了今天,已经发展为三个分支,分别是:

  • 开源版
  • Terraform Cloud云服务版
  • Terraform企业版

三个版本之间有些微的差别,包括对同一名词(例如Workspace)的定义都会有所不同。本教程针对开源版编写,暂不涉及云服务版以及企业版。

特别鸣谢李宇飞同学为本书进行了非常细致的校对工作。

让我们开始我们的Terraform入门之旅吧。

results matching ""

    No results matching ""