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工具解决云上运维的问题,降低云上运维的复杂度,真真切切的能够帮助大家解决日常的问题。



相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
存储 监控 安全
单位网络监控软件:Java 技术驱动的高效网络监管体系构建
在数字化办公时代,构建基于Java技术的单位网络监控软件至关重要。该软件能精准监管单位网络活动,保障信息安全,提升工作效率。通过网络流量监测、访问控制及连接状态监控等模块,实现高效网络监管,确保网络稳定、安全、高效运行。
67 11
|
3天前
|
边缘计算 容灾 网络性能优化
算力流动的基石:边缘网络产品技术升级与实践探索
本文介绍了边缘网络产品技术的升级与实践探索,由阿里云专家分享。内容涵盖三大方面:1) 云编一体的混合组网方案,通过边缘节点实现广泛覆盖和高效连接;2) 基于边缘基础设施特点构建一网多态的边缘网络平台,提供多种业务形态的统一技术支持;3) 以软硬一体的边缘网关技术实现多类型业务网络平面统一,确保不同网络间的互联互通。边缘网络已实现全球覆盖、差异化连接及云边互联,支持即开即用和云网一体,满足各行业需求。
|
6天前
|
存储 监控 安全
网络安全视角:从地域到账号的阿里云日志审计实践
日志审计的必要性在于其能够帮助企业和组织落实法律要求,打破信息孤岛和应对安全威胁。选择 SLS 下日志审计应用,一方面是选择国家网络安全专用认证的日志分析产品,另一方面可以快速帮助大型公司统一管理多组地域、多个账号的日志数据。除了在日志服务中存储、查看和分析日志外,还可通过报表分析和告警配置,主动发现潜在的安全威胁,增强云上资产安全。
|
18天前
|
运维 监控 Cloud Native
构建深度可观测、可集成的网络智能运维平台
本文介绍了构建深度可观测、可集成的网络智能运维平台(简称NIS),旨在解决云上网络运维面临的复杂挑战。内容涵盖云网络运维的三大难题、打造云原生AIOps工具集的解决思路、可观测性对业务稳定的重要性,以及产品发布的亮点,包括流量分析NPM、网络架构巡检和自动化运维OpenAPI,助力客户实现自助运维与优化。
|
18天前
|
人工智能 大数据 网络性能优化
构建超大带宽、超高性能及稳定可观测的全球互联网络
本次课程聚焦构建超大带宽、超高性能及稳定可观测的全球互联网络。首先介绍全球互联网络的功能与应用场景,涵盖云企业网、转发路由器等产品。接着探讨AI时代下全球互联网络面临的挑战,如大规模带宽需求、超低时延、极致稳定性和全面可观测性,并分享相应的解决方案,包括升级转发路由器、基于时延的流量调度和增强网络稳定性。最后宣布降价措施,降低数据与算力连接成本,助力企业全球化发展。
|
23天前
|
运维 供应链 安全
阿里云先知安全沙龙(武汉站) - 网络空间安全中的红蓝对抗实践
网络空间安全中的红蓝对抗场景通过模拟真实的攻防演练,帮助国家关键基础设施单位提升安全水平。具体案例包括快递单位、航空公司、一线城市及智能汽车品牌等,在演练中发现潜在攻击路径,有效识别和防范风险,确保系统稳定运行。演练涵盖情报收集、无差别攻击、针对性打击、稳固据点、横向渗透和控制目标等关键步骤,全面提升防护能力。
|
29天前
|
数据采集 机器学习/深度学习 人工智能
基于AI的网络流量分析:构建智能化运维体系
基于AI的网络流量分析:构建智能化运维体系
113 13
|
28天前
|
JSON Dart 前端开发
鸿蒙应用开发从入门到入行 - 篇7:http网络请求
在本篇文章里,您将掌握鸿蒙开发工具DevEco的基本使用、ArkUI里的基础组件,并通过制作一个简单界面掌握使用
73 8
|
25天前
|
存储 监控 安全
网络安全视角:从地域到账号的阿里云日志审计实践
日志审计的必要性在于其能够帮助企业和组织落实法律要求,打破信息孤岛和应对安全威胁。选择 SLS 下日志审计应用,一方面是选择国家网络安全专用认证的日志分析产品,另一方面可以快速帮助大型公司统一管理多组地域、多个账号的日志数据。除了在日志服务中存储、查看和分析日志外,还可通过报表分析和告警配置,主动发现潜在的安全威胁,增强云上资产安全。
|
1月前
|
Web App开发 网络协议 安全
网络编程懒人入门(十六):手把手教你使用网络编程抓包神器Wireshark
Wireshark是一款开源和跨平台的抓包工具。它通过调用操作系统底层的API,直接捕获网卡上的数据包,因此捕获的数据包详细、功能强大。但Wireshark本身稍显复杂,本文将以用抓包实例,手把手带你一步步用好Wireshark,并真正理解抓到的数据包的各项含义。
108 2

热门文章

最新文章

推荐镜像

更多