Terraform从0基础到上手项目
Terraform从0基础到上手项目 (DevOps自动化运维开发——IaC基础设施即代码)(导读版)
🔆:通用部分,可查看课程信息。
✅:开放部分,所有人均可查看的课程内容知识。
🔒:上锁部分,需要购买后即可享受完整版文档特权,查看所有知识点。
![未标题-1 拷贝.jpg](https://cdn.nlark.com/yuque/0/2023/jpeg/21910142/1674133636650-e4892b88-2b2b-4507-be57-85df679ec570.jpeg?x-oss-process=image%2Fresize%2Cw_937%2Climit_0%2Finterlace%2C1)
![未标题-2 拷贝.jpg](https://cdn.nlark.com/yuque/0/2023/jpeg/21910142/1674134717924-21e4d1d4-504f-4a41-8339-09c3846f4fec.jpeg?x-oss-process=image%2Fresize%2Cw_937%2Climit_0%2Finterlace%2C1)
AWS云计算入门 基础+实战+认证 点击学习
AWS解决方案架构师认证-助理级认证(SAA-C03) 点击学习
AWS云计算解决方案架构师 云端架构设计-中级课程 点击学习
本课程视频链接:
Terraform从0基础到上手项目 (DevOps自动化运维开发——IaC基础设施即代码) 点击学习
![image.png](https://cdn.nlark.com/yuque/0/2023/png/21910142/1674986054124-49f02a9a-e282-42b0-9b37-257951f14162.png?x-oss-process=image%2Fresize%2Cw_937%2Climit_0)
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883571
随着基础设施即服务理念在国内市场的接受度不断提高,除了外企或者出海企业外,大量的国企、央企也迅速的使用基础设施即代码工具Terraform进行云上多云资源环境的编排部署。随着单一云产商的技术锁定与其他不可描述的原因,企业越来越趋向于脱离单一云产商的捆绑,进行多云部署。企业中多云环境的设计、部署、运维、管理与运营的全流程的自动化已成为不可逆转的趋势。
![image.png](https://cdn.nlark.com/yuque/0/2023/png/21910142/1674133084381-d6151c8b-6bc3-42c2-8814-e8002f64cf18.png)
![image.png](https://cdn.nlark.com/yuque/0/2023/png/21910142/1674133066845-b990cecf-85a0-45d6-b06e-e91c85bcf7d2.png)
![image.png](https://cdn.nlark.com/yuque/0/2023/png/21910142/1674133073449-cfe92df1-cfcd-44dd-a9c1-fedf4205d50b.png)
企业中有多种云,使用控制台手动部署费时费力容易出错,而学习每一种云厂商自家的闭源资源编排技术对于工程师来说又有着较大的浪费。因此,是否有一种工具和方式能够一次学习多云部署、一次编写多次使用呢?
由HashiCorp公司推出的Terraform就是这样一款IaC工具。该工具一经推出,迅速火遍欧美市场,由于有着巨大优势和思维定式,外企偏向于使用Terraform管理AWS、Azure等云中资源。近几年,随着阿里云逐步拓宽欧洲市场、华为云逐渐打下toG市场,国内外云思想的交流与碰撞引发越来越多的国内企业开始重视IaC思想,开始使用Terraform进行多云编排部署管理。
因此,Terraform的课程应运而生。本门课程,就是为解决云端工程师不会使用、不知如何使用Terraform进行项目管理与编写而生。
![QQ20230129-163929@2x.png](https://cdn.nlark.com/yuque/0/2023/png/21910142/1674986185272-3da4c41f-642f-41f1-b8f9-8670a04c6d43.png?x-oss-process=image%2Fresize%2Cw_937%2Climit_0)
课程教学设计合理且有温度。课程共计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对于项目搭建章节,建议第一遍纯观看老师课程,不动手码代码,先了解老师编写项目的思路。第二遍,自己动手,在尽量不看老师课程的情况下,完成项目编写。最后,完全不看教程的情况下,从零到一自己搭建项目。这样能够以最高效的方式吸收消化知识内容。
现在,让我们正式开始叭!
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883570
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1668736735450-0e362937-6b47-407d-85cc-c4f2c1e86ae1.png)
Terraform 是一个安全、高效地部署、更改、版本化基础设施和应用程序的工具,可以用来管理多层次的资源。从上层的软件配置到底层的网络、系统配置都可以使用 Terraform 统一进行管理。
Terraform是一款可以帮助我们高效地构建,更改和版本控制的自动化运维工具。它的存在就是为了解决传统部署的痛点:
1传统部署太复杂且低效,还有出错的风险;
2传统部署无法自动化地留存部署的架构;
3传统部署无法做到多平台适应。
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1668736780167-f372270d-9c1d-4b75-a619-7af3cd1a5b8f.png)
基础设施即代码(Infrastructure-as-Code,IaC)意味着使用代码来定义和管理基础设施,用户不必在每次开发、测试或部署软件时都配置环境。所有基础设施参数都以称为清单的文件的形式保存。
开发人员对基础设施配置文件进行编码,并将其存储在版本控制中。如果有人编辑了一个文件,拉取请求和代码审查工作流可以检查更改的正确性。因此,与所有代码文件一样,清单易于重用、编辑、复制和共享,它使构建、测试、准备和部署基础设施更快、更一致。
借助自动化流程,IaC 协助企业以多种方式管理其 IT 基础设施需求。以下是部署 IaC 的部分优势:
●提升架构一致性:IaC 可提高一致性并减少通常会在手动配置过程中发生的错误。其还能够消除手动流程期间可能会发生的配置漂移。IaC 会整理和记录您的配置规格,进而协助您避免出现未记录的临时配置改变。
●降低运维成本:IaC 可通过编程方式管理虚拟机,这样就不必手动配置硬件及更新。一位操作员使用同一组代码,即可部署并管理一台机器或 1,000 台机器。这样就意味着,需要的员工减少,不必再购买新硬件,成本会因此大幅降低。
●提升操作效率:基础设施编码化可为您提供配置模板,进而简化系统配置、维护和管理。其可以打造出可重复、可扩展的弹性基础设施。这也意味着,DevOps 能够加速软件开发的各个环节,每天能发布的应用也将更多。
●加快部署速度:IaC 能将开发人员耗时冗长的配置工作转变为简单的脚本执行,通过脚本执行就能让其基础设施准备就绪。因此,部署应用不再需要等待基础设施,新软件的发布也大大提速。
●降低操作风险:IaC 也支持版本控制,因此,配置文件也会和其他任何软件源代码文件,归入源代码控制。如此,风险就会降低。
服务器自动化和配置管理工具通常可以用来实现IaC。当然,也有一些专门针对IaC的解决方案。一些常见的方案如下:
●Chef
●Puppet
●Ansible
●Saltstack
●Terraform
●AWS CloudFormation
●Aliyun ROS资源编排
●Tencent TIC资源编排
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883569
采用基础设施即代码的方法有两种,一种是声明式的方式,一种是命令式的方式,不同的方式都可以实现IaC。尽管两种方法都能让大多数 IaC 工具正常运行,使用哪一种取决于手上的任务。
声明式方法也称为功能性方法,明确定义了系统的理想状态,但未明确指出达到该状态的方法。这种方法可让您明确名义想要的资源,包括必需的属性。IaC 软件会自动配置理想的基础设施,声明式 IaC 工具将会自动应用作出的任何改变。声明式 IaC 可多次执行且结果相同,无需人为干预。
如:AWS CloudFormation、Terraform、Puppet。
相比之下,命令式方法可让您明确定义配置基础设施的方式,以及实现的方法。命令式方法也叫作过程式方法,明确定义了实现特定配置所需的命令。之后需要按照正确的顺序执行这些命令,一次一个步骤。这个方法较脆弱,依靠的是明确的指示,不接受任何更新。需要改变时,命令式 IaC 工具将会要求操作员解读应如何应用这些改变。
如:Chef、Ansible。
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1669277782166-124025ad-c26d-4147-b7e9-8d21dffd3fbd.png?x-oss-process=image%2Fresize%2Cw_937%2Climit_0)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1668679016488-c1fba14c-23ac-40f1-a16a-610678109b99.png)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1669629369088-274f65fe-8ee3-4a76-a1a7-7a9b1c6575b9.png)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1669277782166-124025ad-c26d-4147-b7e9-8d21dffd3fbd.png?x-oss-process=image%2Fresize%2Cw_937%2Climit_0)
![image.png](https://cdn.nlark.com/yuque/0/2023/png/21910142/1674653196813-424abf52-501b-49cc-90e7-e9efaafa423f.png?x-oss-process=image%2Fresize%2Cw_927%2Climit_0)
![image.png](https://cdn.nlark.com/yuque/0/2023/png/21910142/1674653211292-5af692de-a16c-41bf-a2cb-4bce7ea0941e.png?x-oss-process=image%2Fresize%2Cw_930%2Climit_0)
![image.png](https://cdn.nlark.com/yuque/0/2023/png/21910142/1674653218070-fe9cdd74-7d0d-433d-898b-8d65430fd36e.png)
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883568
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1668736566714-acfc7546-f0bd-4792-a26d-e09f2f7f170e.png?x-oss-process=image%2Fresize%2Cw_937%2Climit_0)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1668738168302-58b3f706-d5fc-49a3-b41e-d8eb17d1064b.png?x-oss-process=image%2Fresize%2Cw_937%2Climit_0)
写入-计划-应用
●WRITE:您可以定义资源,这些资源可能跨多个云提供商和服务。例如,您可以创建一个配置,以便在具有安全组和负载平衡器的虚拟私有云(VPC)网络中的虚拟机上部署应用程序。
●PLAN:Terraform创建一个执行计划,描述它将基于现有基础设施和配置创建、更新或销毁的基础设施。
●APPLY:一经批准,Terraform将按照正确的顺序执行所建议的操作,同时考虑到任何资源依赖性。例如,如果更新专有网络的属性并更改该专有网络中的虚拟机数量,Terraform将在扩展虚拟机之前重新创建专有网络。
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1668736578062-723894c8-8f17-461e-b084-024b2064f81d.png?x-oss-process=image%2Fresize%2Cw_937%2Climit_0)
参考:https://developer.hashicorp.com/terraform/intro
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等。
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883567
前期准备:
●拥有个人阿里云账号且账号余额大于RMB100。(阿里要求大于100元才可购买资源)
●创建RAM子账号且子账号开通AK/SK,并且具有完全访问管理权限。(使用云产品需要对应权限)
●建议使用中国香港虚拟机或海外虚拟机。(中国内地服务器可能无法连接外网仓库下载资源)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1671246253039-4fbc2d1f-3dbf-4a11-b036-153ecf07a64b.png?x-oss-process=image%2Fresize%2Cw_957%2Climit_0)
官网链接:https://www.terraform.io/
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1668075444753-23181464-0815-47aa-b727-2f428c5f552c.png)
CentOS直接使用如下命令
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1671246880925-ade1b30e-6a17-4b9d-84a9-5a024d83dd8d.png)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1671246707927-ea24b877-23e0-45e6-8a09-ff8485964775.png?x-oss-process=image%2Fresize%2Cw_957%2Climit_0)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1671246754144-884b2745-80ef-4eb5-9933-251de40c1bc6.png?x-oss-process=image%2Fresize%2Cw_958%2Climit_0)
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883566
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1669630363768-82c1518c-2ca5-4e00-81cb-7b901006f305.png)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1669630223018-55973454-5c25-4e40-a31f-38898b6d0ba1.png)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1669630359882-cd3f6791-9564-4eeb-8ad5-aa44d086dc55.png)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1669630343036-c37e581e-188d-42b9-b137-467b64625a13.png)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1669630408395-8d165cd0-7a6c-47ea-bd2d-8f905af4c44e.png)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1669630330576-34c6a421-4eae-4cd6-8b7e-aac130429b16.png)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1669629988085-dfeb32ef-dddf-4d76-9805-4fec72a81b3e.png)
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883565
使用一个主文件mian.tf生成云上资源
官网链接:https://www.terraform.io/
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1671271112140-15757a5a-5e84-4f72-9286-3016d8c9bf61.png?x-oss-process=image%2Fresize%2Cw_937%2Climit_0)
CentOS直接使用如下命令
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1668075979931-1252b099-dc5f-488e-acff-c1d2b2b5f5df.png?x-oss-process=image%2Fresize%2Cw_937%2Climit_0)
新建文件夹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](https://cdn.nlark.com/yuque/0/2022/png/21910142/1668077847726-20b030a9-6234-4ebb-8760-bd4e1e034836.png)
查看Terraform的执行计划,terraform plan
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1668078050286-92dcf368-7145-4aa7-8986-880c02efd873.png)
执行计划,terraform apply。查看无误后,键入yes开始执行。
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1668078117145-5abd3101-5da6-4650-acc6-5c3c7ce0b33c.png)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1668078167411-6b6d29d4-bff4-4ed0-b420-b2604a901134.png)
资源创建成功。
使用terraform show查看资源
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1668134105360-9f0959dd-d15f-43b1-81f3-26e486ed8b9f.png)
vpc
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1668078637841-b921c587-87aa-446d-b069-7a6a469fec1c.png?x-oss-process=image%2Fresize%2Cw_937%2Climit_0)
交换机
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1668078668601-32e947ff-5a25-4deb-bacf-d6b47788e09d.png?x-oss-process=image%2Fresize%2Cw_937%2Climit_0)
服务器
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1668078710774-ecf20162-f935-48b4-b0a8-6702db0ab38a.png?x-oss-process=image%2Fresize%2Cw_937%2Climit_0)
terraform destroy删除资源
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1668133591479-cca45359-9328-4369-9d6e-473526b10428.png?x-oss-process=image%2Fresize%2Cw_859%2Climit_0)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1668133652802-98d5dcc3-b6fc-48d8-8939-28cadbb49732.png)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1668133672512-37a03319-c556-487a-ad07-f10713f342ca.png)
查看资源状况terraform show,回显为 空 即说明删除干净。
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1668133923437-94d399e4-f3a9-4f04-9691-6f402f70d832.png)
●由于此教程并非一天写成,故截图每次生成的实例id不同,但不影响教学与学习。
●资源destroy过程中,由于时间及依赖等的先后顺序等,可能会存在无法一次性删除干净。如果仅是对整个Terraform进行destroy,可多次执行直到资源完全为0。
●使用完成后,请删除资源,避免产生不必要的大量费用。
本小节视频学习链接: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](https://cdn.nlark.com/yuque/0/2022/png/21910142/1668943148114-5fcaf77e-ec28-4999-b6e8-9a3fb7967f88.png?x-oss-process=image%2Fresize%2Cw_927%2Climit_0)
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883563
HCL(HashiCorp Configuration Language)是一种专门为构建结构化配置格式而设计的语法和API。 他由HashiCorp公司设计。
●HCL是一个用于创建结构化配置语言的工具包,主要针对DevOps工具、服务器等。
●HCL既有一种原生语法,旨在让人类愉快地阅读和编写,也有一种基于json的变体,更容易让机器生成和解析。
●HCL包含一个表达式语法,允许基本的内联计算,并且在调用应用程序的支持下,可以使用变量和函数来进行更动态的配置语言。
Terraform语言的主要目的是声明资源,这些资源表示基础设施对象。所有其他语言特性的存在只是为了使资源的定义更加灵活和方便。
Terraform配置是一个用Terraform语言编写的完整文档,它告诉Terraform如何管理给定的基础设施集合。
一个配置可以由多个文件和目录组成。
参考:
https://github.com/hashicorp/hcl/blob/main/hclsyntax/spec.md
形如如下的构成法:
block(块)是其他内容的容器,通常表示某种对象的配置,如resource。block具有块类型,可以有零个或多个标签,并且具有包含任意数量的参数和嵌套块的主体。Terraform的大部分功能都由配置文件中的顶级块控制。
Terraform语言是声明性的,描述的是预期目标,而不是实现目标的步骤。块的顺序和它们被组织成的文件通常不重要;Terraform在确定操作顺序时只考虑资源之间的隐式和显式关系。
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1669694355384-e3ba034b-e56e-47d5-ba87-49cfc6260d1f.png)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1668647255128-bf79ffa7-520c-4289-838e-00bf6d7eff40.png)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1668647312374-746a4c3a-02d6-4e5a-9a88-576d117b0a38.png)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1668150433844-c8685693-3256-4cc1-b344-8cc924206223.png)
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883562
Terraform 是一个多云基础设施编排工具,是通过Provider来支持云基础架构。而Provider的本质是上游云厂商的API的逻辑抽象,他们负责理解API交互并暴露资源。
我们可以将Provider理解为各个云厂商提供的与云资源交互的后端驱动,不同的基础设施提供商都需要提供一个Provider来实现对自家基础设施的统一管理。
Terraform实现多云编排的方法就是Provider插件机制。
1Official:官方
2Partner:合作伙伴
3Community:社区
4Archived:归档
类型
|
说明
|
维护者
|
Official
|
官方供应商由HashiCorp拥有和维护
|
hashicorp
|
Partner
|
合作伙伴提供商由第三方公司根据自己的API编写、维护、验证和发布。
|
第三方组织,例如mongodb/mongodbatlas公司
|
Community
|
社区提供者由个人维护者、维护者组或Terraform社区的其他成员发布到Terraform注册中心。
|
维护者的个人或组织帐户,如DeviaVir/gsuite
|
Archived
|
存档的提供者是不再由HashiCorp或社区维护的官方或合作伙伴提供者。如果API被弃用或兴趣较低,则可能会发生这种情况。
|
hashicorp 或第三方
|
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1668593568289-8917396e-93e6-4553-ac89-5dfbea7ec471.png?x-oss-process=image%2Fresize%2Cw_937%2Climit_0)
例如阿里云的provider配置:
注:配置provider的访问方式,不同云厂商的配置方式有所不同,请参考各云厂商的provider文档。
温馨提示:ak/sk密钥请勿公开或泄露,以免对您的账号造成资源或经济损失。
多个provider的配置方式:
一种是合并设置,将定义provider和配置provider写在同一个文件provider.tf文件中。
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1668595465022-7e90247c-2a6c-4dc0-a16f-43e0cb88cfcf.png)
另一种是分开设置,分别建立provider.tf和version.tf,将定义provider写在version.tf中,将配置provider写在provider.tf中。
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1668595335946-e42d7b70-c37d-4ee0-a9c2-222a1d87d674.png)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1668595212177-1adf746e-1857-4241-82c1-76e9774c482b.png)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1668595238614-5e1d8acb-64ef-4976-8511-77896c067303.png)
●Terraform 是一个多云基础设施编排工具,是通过Provider来支持云基础架构。其本质是上游云厂商的API调用。
●provider有四种类型,分别是Official、Partner、Community、Archived。
●不同云厂商的配置方式有所不同,请参考各云厂商的provider文档。
●provider的定义与配置可以写在同一个.tf文件中,也可以分开填写。
●同一个Terraform工程支持配置多个provider,只需要在required_providers中规范配置即可。
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883561
资源是Terraform中最重要的部分,资源由资源块定义,而资源由provider提供。在Terraform中,一个具体的资源或者云产品/组件称为resource,比如一个ECS、SLB、RDS、VPC等。一个资源可以定义一个或多个基础设施资源对象。每个特定的resource包含了若干可用于描述对应资源或服务的属性字段,通过这些字段来定义一个完整的资源或者服务。
各字段解释及使用说明:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1668150433844-c8685693-3256-4cc1-b344-8cc924206223.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](https://cdn.nlark.com/yuque/0/2022/png/21910142/1668149320948-bda02946-1fa9-4e49-ae0a-8224590698ba.png?x-oss-process=image%2Fresize%2Cw_937%2Climit_0)
第三个,vsw_terraform1是文件中自定义的资源的唯一名称,不可重复。如果有多个,即用不同的值,如:
请参见视频教程。
●资源是Terraform中最重要的部分,resource是Terraform中使用最多的块,所有资源由resource创建。
●在Terraform中,一个具体的资源或者云产品/组件称为resource。
●一个resource可以定义一个或多个基础设施资源对象。
●每个resource有唯一确定的名称。
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883557
请参见视频教程。
●局部值🔒
●局部值可以避免多次修改同一值,提高代码的可读性。但如果🔒
●局部值由局部块locals(复数有s)创建🔒
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883559
输入变量允许我们自定义Terraform模块的各个方面,而无需更改模块自己的源代码。此功能允许我们跨不同的Terraform配置共享模块,使我们的模块可组合和可重用。
当我们在配置的根模块中声明变量时,我们可以使用CLI选项和环境变量设置它们的值。当我们在子模块中声明它们时,调用的模块应该在模块中传递值。
形如如下方式的代码,称之为veriable块
![image.png](https://cdn.nlark.com/yuque/0/2022/png/21910142/1668666941981-57ac991a-b5bd-4d11-b919-4042cd313c14.png?x-oss-process=image%2Fresize%2Cw_572%2Climit_0)
variables.tf的字段:
variable block的几种常用书写方式🔒
Terraform加载变量值的顺序:
1🔒
2🔒
3🔒
4🔒
5🔒
请参见视频教程。
●variables.tf通常与terraform.tfvars文件连用,程序会读取同目录下terraform.tfvars文件中的变量,当terraform.tfvars文件中有对应变量,则🔒
●🔒
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883558
output块负责参数的输出Terraform管理的资源实例的每个导出属性的值可以在配置的其他地方使用。输出值是向模块用户暴露部分信息的一种方式。
实战演示
请参见视频教程。
●在运行terraform apply后,🔒
●输出值只有在执行terraform apply后才会被计算🔒
●子模块可以使用输出将其资源属性🔒
●子模块的output.tf只会应用到本层级中,不会传递到根目录。若需要传递到根目录,需要🔒
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883560
Terraform Data Sources(数据源)允许我们从API或其他Terraform状态后端动态获取数据。数据源包括来自云提供商的数据或来自其他配置的Terraform输出。
与resource不同,resource的括号体中给定的是参数的定义条件,🔒
与resource类似,data都可以输入并对外输出。但resource会触发🔒
详见视频课程
●数据源允许查询或计算一些数据以供其他地方使用。🔒
●我们可以在同一模块内的代码中通过数据源名称来引用数据源,但🔒
●如果使用data的时候,data还未获取到该资源,或者获取到的是一个错误或不存在的资源,则🔒
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883556
🔒
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883555
🔒
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883554
🔒
aws的配置方式
●🔒
●🔒
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883553
如同编程语言代码一样,Terraform也有推荐的层级结构。当项目发展到一定规模,各资源各模块引用更加复杂,模块间重用多起来,就会出现各种问题,显得灵活性不够了,也容易出差错。因此,我们要按照一定的规范将我们的Terraform层级定义好,这样有利于我们的简化运维难度,提升运维效率。
合理使用层级结构可以提升运维效率,使得文件更加可读、可看、可用及可维护。我们将代码结构进行分层,有如下好处:
1有组织的安排代码编写的文件,使得逻辑更加清晰。
2分层结构能使得简化运维难度,提升运维效率。
3分层使得工程更加优雅。
🔒
一个最小化模块推荐的结构是这样的:
🔒
🔒
🔒
🔒
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883552
module(模块)是一个在Terraform项目中包含一组代码的逻辑分组的文件夹。模块可以调用其他模块,并通过将一个模块的输出值(output.tf)传递到另一个模块的输入值(variable.tf)来实现模块资源数据的相互调用以提升代码的复用性。
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://cdn.nlark.com/yuque/0/2022/png/21910142/1672054649269-9d8b33ad-9e45-4cd0-b442-44507570cc2f.png)
🔒
🔒
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883550
●Terraform模块是编写高质量Terraform代码,🔒
●资源和其他任何组合都可以分解成模块,但过度使用模块会使我们🔒
●在设计搭建Terraform项目时,可以先使用单层级后进行模块化改造,也可以🔒
●层级/模块需要清晰明了,易读易理解易上手。大型项目中层级不宜🔒
●🔒
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883549
配置中的大多数资源没有任何特定关系,Terraform 可以并行更改多个不相关的资源。但是,某些资源必须在其他特定资源之后处理。有时这是因为资源的工作方式,有时资源的配置需要另一个资源生成的信息。
错误的顺序导致程序错误:
🔒
●对于depends_on建议始终包含一条注释,解释为什么depends_on需要使用,以便🔒
●depends_on元参数来处理Terraform无法自动推断的隐藏资源或模块依赖关系,或者🔒
●当资源或模块依赖于另一个资源的行为但不在其参数中访问该资源的任何数据时,我们需要🔒
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883548
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883547
🔒
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883546
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883545
请参见视频教程
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883544
●file provisioners、remote-exec provisioners需要connection与🔒
●local-exec(本地执行)是被推荐的,他的优势是🔒
●remote-exec(远程执行)是不被推荐的。官方不建议使用🔒
●当我们资源创建成功,但是provisioner没有执行成功,此时🔒
●Provisioner只能作为最后手段使用。最佳实践是,使用🔒
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883543
🔒
🔒
●Terraform提供两种state,默认状态为🔒
●Terraform远程backend仓库可以保存🔒
●我们也可以配置backend,实现🔒
●团队后端可以远程存储其状态,并使用🔒
●创建新资源是🔒
本小节视频学习链接:https://edu.51cto.com/center/course/lesson/index?id=883542
场景模拟实战题:
因公司业务发展需要,现开辟一个新的业务。你的部门需要在公有云中搭建一套的web网站的基础设施,作为公司的官网展示,并且提供查询功能。作为解决方案架构工程师与云端运维工程师,领导要求你充分利用云端的DevOps自动化运维的思想,使用IaC工具进行架构设计与基础资源创建。
架构要求如下:
○🔒
○🔒
○🔒
Terraform要求如下:
○🔒
○🔒
○🔒
ECS机器设置要求如下:
○🔒
○🔒
○🔒
数据库设置如下:
○🔒
○🔒
○🔒
○🔒
○🔒
Terraform项目中的资源项目信息,可按照以下表格中参考。其他信息,请根据所学知识自行酌情配置。
ECS镜像
|
centos_7_9_x64_20G_alibase_20220824.vhd
|
ECS实例类型
|
ecs.c7.large
|
RDS实例类型
|
rds.mysql.s1.small
|
SLB实例类型
|
slb.s2.small
|
🔒
🔒
本小节视频学习链接: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老师与你在下一个课程见!
(全文完)
https://www.yuque.com/kevin-obdls/gaqego/tdbz0rqcoowzzqby
时来天地皆同力,运去英雄不自由