Terraform从0基础到上手项目

发布时间 2023-06-02 14:37:28作者: 滴滴滴

Terraform从0基础到上手项目 (DevOps自动化运维开发——IaC基础设施即代码)(导读版)

 
图例
?:通用部分,可查看课程信息。
✅:开放部分,所有人均可查看的课程内容知识。
?:上锁部分,需要购买后即可享受完整版文档特权,查看所有知识点。
 
第〇章 讲师介绍?
 
讲师介绍?
未标题-1 拷贝.jpg

 
好课推荐?
未标题-2 拷贝.jpg

AWS云计算入门 基础+实战+认证 点击学习
AWS解决方案架构师认证-助理级认证(SAA-C03) 点击学习
AWS云计算解决方案架构师 云端架构设计-中级课程 点击学习


本课程视频链接:
Terraform从0基础到上手项目 (DevOps自动化运维开发——IaC基础设施即代码) 点击学习
image.png


 
第一章 课程说明?
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883571
 
课程说明?
 
背景说明?
随着基础设施即服务理念在国内市场的接受度不断提高,除了外企或者出海企业外,大量的国企、央企也迅速的使用基础设施即代码工具Terraform进行云上多云资源环境的编排部署。随着单一云产商的技术锁定与其他不可描述的原因,企业越来越趋向于脱离单一云产商的捆绑,进行多云部署。企业中多云环境的设计、部署、运维、管理与运营的全流程的自动化已成为不可逆转的趋势。
image.png
image.png
image.png

企业中有多种云,使用控制台手动部署费时费力容易出错,而学习每一种云厂商自家的闭源资源编排技术对于工程师来说又有着较大的浪费。因此,是否有一种工具和方式能够一次学习多云部署、一次编写多次使用呢?
由HashiCorp公司推出的Terraform就是这样一款IaC工具。该工具一经推出,迅速火遍欧美市场,由于有着巨大优势和思维定式,外企偏向于使用Terraform管理AWS、Azure等云中资源。近几年,随着阿里云逐步拓宽欧洲市场、华为云逐渐打下toG市场,国内外云思想的交流与碰撞引发越来越多的国内企业开始重视IaC思想,开始使用Terraform进行多云编排部署管理。
因此,Terraform的课程应运而生。本门课程,就是为解决云端工程师不会使用、不知如何使用Terraform进行项目管理与编写而生。
 
教学设计?
QQ20230129-163929@2x.png

课程教学设计合理且有温度。课程共计15个大章节、34个子课程及95个知识节点。在课程安排上,除第一章和最后一章为课程的介绍与收尾外,其余章节为干货满满的课程内容。
这十三个章节又分为三个部分:
第一部分为二至六章节。这一部分讲解IaC、Terraform的概念与原理,Terraform的基本操作与基础语法以及项目的快速编写。此部分适用于未接触过Terraform或稍有了解但不是很熟悉的同学们。
第二部分为七至九章节。这一部分讲解Terraform的项目结构、模块化的使用与文件类型。熟悉这部分,有利于我们深入了解Terraform的核心,更有利于我们在团队项目中,进行高效化的项目搭建。
第三部分为十至十四章节。这一部分讲解Terraform的团队合作高级用法,同时通过真实具体的项目,再次搭建企业中经久不衰的云上应用架构。且Kevin老师带领大家在跟着真实项目进行分析挖掘项目要点,不是无脑的copy代码,而是带有思考性的具备多维度的云端运维与解决方案架构技能。最后一节课老师分享在各项目中遇到的坑,以帮助同学们尽可能规避风险。
 
课程收获?
充分理解基础设施即代码
获得使用Terraform的实践经验
可以使用Terraform搭建企业项目
可以参加Terraform Associate认证考试
可以使用Terraform进行多云编排云上基础设施
 
课程目标?
了解IaC掌握Terraform的使用。
会使用Terraform部署企业项目,并达到中级水平。
 
适合人群?
1云计算工程师、运维工程师、云计算解决方案架构师人群。
2希望掌握基础设施即代码工具Terraform,并成为熟练的DevOps工程师的人。
3希望自己掌握云技术能力边界,并拓展自己云计算能力边界的人。
 
学习计划?
1建议每日学习一小时,并认真对照讲义记笔记。
2对于基础知识章节,建议观看的时候跟着kevin老师同时一起动手做一遍。
3对于项目搭建章节,建议第一遍纯观看老师课程,不动手码代码,先了解老师编写项目的思路。第二遍,自己动手,在尽量不看老师课程的情况下,完成项目编写。最后,完全不看教程的情况下,从零到一自己搭建项目。这样能够以最高效的方式吸收消化知识内容。

现在,让我们正式开始叭!
 
第二章 概念介绍(了解)✅
 
什么是Terraform与IaC?✅
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883570
 
什么是Terraform✅

image.png


Terraform 是一个安全、高效地部署、更改、版本化基础设施和应用程序的工具,可以用来管理多层次的资源。从上层的软件配置到底层的网络、系统配置都可以使用 Terraform 统一进行管理。
Terraform是一款可以帮助我们高效地构建,更改和版本控制的自动化运维工具。它的存在就是为了解决传统部署的痛点:
1传统部署太复杂且低效,还有出错的风险;
2传统部署无法自动化地留存部署的架构;
3传统部署无法做到多平台适应。
image.png

 
什么是IaC✅
基础设施即代码(Infrastructure-as-Code,IaC)意味着使用代码来定义和管理基础设施,用户不必在每次开发、测试或部署软件时都配置环境。所有基础设施参数都以称为清单的文件的形式保存。
开发人员对基础设施配置文件进行编码,并将其存储在版本控制中。如果有人编辑了一个文件,拉取请求和代码审查工作流可以检查更改的正确性。因此,与所有代码文件一样,清单易于重用、编辑、复制和共享,它使构建、测试、准备和部署基础设施更快、更一致。
 
IaC的优势✅
借助自动化流程,IaC 协助企业以多种方式管理其 IT 基础设施需求。以下是部署 IaC 的部分优势:
提升架构一致性:IaC 可提高一致性并减少通常会在手动配置过程中发生的错误。其还能够消除手动流程期间可能会发生的配置漂移。IaC 会整理和记录您的配置规格,进而协助您避免出现未记录的临时配置改变。
降低运维成本:IaC 可通过编程方式管理虚拟机,这样就不必手动配置硬件及更新。一位操作员使用同一组代码,即可部署并管理一台机器或 1,000 台机器。这样就意味着,需要的员工减少,不必再购买新硬件,成本会因此大幅降低。
提升操作效率:基础设施编码化可为您提供配置模板,进而简化系统配置、维护和管理。其可以打造出可重复、可扩展的弹性基础设施。这也意味着,DevOps 能够加速软件开发的各个环节,每天能发布的应用也将更多。
加快部署速度:IaC 能将开发人员耗时冗长的配置工作转变为简单的脚本执行,通过脚本执行就能让其基础设施准备就绪。因此,部署应用不再需要等待基础设施,新软件的发布也大大提速。
降低操作风险:IaC 也支持版本控制,因此,配置文件也会和其他任何软件源代码文件,归入源代码控制。如此,风险就会降低。
 
IaC 工具✅
服务器自动化和配置管理工具通常可以用来实现IaC。当然,也有一些专门针对IaC的解决方案。一些常见的方案如下:
Chef
Puppet
Ansible
Saltstack
Terraform
AWS CloudFormation
Aliyun ROS资源编排
Tencent TIC资源编排

 
IaC的两种方式✅
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883569
采用基础设施即代码的方法有两种,一种是声明式的方式,一种是命令式的方式,不同的方式都可以实现IaC。尽管两种方法都能让大多数 IaC 工具正常运行,使用哪一种取决于手上的任务。
 
声明式✅
声明式方法也称为功能性方法,明确定义了系统的理想状态,但未明确指出达到该状态的方法。这种方法可让您明确名义想要的资源,包括必需的属性。IaC 软件会自动配置理想的基础设施,声明式 IaC 工具将会自动应用作出的任何改变。声明式 IaC 可多次执行且结果相同,无需人为干预。
如:AWS CloudFormation、Terraform、Puppet。
 
命令(编程)式✅
相比之下,命令式方法可让您明确定义配置基础设施的方式,以及实现的方法。命令式方法也叫作过程式方法,明确定义了实现特定配置所需的命令。之后需要按照正确的顺序执行这些命令,一次一个步骤。这个方法较脆弱,依靠的是明确的指示,不接受任何更新。需要改变时,命令式 IaC 工具将会要求操作员解读应如何应用这些改变。
如:Chef、Ansible。

 
不同IaC对比✅
image.png


 
DevOps工具✅
image.png

image.png

image.png

image.png
image.png

image.png


 
Terraform的工作原理与逻辑✅
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883568
 
Terraform工作原理✅
image.png

image.png

 
Terraform工作流✅
写入-计划-应用
WRITE:您可以定义资源,这些资源可能跨多个云提供商和服务。例如,您可以创建一个配置,以便在具有安全组和负载平衡器的虚拟私有云(VPC)网络中的虚拟机上部署应用程序。
PLAN:Terraform创建一个执行计划,描述它将基于现有基础设施和配置创建、更新或销毁的基础设施。
APPLY:一经批准,Terraform将按照正确的顺序执行所建议的操作,同时考虑到任何资源依赖性。例如,如果更新专有网络的属性并更改该专有网络中的虚拟机数量,Terraform将在扩展虚拟机之前重新创建专有网络。
 
image.png

参考:https://developer.hashicorp.com/terraform/intro
 
为什么说 IaC 对于 DevOps 至关重要?✅
1IaC 是实施 DevOps 实践和持续集成/持续交付(CI/CD)的一个重要组成部分。IaC 免除了开发人员的大部分置备工作,他们只需要执行一个脚本即可让基础架构准备就绪。
2如此一来,应用部署就不必再等待基础架构,而系统管理员也不用管理耗时的手动流程。
3CI/CD 离不开贯穿应用整个生命周期(从集成和测试阶段,到交付和部署)的持续自动化和持续监控。
4环境要实现自动化,需要保持一致。如果开发团队以一种方式部署应用或配置环境,而运维团队以另一种方式部署和配置,则实现应用部署的自动化并不能发挥作用。
5通过 DevOps 方法来协调开发和运维团队,可以减少错误、手动部署及不一致的情况。
6IaC 会帮助您协调开发和运维工作,因为这两个团队可以使用有关应用部署的同一描述,以支持 DevOps 方法。
7每种环境(包括生产环境)都应使用相同的部署过程。每次使用 IaC 时,它都会生成相同的环境。
8此外,您也无需分别维护具有独特配置(无法自动复制)的不同部署环境,从而确保了生产环境的一致性。
9DevOps 最佳实践也同样适用于 IaC 中的基础架构。在软件开发期间,基础架构可采用与应用相同的 CI/CD 管道,因此可以对基础架构代码应用相同的测试和版本控制。
 
总结✅
Terraform是一个可以安全、高效地建立、变更、以及版本化管理基础设施的工具,可以在主流的服务提供商上提供自定义的解决方案;
以配置文件为驱动,在文件中定义所需要管理的组件(基础设施),以此生成一个可执行的计划,通过执行这个计划来完成所定义组件的创建、增量式的变更和持续的管理。
Terraform不仅可以管理Iaas的资源,也可以管理更上层的服务,如PaaS,SaaS等。
 
第三章 Terraform快速入门及效率提升(熟悉)✅
 
购买虚拟机并安装Terraform✅
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883567
前期准备:
拥有个人阿里云账号且账号余额大于RMB100。(阿里要求大于100元才可购买资源)
创建RAM子账号且子账号开通AK/SK,并且具有完全访问管理权限。(使用云产品需要对应权限)
建议使用中国香港虚拟机或海外虚拟机。(中国内地服务器可能无法连接外网仓库下载资源)
 
购买香港特别行政区或海外机器并配置linux系统✅
image.png

 
在虚拟机中安装Terraform并验证✅
官网链接:https://www.terraform.io/
image.png

CentOS直接使用如下命令
 
image.png

 
配置阿里云AK/SK并赋予云资源权限✅
image.png
image.png

 
安装VScode及Terraform插件提升运维效率✅
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883566
image.png

 
安装VScode编辑器工具✅
image.png

 
安装HashiCorp Terraform插件工具✅
image.png

 
安装Remote-SSH远程插件工具✅
image.png

image.png

 
安装SFTP远程同步插件工具✅
image.png

 
image.png

 
十分钟快速入门Terraform运维编排✅
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883565
使用一个主文件mian.tf生成云上资源
 
快速安装✅
官网链接:https://www.terraform.io/
image.png

CentOS直接使用如下命令
image.png

 
快速编写✅
新建文件夹mkdir terraform_aliyun
进入文件夹cd terraform_aliyun
新建terraform.tf文件vim terraform.tf,并黏贴如下代码
⚠️PAY ATTENTION TO!!!⚠️
请注意,AKSK为访问秘钥,泄露访问秘钥可能会导致资源被恶意盗刷,请保管好秘钥,勿公开至博客,github等公共网站。同时如果是测试使用,请及时禁用并删除。

ak = "xxxxx"
sk = "xxxxxx"
 
快速创建✅
初始化Terraform,terraform init
image.png


查看Terraform的执行计划,terraform plan
image.png


执行计划,terraform apply。查看无误后,键入yes开始执行。
image.png

image.png

资源创建成功。
 
查看资源✅
使用terraform show查看资源
image.png

 
查看结果✅
vpc
image.png

交换机
image.png

服务器
image.png

 
删除资源✅
terraform destroy删除资源
image.png
image.png
image.png

查看资源状况terraform show,回显为 空 即说明删除干净。
image.png

 
说明✅
由于此教程并非一天写成,故截图每次生成的实例id不同,但不影响教学与学习。
资源destroy过程中,由于时间及依赖等的先后顺序等,可能会存在无法一次性删除干净。如果仅是对整个Terraform进行destroy,可多次执行直到资源完全为0。
使用完成后,请删除资源,避免产生不必要的大量费用。
 
 
第四章 Terraform命令(掌握)✅
 
Terraform命令✅
 
常用基础命令✅
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883564
terraform init:初始化一个包含Terraform代码的工作目录。
terraform plan:查看并创建变更计划。
terraform apply:生成并执行计划(重要)。
terraform show:展示(Read)当前所有归Terraform控制的资源的状态信息。
terraform destroy:销毁并回收所有Terraform管理的基础设施资源。
 
拓展基础命令?
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883538
terraform fmt:?
terraform apply -auto-approve :?
terraform destroy -auto-approve:?
terraform import:?
terraform validate:?
terraform import:?
terraform state list:?
terraform state show 资源名称:?
terraform taint:?
terraform untaint:?
terraform refresh:?
terraform graph:?
terraform graph | dot -Tsvg > graph.svg :?
image.png

 
第五章 Terraform语法(重点)✅
 
Terraform语法与HCL语言✅
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883563
 
什么是HCL语言✅
HCL(HashiCorp Configuration Language)是一种专门为构建结构化配置格式而设计的语法和API。 他由HashiCorp公司设计。
HCL是一个用于创建结构化配置语言的工具包,主要针对DevOps工具、服务器等。
HCL既有一种原生语法,旨在让人类愉快地阅读和编写,也有一种基于json的变体,更容易让机器生成和解析。
HCL包含一个表达式语法,允许基本的内联计算,并且在调用应用程序的支持下,可以使用变量和函数来进行更动态的配置语言。
 
Terraform语言✅
Terraform语言的主要目的是声明资源,这些资源表示基础设施对象。所有其他语言特性的存在只是为了使资源的定义更加灵活和方便。
Terraform配置是一个用Terraform语言编写的完整文档,它告诉Terraform如何管理给定的基础设施集合。
一个配置可以由多个文件和目录组成。
参考:
https://github.com/hashicorp/hcl/blob/main/hclsyntax/spec.md
 
示例✅
形如如下的构成法:
block(块)是其他内容的容器,通常表示某种对象的配置,如resource。block具有块类型,可以有零个或多个标签,并且具有包含任意数量的参数和嵌套块的主体。Terraform的大部分功能都由配置文件中的顶级块控制。
Terraform语言是声明性的,描述的是预期目标,而不是实现目标的步骤。块的顺序和它们被组织成的文件通常不重要;Terraform在确定操作顺序时只考虑资源之间的隐式和显式关系。
image.png
image.png

image.png

image.png

 
provider { } ✅
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883562
 
什么是provider插件?✅
Terraform 是一个多云基础设施编排工具,是通过Provider来支持云基础架构。而Provider的本质是上游云厂商的API的逻辑抽象,他们负责理解API交互并暴露资源。
我们可以将Provider理解为各个云厂商提供的与云资源交互的后端驱动,不同的基础设施提供商都需要提供一个Provider来实现对自家基础设施的统一管理。
Terraform实现多云编排的方法就是Provider插件机制。
 
provider的四种类型✅
1Official:官方
2Partner:合作伙伴
3Community:社区
4Archived:归档
类型
 
说明
 
维护者
 
Official
 
官方供应商由HashiCorp拥有和维护
 
hashicorp
 
Partner
 
合作伙伴提供商由第三方公司根据自己的API编写、维护、验证和发布。
 
第三方组织,例如mongodb/mongodbatlas公司
 
Community
 
社区提供者由个人维护者、维护者组或Terraform社区的其他成员发布到Terraform注册中心。
 
维护者的个人或组织帐户,如DeviaVir/gsuite
 
Archived
 
存档的提供者是不再由HashiCorp或社区维护的官方或合作伙伴提供者。如果API被弃用或兴趣较低,则可能会发生这种情况。
 
hashicorp 或第三方
 
你可以在官网中查看各云厂商提供的插件https://registry.terraform.io/browse/providers
image.png

例如阿里云的provider配置:
注:配置provider的访问方式,不同云厂商的配置方式有所不同,请参考各云厂商的provider文档。
温馨提示:ak/sk密钥请勿公开或泄露,以免对您的账号造成资源或经济损失。

多个provider的配置方式:
 
provider文件的两种表示方式✅
一种是合并设置,将定义provider和配置provider写在同一个文件provider.tf文件中。
image.png


另一种是分开设置,分别建立provider.tf和version.tf,将定义provider写在version.tf中,将配置provider写在provider.tf中。
image.png


image.png

image.png

 
总结✅
Terraform 是一个多云基础设施编排工具,是通过Provider来支持云基础架构。其本质是上游云厂商的API调用。
provider有四种类型,分别是Official、Partner、Community、Archived。
不同云厂商的配置方式有所不同,请参考各云厂商的provider文档。
provider的定义与配置可以写在同一个.tf文件中,也可以分开填写。
同一个Terraform工程支持配置多个provider,只需要在required_providers中规范配置即可。
 
resource { }✅
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883561
 
什么是resource?✅
资源是Terraform中最重要的部分,资源由资源块定义,而资源由provider提供。在Terraform中,一个具体的资源或者云产品/组件称为resource,比如一个ECS、SLB、RDS、VPC等。一个资源可以定义一个或多个基础设施资源对象。每个特定的resource包含了若干可用于描述对应资源或服务的属性字段,通过这些字段来定义一个完整的资源或者服务。
 
使用说明✅
各字段解释及使用说明:
image.png

其中第一个,resource是资源的代码块的固定值,描述资源是什么。如,在Terraform模块中是有六大block:
provider:配置块
resource:资源
data:数据源
variable:变量
output:输出
locals:本地变量

第二个,alicloud_vswitch是每个厂商定义好的资源名称,如:
alicloud_vpc:vpc
alicloud_vswitch:vswitch(交换机)
alicloud_security_group:安全组
alicloud_security_group_rule:安全组规则
alicloud_instance:ECS实例

在HashiCorp官方文档中找对应每个云厂商的的资源名称:https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/ecs_disk
image.png


第三个,vsw_terraform1是文件中自定义的资源的唯一名称,不可重复。如果有多个,即用不同的值,如:
 
实战演示✅
请参见视频教程。
 
总结✅
资源是Terraform中最重要的部分,resource是Terraform中使用最多的块,所有资源由resource创建。
在Terraform中,一个具体的资源或者云产品/组件称为resource。
一个resource可以定义一个或多个基础设施资源对象。
每个resource有唯一确定的名称。
 
locals { }?
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883557
 
使用说明?
请参见视频教程。
 
总结?
局部值?
局部值可以避免多次修改同一值,提高代码的可读性。但如果?
局部值由局部块locals(复数有s)创建?
 
variable { }?
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883559
 
使用说明?
输入变量允许我们自定义Terraform模块的各个方面,而无需更改模块自己的源代码。此功能允许我们跨不同的Terraform配置共享模块,使我们的模块可组合和可重用。
当我们在配置的根模块中声明变量时,我们可以使用CLI选项和环境变量设置它们的值。当我们在子模块中声明它们时,调用的模块应该在模块中传递值。

形如如下方式的代码,称之为veriable块
image.png


variables.tf的字段:

variable block的几种常用书写方式?
Terraform加载变量值的顺序:
1?
2?
3?
4?
5?
 
实战演示?
请参见视频教程。
 
总结?
variables.tf通常与terraform.tfvars文件连用,程序会读取同目录下terraform.tfvars文件中的变量,当terraform.tfvars文件中有对应变量,则?
?
 

 
output { }?
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883558
 
使用说明?
output块负责参数的输出Terraform管理的资源实例的每个导出属性的值可以在配置的其他地方使用。输出值是向模块用户暴露部分信息的一种方式。
实战演示
请参见视频教程。
 
总结?
在运行terraform apply后,?
输出值只有在执行terraform apply后才会被计算?
子模块可以使用输出将其资源属性?
子模块的output.tf只会应用到本层级中,不会传递到根目录。若需要传递到根目录,需要?
 
data { }?
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883560
 
什么是Data Source??
Terraform Data Sources(数据源)允许我们从API或其他Terraform状态后端动态获取数据。数据源包括来自云提供商的数据或来自其他配置的Terraform输出。
与resource不同,resource的括号体中给定的是参数的定义条件,?
与resource类似,data都可以输入并对外输出。但resource会触发?
 
使用说明?
详见视频课程
 
总结?
数据源允许查询或计算一些数据以供其他地方使用。?
我们可以在同一模块内的代码中通过数据源名称来引用数据源,但?
如果使用data的时候,data还未获取到该资源,或者获取到的是一个错误或不存在的资源,则?
 
第六章 Terraform配置供应者(了解)?
 
使用文件硬编码(明码)访问
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883556
 
实战演示?
?
 
用临时环境变量AK/SK访问?
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883555
 
实战演示?
?
 
使用本地环境变量AK/SK访问?
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883554
 
实战演示?
?
 
总结?
aws的配置方式
?
?
 
第七章 Terraform项目层级结构(重点)?
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883553
 
五种层级说明?
如同编程语言代码一样,Terraform也有推荐的层级结构。当项目发展到一定规模,各资源各模块引用更加复杂,模块间重用多起来,就会出现各种问题,显得灵活性不够了,也容易出差错。因此,我们要按照一定的规范将我们的Terraform层级定义好,这样有利于我们的简化运维难度,提升运维效率。
合理使用层级结构可以提升运维效率,使得文件更加可读、可看、可用及可维护。我们将代码结构进行分层,有如下好处:
1有组织的安排代码编写的文件,使得逻辑更加清晰。
2分层结构能使得简化运维难度,提升运维效率。
3分层使得工程更加优雅。
 
单层级说明?
?
 
最小化模块层级?
一个最小化模块推荐的结构是这样的:
?
 
标准三层级说明?
?
 
三层级结构树型展示?
?
 
常用层级文件说明
?
 
第八章 Terraform模块(重点)?
 
模块的定义?
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883552
 
什么是module?
module(模块)是一个在Terraform项目中包含一组代码的逻辑分组的文件夹。模块可以调用其他模块,并通过将一个模块的输出值(output.tf)传递到另一个模块的输入值(variable.tf)来实现模块资源数据的相互调用以提升代码的复用性。
Terraform模块是编写高质量Terraform代码,提升代码复用性的重要手段。可以说,一个成熟的生产环境应该是由数个可信成熟的模块组装而成的。
 
为什么需要模块?
没有模块的话会有如下的问题:
复杂凌乱的配置信息
大量的文件繁杂的维护
没有说明与概述
 
如何定义一个模块?
?
 
如何引用一个模块?
?
 
Terraform项目模块化改造(重要)?
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883551
 
模块化改造?
针对课程3.3节快速快速入门的5个资源(VPC、Vswitch、ECS、NSG、NSG_rule)进行模块化改造,改造后的模块层级如图所示,包含ECS模块、VPC模块、NSG模块。其中,VPC模块包含VPC及Vswitch,NSG模块包含NSG、NSG_rule。ak、sk、region、vpc网段及vswitch网段为主文件入口输入参数,并输出ECS的实例id、ECS公网ip地址及vpc的实例id。
image.png

?
 
模块间参数相互调用?
?
 
使用公有仓库模块?
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883550
 
总结
Terraform模块是编写高质量Terraform代码,?
资源和其他任何组合都可以分解成模块,但过度使用模块会使我们?
在设计搭建Terraform项目时,可以先使用单层级后进行模块化改造,也可以?
层级/模块需要清晰明了,易读易理解易上手。大型项目中层级不宜?
?
 
第九章 Terraform资源依赖(了解)?
 
资源间的相互依赖?
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883549
 
为什么需要依赖??
配置中的大多数资源没有任何特定关系,Terraform 可以并行更改多个不相关的资源。但是,某些资源必须在其他特定资源之后处理。有时这是因为资源的工作方式,有时资源的配置需要另一个资源生成的信息。
 
隐式依赖与显示依赖?
错误的顺序导致程序错误:
?
 
总结?
对于depends_on建议始终包含一条注释,解释为什么depends_on需要使用,以便?
depends_on元参数来处理Terraform无法自动推断的隐藏资源或模块依赖关系,或者?
当资源或模块依赖于另一个资源的行为但不在其参数中访问该资源的任何数据时,我们需要?
 
第十章 Terraform文件类型(熟悉)?
 
Terraform各后缀文件说明?
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883548
 
*.tf?
 
terraform.tfvars?
 
.terraform?
 
.terraform.lock.hcl?
 
terraform.tfstate?
 
terraform.tfstate.backup?
 
.terraform.tfstate.lock.info?
 
第十一章 Terraform三种预置器(了解)?
 
什么是预置器provisioner??
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883547
 
provisioner的三种功能?
?
 
远程执行命令remote-exec?
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883546
 
实战演示?
 
复制本地文件到远程命令file?
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883545
 
命令说明?
 
实战演示?
请参见视频教程
 
本地执行命令local-exec?
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883544
 
命令说明?
 
实战演示?
 
三种方式总结?
 
总结?
file provisioners、remote-exec provisioners需要connection与?
local-exec(本地执行)是被推荐的,他的优势是?
remote-exec(远程执行)是不被推荐的。官方不建议使用?
当我们资源创建成功,但是provisioner没有执行成功,此时?
Provisioner只能作为最后手段使用。最佳实践是,使用?

 
第十二章 Terraform团队合作云端仓库(熟悉)?
 
Backend概念简介及原理?
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883543
 
State简介?
?
 
Backend简介?
?
 
Backend实战?
 
总结?
Terraform提供两种state,默认状态为?
Terraform远程backend仓库可以保存?
我们也可以配置backend,实现?
团队后端可以远程存储其状态,并使用?
创建新资源是?

 
第十三章 云上三层网络架构实战(重点)?
 
使用Terraform工具全自动配置三层网络基础设施?
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883542
场景模拟实战题:
因公司业务发展需要,现开辟一个新的业务。你的部门需要在公有云中搭建一套的web网站的基础设施,作为公司的官网展示,并且提供查询功能。作为解决方案架构工程师与云端运维工程师,领导要求你充分利用云端的DevOps自动化运维的思想,使用IaC工具进行架构设计与基础资源创建。
架构要求如下:
?
?
?
Terraform要求如下:
?
?
?
ECS机器设置要求如下:
?
?
?
数据库设置如下:
?
?
?
?
?
Terraform项目中的资源项目信息,可按照以下表格中参考。其他信息,请根据所学知识自行酌情配置。
 
Terraform配置?
ECS镜像
 
centos_7_9_x64_20G_alibase_20220824.vhd
 
ECS实例类型
 
ecs.c7.large
 
RDS实例类型
 
rds.mysql.s1.small
 
SLB实例类型
 
slb.s2.small
 
 
ECS初始化及挂载操作?
?
 
初始化脚本?

 
公有仓库模块?
?

 
三层网络架构图?

 
第十四章 Terraform的使用注意事项(了解)?
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883541
 
容易踩的坑?
公有仓库并不是万能的,有时需要?
公有仓库中的terraform的模块并不一定是完美的,有时会出现?
注意机器的资源如果是有特殊标注的,需要特别注意。如?
 
第十五章 结课说明?
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883540
 
结课说明?
本课程,从安装Terraform到配置效率工具;从Terraform基础语法到真实企业项目搭建。通过十三章节的理论讲解分析讲解+细致入微的动手实操,保姆级的视频讲解带同学们学习了目前市面上最受欢迎的基础设施即代码工具Terraform的应用。希望通过本课程的学习,同学们能掌握Terraform的项目应用。
接下来,你可以准备Terraform Associate助理认证考试,夺取IaC能力Terraform的伟大胜利。
祝同学们万事胜意,工作顺利!Kevin老师与你在下一个课程见!

(全文完)

 
大纲