Terraform1。什么是Terraform?2.Terraform核心功能2.1。基础设施作为Code2.2。执行计划2.3。资源图2.4。改变自动化3.Terraform如何工作3.1。Code3.2。模块3.3。模块Registry3.4。丰富的RESTAPI3.5。风控系统Integration3.6。配置Designer3.7。工作区3.8。变量3.9。应用程序4.3。自助服务集群4.4。软件演示4.5。一次性环境4.6。软件定义网络4.7。资源调度器4.8。多云部署5.Terraform与其他工具5.1。CloudFormation、Heat等5.3。Boto、Fogd等5.4。定制解决方案1.什么是Terraform?Terraform是一种用于安全高效地构建、更改和版本控制基础架构的工具(用于基础架构自动化的编排工具)。它的目标是“Write,Plan,andcreateInfrastructureasCode”,基础设施即代码。Terraform可以支持市面上几乎所有的云服务。具体来说,可以用代码来管理和维护IT资源,一些以前需要人工操作的工作可以通过程序实现自动化。这样做的结果非常明显:高效且不易出错。Terraform为资源和提供者提供了灵活的抽象。该模型允许代表从物理硬件、虚拟机和容器到电子邮件和DNS提供商的一切。由于这种灵活性,Terraform可用于解决许多不同的问题。这意味着有许多现有工具与Terraform的功能重叠。但需要注意的是,Terraform和其他系统并不相互排斥。它可用于管理小至单个应用程序或大至整个数据中心的不同对象。Terraform使用配置文件来描述它管理的组件(从单个应用程序到整个数据中心)。Terraform生成一个执行计划,描述它将如何实现所需的状态,然后执行它以构建所描述的基础设施。随着配置的变化,Terraform能够确定发生了什么变化并创建可以应用的增量执行计划。Terraform是一个用Go语言开发的开源项目,你可以在github上访问它的源代码。2.Terraform核心功能2.1.基础设施即代码(InfrastructureasCode)基础设施是使用高级配置语法来描述的。这允许您的数据中心蓝图像其余代码一样进行版本控制和管理。此外,基础设施可以共享和重用。2.2.执行计划Terraform有一个计划步骤,它生成一个执行计划。执行计划显示了Terraform在执行apply命令时将执行的操作。提前检查计划允许Terraform在操作真实基础设施时避免意外。2.3.资源图谱(ResourceGraph)是Terraform构建的所有资源的图谱,它可以并行创建和修改任何资源而没有相互依赖。因此,Terraform可以高效地构建基础设施,运维人员也可以通过图来深入了解其基础设施中的依赖关系。2.4.变更自动化无需人工交互即可将复杂的变更集应用于基础架构。有了前面提到的执行计划和资源图,我们就可以准确地知道Terraform会改变什么,改变的顺序,从而避免很多可能的人为错误。3.Terraform的工作原理TerraformEnterprise在基础设施之上提供协作、治理和自助服务工作流,作为来自开源的代码配置。TerraformEnterprise为团队提供工作区、模块和其他强大的结构,以协作构建基础设施。运营商可以将基础设施作为代码打包到可重复使用的模块中,使开发人员能够以自助服务的方式快速配置。同样,作为代码和日志记录的策略使组织能够保护、管理和审计他们的整个部署。Terraform允许将基础设施表示为代码。所需状态以简单的人类可读语言表达。Terraform使用这种语言来提供更改的执行计划,可以对其进行安全审查,然后应用更改。可扩展的提供程序允许Terraform管理范围广泛的资源,包括硬件、IaaS、PaaS和SaaS服务。3.1.代码HashiCorp配置语言(HCL)是一种简单的人类可读配置语言,用于定义所需的基础设施资源拓扑。配置也可以在JSON中定义,用于编程生成和应用程序集成。资源“google_compute_instance”“服务器”{name=“server”machine_type=“g1-small”zone=“us-centrall-a”磁盘{image=“ubuntu-1404-trusty-v20160114e”}}资源“dnsimple_record”“你好"{domain="example.com"name="server"value="${google_compute_instance.server.network_interface.0.address}"}3.2。模块封装资源组以创建可重用的基础设施块。模块允许用户指定可变输入和消耗基础设施,而无需专家了解细节。模块“vpc”{source=“terraform-aws-modules/vpc/aws”name=“my-vpc”cidr=“10.0.0.0/16”azs=[“eu-west-1a”,“eu-west-1b","eu-west-1c"]private_subnets=["10.0.1.0/24","10.0.2.0/24","10.0.3.0/24"]public_subnets=["10.0.101.0/24","10.0.102.0/24","10.0.103.0/24"]enable_nat_gateway=trueenable_vpn_gateway=truetags={Terraform="true"Environment="dev"}}3.3。来自合作伙伴、贡献者和HashiCorp社区模块库的模块注册表。自定义模块的私人注册表,受版权保护、验证和批准,供组织内部使用。3.4.丰富的RESTAPI利用TerraformAPI将配置工作流集成到现有的CI/CD管道或自定义自动化工具中。3.5.VCS集成使用您首选的版本控制系统编写、版本化、审查和协作处理Terraform代码。与TerraformEnterprise集成以自动验证配置更改并触发Terraform。将使用Terraform所做的更改链接到版本控制中的关联更改。3.6.ConfigurationDesigner基于GUI的工作流程,用于组合模块和定义变量,以便用户配置基础架构,而无需将其编写为代码。3.7.WorkspacesWorkspaces将整体基础架构分解为更小的组件或“微型基础架构”。这些工作区可以与团队保持一致,以实现基于角色的访问控制。从单一管理面板查看跨云提供商、团队和环境的所有工作区。保护和审核所有工作区更改。3.8.变量粒度变量允许轻松的代码重用并启用动态更改以扩展资源和部署新版本。所有变量都经过加密,受访问控制保护,并在配置期间根据需要进行检索。3.9.运行Terraform使用两阶段供应计划(试运行)和应用程序(执行)。可以在执行前检查计划以确保预期的行为和安全性。可以使用API从GUI或CLI应用Terraform运行,以保留与OSS相同的工作流。策略检查步骤适用于计划。3.10.状态状态文件是对当前配置资源的记录。状态文件启用基础架构的版本历史记录,并在静态时加密。可以检查版本以查看增量更改。提供远程状态存储和管理,使团队能够共享状态、一次阻止多个更改并查看团队所有基础架构更改的版本化历史记录。4.Terraform用例当前页面列出了Terraform的一些实际用例,实际用例比我们介绍的要多得多。由于其原生的可扩展性,可以添加提供者和供应者以进一步扩展Terraform操作资源的能力。4.1.Heroku应用程序设置Heroku是一个流行的PaaS平台,用于托管Web应用程序。开发人员创建应用程序并添加其他组件,例如数据库或邮件提供程序。最好的功能之一是能够动态调整测功机和工人的数量。然而,最常见的应用程序很快就需要许多附加组件和外部服务。Terraform可用于编码HeroKu应用程序所需的一些配置,以确保所有必需的组件可用,但它可以更进一步:配置DNSSimple以设置CNAME,或为应用程序配置CloudFareCDN。最重要的是,Terraform可以在不到30秒的时间内完成所有工作,而无需借助Web界面。4.2.多层应用程序多层架构中非常常见的模式。大多数两层架构都是使用数据库层的Web服务器集群。为API服务器、缓存服务器、路由网格等添加其他层。使用此模式是因为每个层都独立扩展并为关注点提供隔离。Terraform是构建和管理基础设施的完美工具。每一层都可以描述为一组资源,每一层之间的依赖关系都会被自动处理;Terraform将确保数据库服务器在Web服务器启动之前可用,并且负载均衡器可以感知后端Web节点。只需修改每一层配置文件的count值,就可以使用Terraform轻松实现伸缩。由于资源的创建和配置是代码化和自动化的,因此随负载扩展变得不那么重要了。4.3.自助集群在一定规模的组织中,管理庞大且不断增长的基础设施对于集中式运维团队来说变得非常具有挑战性。相反,此举是为了创建自助服务基础设施,允许产品团队使用集中运营团队提供的工具来管理他们自己的基础设施。使用Terraform,可以将有关如何构建和扩展服务的知识编入配置文件中。Terraform配置文件可以在组织内共享和传播,使客户团队能够像黑盒子一样使用配置文件,并将Terraform作为管理服务的工具。4.4.软件演示现代软件正变得越来越网络化和分布式。尽管像Vagrant这样的工具构建了用于演示的虚拟环境,但在更接近生产环境的真实基础设施上进行演示仍然具有挑战性。软件开发这可以提供一个terraform配置文件,用于在AWS等云平台上创建、配置和引导演示环境。这使得最终用户可以轻松地在自己的基础设施上演示软件,设置集群数量等参数,以更严格地测试任何规模的工具。4.5.一次性环境同时拥有生产和暂存或QA环境是常见的做法。这些环境是生产环境的缩小版克隆,用于在将新应用程序发布到生产环境之前对其进行测试。随着生产环境的增长和变得越来越复杂,维护最新的暂存环境的工作变得越来越繁重。使用Terraform,可以对生产环境进行编码,然后与暂存、QA或开发人员共享。这些环境可用于快速启动新的测试环境,并且可以轻松销毁。Terraform可以帮助控制并行环境的复杂性,实现弹性创建和销毁。4.6.软件定义网络软件定义网络(SDN)在数据中心越来越受欢迎,因为它为运营和开发提供更多控制,并使网络能够更好地支持在其上运行的应用程序。大多数SDN实施都有一个控制层和一个基础设施层。Terraform可用于软件定义网络的编码配置。这些配置稍后可以使用Terraform自动配置和编码,以对控制平面接口进行编码。这允许对配置进行版本控制和自动更改。例如:AWSVPC是最常见的软件定义网络之一,可以使用Terraform进行配置。4.7.ResourceScheduler对于大型基础架构,将机器静态分配给应用程序变得越来越具有挑战性。为了解决这个问题,Borg、Mesos、YARN、Kubernetes等一大批调度器应运而生。它们可用于动态调度Docker容器、Hadoop、Spark和许多其他软件工具。Terraform不限于像AWS这样的物理提供商。资源调度器可以被认为是Terraform可以从中请求资源的提供者。这允许Terraform在多个层上使用:配置物理基础设施、运行调度程序和配置调度程序网格。4.8.多云部署跨云扩展基础架构以提高容错能力通常很有吸引力。如果只有一个可用区或一个云提供商,容错通常会受到该提供商能力的限制。拥有多云部署可以更优雅地恢复宕机的可用区甚至整个云平台。显然,多云部署具有挑战性,因为现有的基础设施管理工具是特定于云的。Terraform不限制某个云平台,允许一个配置文件用于管理多个云提供商,甚至处理跨云依赖。它简化了管理和编排,并帮助运营构建大型多云基础设施。5.Terraform与其他工具的比较Terraform为资源和服务提供者提供了一个灵活的抽象层。该模型允许表示从物理硬件、虚拟机和容器到邮件和DNS提供商的所有内容。由于其灵活性,Terraform可用于解决许多不同的问题。这意味着许多现有工具与Terraform功能重叠。我们将Terraform与许多此类工具进行了比较,但重要的是要注意Terraform和其他系统并不相互排斥。它可用于管理单个应用程序或整个数据中心。5.1.Chef、Puppet和其他配置管理工具在现有机器上安装和管理软件。Terraform不是配置管理工具,它允许现有工具专注于它们的优势:引导和初始化资源。使用供应器,Terraform使任何配置管理工具都可以在资源创建后用于供应和初始化资源。Terraform专注于数据中心和相关服务的更高级别的抽象,同时不牺牲配置管理工具的能力,以发挥它们最擅长的作用。它还包括这些工具负责的成功编排,使整个基础设施的部署简单可靠。5.2.CloudFormation、Heat等CloudFormation、Heat等工具。允许将基础架构详细信息写入配置文件。配置文件允许弹性地创建、修改和销毁基础设施。Terraform的灵感来自于它所解决的问题。Terraform还使用配置文件来配置基础架构细节,但它进一步与云无关,并且可以结合多供应商和多服务编排。例如:Terraform可以同时部署AWS和OpenStack集群,开放Cloudflare、DNSimple等第三方提供商集成CDN和DNS服务。这使Terraform能够利用其支持服务来表示和管理整个基础架构,而不仅仅是单个提供商中已经存在的子集。它提供了统一的语法,而不是要求运营商为每个平台和服务使用单独的、不可互操作的工具。Terraform使用执行计划的概念将计划语法和执行阶段分开。通过执行terraformplan,更新当前状态,查询配置文件生成新的执行计划。该计划包含将要执行的所有操作:将创建、销毁和更改的资源。操作可以检查其状态以确保它符合预期。使用terraformgraph,计划将被可视化并按顺序输出依赖关系。捕获计划后,执行语法将仅限于计划中的操作。其他工具结合了规划和执行阶段,这意味着运营商被迫在心理上推理变化的影响,这很快就会变得难以在大型基础设施中进行追踪。Terraform使操作员有信心应用更改,因为他们事先确切知道会发生什么。5.3.Boto、Fogd和其他库(如Boto和Fog)用于本地访问云提供商和服务提供的API。一些库强制关注特定的云,其他库则尝试连接到所有云并隐藏上面的差异。使用客户端工具仅提供对API的低级别访问,需要应用程序开发人员创建自己的工具来构建和管理其基础架构。Terraform无意向提供商提供低级编程访问,而是提供高级语法来描述如何创建、供应和组合云资源和服务。Terraform非常灵活,使用基于插件的模型来支持提供者和供应者,使其能够支持几乎所有服务API。5.4.自定义解决方案Terraform旨在应对这些挑战。它提供了一种简单、统一的语法,无需学习新工具即可管理几乎所有资源。通过捕获所有资源,自动解决它们之间的依赖关系,运营商无需记忆和推理。消除构建工具的负担使运营商能够专注于他们的基础设施而不是工具。此外,Terraform是一个开源工具。除了HashiCorp,Terraform社区还在帮助扩展其功能、修复错误以及改进文档和用例。Terraform有助于解决每个组织都有的问题,并提供适用的标准以避免跨组织重新发明轮子。它的开源性质确保了它可以长期发展。
