Terraform从入门到实践:快速构建你的第一张业务网络(上)

本文涉及的产品
函数计算FC,每月15万CU 3个月
简介: 本次分享主题为《Terraform从入门到实践:快速构建你的第一张业务网络》。首先介绍如何入门和实践Terraform,随后演示如何使用Terraform快速构建业务网络。内容涵盖云上运维挑战及IaC解决方案,并重磅发布Terraform Explorer产品,旨在降低使用门槛并提升用户体验。此外,还将分享Terraform在实际生产中的最佳实践,帮助解决云上运维难题。

本文来自2024云栖大会现场分享,如想观看现场视频或者了解更多内容,可移步Well-Architeched Framework 云卓越架构-效率专场(上),本文视频可定位到15:00进行观看。

今天给大家带来的主题分享是《Terraform从入门到实践:快速构建你的第一张业务网络》,首先由我来为大家分享如何入门和实践 Terraform,之后将由我的同事陆碧宇为大家分享如何使用Terraform快速构建第一张业务网络。

随着IaC理念的不断深入和发展,以Terraform为代表的IaC工具已成为云上资源运维的重要工具,也成为越来越多的客户在上云时的必备工具。

今天分享的内容会从以下四个方面展开。首先分享云上运维将会面临的挑战,以及通过IaC如何解决这些挑战;第二,详细向大家展示如何从零开始入门Terraform;第三,我们将重磅发布一款产品Terraform Explorer, 该产品一方面尽可能降低在阿里云上使用Terraform 的门槛,另一方面提升大家在云上使用Terraform的体验;最后向大家介绍Terraform在实际生产落地过程中的最佳实践。

IaC助力降低云上运维复杂度

首先看三个案例:

在今年暑假之前,有个游戏厂商推出了一款新游戏,在运行时要为每位玩家分配一台独立的windows云主机,在云主机启动时还要完成游戏的加载。当有大量的玩家使用这款游戏时,要求游戏平台能够快速完成windows云主机的创建,并且当游戏退出时还要完成windows云主机的快速释放,以免造成资源浪费。

二是打车业务。在节假日前,为应对流量的宏峰,需要提前完成资源扩容,包括ECS、数据库等。在节假日后,还需实时回收资源。

三是一般企业客户上阿里云前,都需对云上资源做POC验证,在此过程中需要使用新账号在多个云产品间创建大量的云资源。POC验证完成后,还需回收云资源。

通过这三个案例,我们发现无论是应用还是项目,无论在启动期间还是运行期间,都需要和阿里云产品进行互动,即对云资源进行管理和运维。随着云产品种类的不断增加,功能的不断丰富,云上运维的成本也在逐步增加。

面对运维复杂度不断提升的问题,现有的运维方式会面临诸多挑战。

以控制台为代表手动运维的方式,一方面它的效率较低,另一方面它的执行成功率不高,涉及人为操作,很难避免人为误操作带来的影响。

第二是以API集成方式所带来的自动化运维方式。虽然它的运维效率有所提高,但会出现另一个瓶颈,当使用云产品的种类足够多,功能不断丰富时,所需集成的API数量和复杂度也在逐步提升,对集成成本造成更大影响。

还有随着稳定性、安全性事件的频发,随着业务架构调整,资源的架构也要相应的调整。多账号、多region的部署架构也对现有的运维方式提出更高的要求。

在此背景下, IaC提供了一种很好的解决方案。

一方面,IaC可以将所有需要管理的资源以代码化的方式进行定义,通过对代码进行自动化操作来实现效率提升。同时借助自动化的流程,能够降低人为运维带来的不稳定因素。

其次,我们可在代码提交或编写的时候review,同时增加事前、事后的审计规则,对其进行有效管控,进而提升运维的安全性。

第三,IaC的理念是提供面向资源的编码引擎,屏蔽用户通过API和云产品之间交互的逻辑,无需担心所管理的资源背后集成了多少API、API的集成方式是什么样的、编排逻辑是什么。当需要对资源进行扩容、变更时,只需修改代码中的一个IaC片段,通过IaC的方式就可以实现资源的管理。

Terraform就是一种典型的IaC工具,以插件化的方式屏蔽了客户与云产品之间通过API交互的逻辑,这个插件在Terraform里叫做provider。阿里云提供了terraform-provider-alicloud标准官方插件。Terraform用户在管理云资源时,可按照声明式(Terraform HCL语言)的方式定义面向Terraform的IaC代码,并通过执行Terraform的命令完成对资源的自动化管理。完成资源的创建和管理后,Terraform会将所有实际创建出来的资源状态、属性保存在状态文件中,当下次需要对资源进行持续管理时,Terraform会对比状态文件和代码配置之间的不一致性,只有出现了不一致,再次执行Terraform命令才会将不一致消除,完成对资源的进一步管理。

阿里云作为Terraform重要的云服务提供商,目前已经支持了超过100多款云产品,800多个资源类型,同时也提供丰富的物料支持和能力上的建设,进一步降低用户在阿里云上使用Terraform的门槛。我们也提供了Cloud Shell、Explorer、AI助手等在线能力,进一步提升用户在阿里云上使用Terraform的体验。

Terraform入门:开启你的Terraform之旅

对Terraform基本了解之后,接下来我会向大家介绍如何从零入门Terraform。

Terraform的入门比较简单,它主要的工作流程分为四步:首先我们需要根据自身的业务架构编写面向Terraform的代码,完成后执行Terraform的init命令,完成代码所依赖的provider自动化下载。下载完后,执行预览命令实现对所定义代码的在线浏览。如果预览结果符合预期,即新增加的、修改的、删除的资源都是预期之内的,可执行Terraform apply命令完成对资源的自动化创建和管理。有了这样的工作流之后,我们梳理出用户使用Terraform的全旅程。入门用户或初级用户只需关心Terraform环境如何搭建,以及搭建好后代码如何编写,代码如何执行和调试。如需将Terraform更深一步应用到生产环境中,我们还需关心Terraform如何和业务集成,事前、事后的保障如何做,自动化流程如何搭建等更多的步骤。

首先是代码的编写阶段。

提到Terraform代码,首先想到的是如何从零开始编写一个相对标准、规范,且可维护性和可读性较高的代码。这需要结合Terraform的执行逻辑,Terraform在执行过程中要加载当前工作目录下所有以tf结尾的文件,将这些文件中所有的资源、参数定义编排到一起,以并发的方式来完成资源的自动化创建。有了这样的前提,我们会发现Terraform所有代码的定义不仅与顺序无关,而且与文件无关,我们可以按自身业务架构设计Terraform框架。在这个框架下,我们可以在不同的tf文件中编写不同的业务逻辑。比如我们variable.tf的文件中编写入参定义,outputs.tf里定义出参,main.tf定义所有资源、资源关系的逻辑代码。我们也可以对main.tf按照产品或者应用进行切分,比如ecs.tf、vpc.tf、oss.tf等。切分后,在相应的文件中编写好相应的逻辑代码,对资源做进一步的调整。

我们在编写过程中可能会遇到某些逻辑代码的重复性较高,比如创建网络,很多云产品,如ECS、RDS都需要网络环境,这时可以借助Terraform Module将重复性、复用性比较高的一些代码进行Module封装,通过上一层的调用逻辑来降低代码的复杂度。

完成基本的代码编写之后,我们还需要对它进行状态配置。默认情况下,Terraform 会生成一个本地的状态文件,但是我们更加推荐大家使用线上的状态文件,一方面它的安全性比较高,因为它保存在云端,同时有锁机制进行校验,支持团队协作,同一团队内不同的人在不同端编写的代码都可以放在同一个状态文件去管理。

完成代码编写之后需要对代码进行校验。我们通过一些基本的命令或者规则来校验所有写好的模板是否符合预期,进而提前发现问题。校验通过的代码可以提交或发布到Git、OSS、BitBucket等。

有了代码之后,接下来需要考虑如何能够快速的执行Terraform代码。

Terraform的代码的执行分为两步。第一步是需要有一个Terraform运行环境,第二步是执行Terraform命令。运行环境主要分为两部分,首先要安装Terraform,第二是对Terraform进行配置。Terraform是一个面向客户端的、二进制文件,安装流程比较简单,我们只需根据操作系统的版本下载相应的安装包。下载完成之后,解压到本地的可执行目录下就可以对它进行操作。第二是对它进行配置,主要是对它进行身份认证的配置。云产品的API在调用时都需要对这些API传入AK进行签名,进一步完成API调用。Terraform也是一样的,最终也是通过这些API完成资源操作,所以需要在Terraform中对它的访问凭证进行配置。配置完成之后,依次执行初始化、预览、运行命令,进而完成代码中所定义资源的自动化管理。在管理完成后,我们会发现只有在模板代码中定义的状态和状态文件中定义的状态不一致的时候,Terraform才会真正去执行和创建资源。正如左下角所展示的,代码中定义有4台ECS, 但实际状态文件中有3台。当运行Terraform命令时,会在现有状态文件基础上创建出来1台ECS。同样的,如果代码中定义只有2台ECS,实际状态有3台, 那么它就会在3台ECS基础上释放1台ECS,最终达到代码状态和状态文件状态的一致,这就是Terraform在运行过程中的机制。

在实际运行过程中还会遇到各种各样的问题。我梳理了两个常见的问题,一是权限问题,二是开通的问题,还有注意事项。

权限问题,一方面是配置Terraform的AK时,我们需要关注AK的权限问题。因为只有具备足够权限的AK才能实实在在地创建代码中所定义的资源。另一方面,当涉及云产品间的调用服务时,往往存在服务关联角色。我们需要在执行Terraform之前提前准备好角色,否则有可能引起最终Terraform执行失败的情况。

开通问题,阿里云上的某些产品在第一次使用时都需要开通。只有开通完成后才能对云产品进行资源操作。开通是一次性的,我们可以通过控制台手动开通,也可以通过自动化API和Terraform自动化开通。

最后是一些常见注意事项,比如运行超时、名称冲突、忘记销毁等。我重点强调一下资源的删除重建。我们都知道云上的产品/资源在完成创建之后,不是所有的资源属性都能够持续修改的,比如OSS bucket, 一旦bucket创建完成,它的名称是不能修改的,想要对它进行修改,要么创建一个新的资源,要么把当前资源先删掉,然后再创建一个新的。Terraform也是一样,当代码中所定义的一些资源在完成创建后,如果修改了不支持修改的资源属性,Terraform就会识别为这是一个要先删除再创建的资源,执行Terraform命令时也会先把原有的资源删除,然后创建新的。这是一个比较危险的动作,大家在真正去实践的时候,需要特别注意,或者根据自身的场景规避掉这些问题。

Terraform Explorer发布:阿里云上Terraform的最佳

接下来将重磅发布一款产品——Terraform Explorer,它有两个重要的功能,一是降低云上使用Terraform的门槛,二是以在线化的方式提升大家在云上Terraform的使用体验。

正如我们所了解到的,Terraform的使用过程分为三个阶段:代码编写、代码执行、状态管理。Terraform Explorer围绕这三个阶段进行建设。首先是代码编写,我们将所有Terraform支持的资源类型以表单的形式进行展示,当要定义某个资源代码,或编写某个资源模板的时候,只需通过表单的参数填写,就能自动生成Terraform模板。有了Terraform模板之后,我们还提供在线的Terraform运行环境,一键执行所有代码,并完成对代码中所定义资源的自动化创建。在创建完成之后,我们会自动托管状态文件,实现对代码中所定义资源的持续管理。除此之外,我们也借助AI的能力提供Terraform AI助手,您可以根据自身的业务需要输入您业务场景,然后会输出面向您的业务场景模板。

有了Terraform Explorer之后,Terraform用户旅程会变得非常简单。不需考虑Terraform Explorer环境如何搭建、如何配置、如何管理状态。我们只需要一个界面,通过表单填写就能够完成Terraform的一系列操作。接下来会有两个demo演示,第一个演示会向大家展示如何通过Terraform Explorer快速搭建一个web应用;第二个演示是如何通过AI自动生成Terraform模板。

第一个demo演示搭建的应用叫做Flask Web(演视频详见:使用 Terraform Explorer 快速搭建 Flask Web 应用)。

在阿里云的官方主站点搜索Terraform会自动进入Terraform站点,这里面提供了非常多的入门指南。第一个入门指南就是如何从零开始通过Terraform Explorer部署web应用,我们也提供一个非常完整的部署代码,点击“一键运行”,将会自动跳转到Terraform Explorer页面,点击下面的“发起调试“按钮,将会创建Terraform运行任务。修改任务名称之后,点击“预览”按钮, explorer将自动执行Terraform init和Terraform plan 命令, 进而完成代码中所定义资源的预览。预览完成之后,会将所有预览结果展示到页面上,可以在线查看预览结果。确认预览没问题,点击下面的“执行”按钮,将自动执行Terraform apply命令,意味着我们会实实在在地创建模板中所定义的资源。执行完成之后会输出一个Flask的web URL,通过访问web URL可以查看Flask web页面,这个页面将会输出“你好,阿里云”。

web URL也是通过模板中output出参定义的。URL是ECS的公网IP加上一个端口拼接的,所以当一台ECS启动成功之后会自动将一个web URL拼接好,输出到执行日志。执行完成之后,我们只需要复制web URL就可访问页面。如果要对”你好,阿里云”进行修改,回到表单页面,修改表单中的参数,再次发起预览和执行命令,就会将这些参数应用到新的基础设施。比如我修改了两个,一是把吐出的内容进行修改,二是修改了ECS实例名称,它会先将ECS的实例名称变更为新的,再将flask web里的输出内容刷新。当apply执行完成之后,不需要再复制新的URL,因为ECS没有变,且它的名称支持在线修改。执行完成后,我们只需刷新原有页面,就可看到更新后的结果“欢迎来到云栖大会”。

我们还提供“资源详情”页面,支持所有定义资源实际情况和属性值。通过资源详情,我们可以看到具体的值。当不再需要这个环境的时候,点击“销毁“按钮,就可以一键销毁模板中所定义资源。时间关系,我就不再做进一步的演示和等待。


接下来我们可以看一下第二个视频演示(演示视频详见:Terraform AI助手自动生成配置代码)。

这是为大家展示如何通过AI助手帮我们生成Terraform的模板代码。进入Terraform Explorer页面,右下角有Terraform AI的入口,点击后会弹出界面。当前Terraform智能助手主要支持两个功能,一是帮我们查找某个产品功能需要通过哪个资源类型进行操作;二是帮我们生成面向我们业务场景的Terraform代码。比如输入“创建ASK“,它会识别是否要在阿里云上创建serverless集群,输入”是的“,它会分析这个问题,生成创建serverless K8S集群代码。在生成过程中,不仅生成serverless K8S集群代码,还会帮我们将serverless集群所依赖的其他资源代码一并生成,比如VPC、 vSwitch等一次性生成,使得你得到的模板能够直接运行,无需其他条件。输出后,点击右下方“复制”按钮,就可一键copy到本地环境或线上环境,做一键执行和进一步调试


目前Terraform Explorer已经正式对外发布,AI助手目前还处于内测阶段,不久后将会发布,欢迎大家试用。

Terraform旅程落地最佳实践

最后将会向大家展示Terraform在落地过程中的一些最佳实践。

回到Terraform用户旅程,当Terraform应用到实际生产过程中时,我们要关心的不仅是环境和代码,还需关心Terraform如何和自身的业务集成,如何对它进行质量的保障、如何建设自动化运行的工作流。

我接下来会先会向大家介绍为什么我们要做质量保障。

随着时间的推移,以及架构的调整,多多少少都会存在一些代码腐烂的问题。Terraform代码也一样,随着资源架构的不断调整,资源参数的不断变更,Terraform代码也会逐渐趋于腐烂状态。针对这种情况,我们需要去建立一些机制来避免或减轻腐烂状态。这里提供了三种方案:

第一,提供静态检查机制。我们可以通过设置一些静态检查规则,或者依赖第三方工具实现对Terraform的自动检查,帮助我们在提交之前就能完成对代码的检查。

第二,建立一些测试机制。这分为两部分,一是手动测试机制,我们需要在编写完成或提交之前通过Terraform命令对他们进行稳定性测试,测试通过的代码才会被提交。

提交之后我们还需要借助CI、CD自动化测试工作流对它的代码进行规则性的校验,只有测试通过的代码才能被合并到master分支,进而发布。发布之后,我们需要端到端的测试工具对它进行持续的回归测试,这样才能确保这些基础代码出现问题的时候尽可能早的发现。

有了代码之后,如何将这些代码应用到真实的环境中?任何一个代码一般都会有三个环境:开发、测试、生产。同一套代码如何应用到三个环境中呢?这里提供两种方案。

一是workspace,这是Terraform自带的功能,也就是一份代码通过不同的workspace将三个环境进行隔离。通过这种隔离,一方面能够最大化的利用Terraform代码,但也有一个小缺陷是三个环境用workspace隔离只能放到一个状态文件里,即三个环境状态是耦合在一起的,当其中一个环境的状态出现损坏时,会对其他两个环境的状态造成损坏,此时要结合实际的使用场景进行控制。

二是通过目录划分对三个环境进行隔离。通过目录划分可以为每个目录配置独有的状态文件,实现三个环境的完全隔离。它的问题是三个环境放在三个目录功能下,会有大量的重复性代码。针对这个问题,我们推荐通过Module对这些重复性较高的代码进行封装。在上层业务或三个环境中通过Module调用实现资源的自动化管理,同时代码的复杂度不会太高。

最后向大家去分享当我们通过Terraform对基础设施进行实际的生产并应用到资源生产环境中时,还要考虑这些基础设施的稳定性怎么持续保障。这需要我们从全链路上看如何持续性的保障所有基础设施的质量。我提供了三种方式和手段。

这些基础设施是通过Terraform生产的,首先以代码工程视角去规避所有代码中潜在的逻辑性问题,比如增加提前审计规则、端到端的测试、版本控制等手段。

在代码完成稳定性控制后,我们在操作代码的过程中还要进一步控制,这涉及两方面。一方面是我们要借助自动化执行的手段尽可能规避人工运维的操作。另一方面是我们要对一些非预期的问题,比如状态变更、参数重建这类问题,通过一些机制对他进行有效的控制。以防当自动化执行时,因为参数变更,导致基础设施发生一些不可预估的问题。

当基础设施创建完成之后,还需从平台侧对这些资源进行持续的稳定性保障。这里面涉及到三个问题。第一是统一入口,通过Terraform创建的资源,一定要控制管理入口。既然已经使用Terraform管理这部分资源,就不要再使用其他的入口对它进行管理。同一资源通过不同的入口管理,一定会出现不一致,而这个不一致一定会损害Terraform具体的执行状态。第二是我们要对代码所定义资源进行权限控制。同一个代码我们需要对它进行最小粒度、最精细化的权限控制,避免权限过大对其他的基础设施造成更多的影响。第三是通过在线可观测能力对线上的基础设施做一些可观测,提前发现各种潜在问题,能够最小化的控制爆炸半径。

最后,Terraform随着云厂商持续的投入,以及对更多云产品进行更深入的集成,已经成为云上自动化运维的一个重要工具。随着Terraform生态的不断发展,也演变出了如Crossplane、Pulumi、CDKTF等更多的IaC工具,我希望大家能借助这些IaC工具解决云上运维的问题,降低云上运维的复杂度,真真切切的能够帮助大家解决日常的问题。



相关实践学习
快速体验PolarDB开源数据库
本实验环境已内置PostgreSQL数据库以及PolarDB开源数据库:PolarDB PostgreSQL版和PolarDB分布式版,支持一键拉起使用,方便各位开发者学习使用。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
1
1
0
78435
分享
相关文章
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
领先AI企业经验谈:探究AI分布式推理网络架构实践
当前,AI行业正处于快速发展的关键时期。继DeepSeek大放异彩之后,又一款备受瞩目的AI智能体产品Manus横空出世。Manus具备独立思考、规划和执行复杂任务的能力,其多智能体架构能够自主调用工具。在GAIA基准测试中,Manus的性能超越了OpenAI同层次的大模型,展现出卓越的技术实力。
阿里云CDN:全球加速网络的实践创新与价值解析
在数字化浪潮下,用户体验成为企业竞争力的核心。阿里云CDN凭借技术创新与全球化布局,提供高效稳定的加速解决方案。其三层优化体系(智能调度、缓存策略、安全防护)确保低延迟和高命中率,覆盖2800+全球节点,支持电商、教育、游戏等行业,帮助企业节省带宽成本,提升加载速度和安全性。未来,阿里云CDN将继续引领内容分发的行业标准。
71 7
新四化驱动,如何构建智能汽车的“全场景”可进化互联网络?
在智能化、电动化、网联化、共享化的时代浪潮中,汽车正从单纯的 “机械产品” 进化为先进的 “移动智能终端”。在软件定义汽车(SDV)的崭新时代,每一次 OTA 升级的顺利完成、每一秒自动驾驶的精准决策、每一帧车载娱乐交互的流畅呈现,都离不开一张实时响应、全域覆盖、安全可靠的广域网络。
云栖大会 | Terraform从入门到实践:快速构建你的第一张业务网络
云栖大会 | Terraform从入门到实践:快速构建你的第一张业务网络
网络安全视角:从地域到账号的阿里云日志审计实践
网络安全视角:从地域到账号的阿里云日志审计实践
加速阿里云部署:Terraform在甄云科技的深度应用
甄云科技是一家领先的数字化采购平台服务商,通过Terraform实现全球云基础设施的高效管理与快速部署。公司成立于2017年,已服务全球30多个行业的中大型企业,客户遍布20多个国家和地区。利用IaC(基础架构即代码)理念和Terraform工具,甄云科技显著提升了开发与运维效率,减少了人为错误,加快了迭代速度,并支持业务快速扩展,为全球化战略提供了稳固的云基础架构支持。未来,公司将持续优化技术框架,回馈社区,助力更多企业的数字化转型。
基于 ROS 的Terraform托管服务轻松部署ChatGLM-6B
文章介绍了如何利用ROS和Terraform模板轻松自动化部署基于GLM架构、优化中文对话的ChatGLM-6B模型至阿里云,提高了部署效率与便捷性,适用于多种应用场景,且模型部署过程详细,彰显了基础设施即代码(IaC)的优势。
基于 ROS 的Terraform托管服务轻松部署ChatGLM-6B
基于 ROS 的Terraform托管服务轻松部署Qwen-7B-Chat
文章介绍了如何利用ROS和Terraform模板轻松自动化部署阿里云的Qwen-7B-Chat大语言模型服务,提高了部署效率与便捷性,是实现云资源和服务快速上线的最佳实践。
基于 ROS 的Terraform托管服务轻松部署Qwen-7B-Chat
基于 ROS 的 Terraform 托管服务轻松部署文本转语音系统 ChatTTS
基于 IaC 的理念,通过定义一个模板,使用 ROS 提供的 Terraform 托管服务进行自动化部署,可以非常高效快捷地部署任意云资源和应用(比如 ChatTTS 服务)。相比于手动部署或者通过 API、SDK 的部署方式,有着高效、稳定等诸多优势,也是服务上云的最佳实践。
基于 ROS 的 Terraform 托管服务轻松部署文本转语音系统 ChatTTS

热门文章

最新文章

推荐镜像

更多