前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Terraform命令行工具介绍、安装、使用

Terraform命令行工具介绍、安装、使用

作者头像
互联网-小阿宇
发布2022-11-21 10:45:26
2.7K0
发布2022-11-21 10:45:26
举报
文章被收录于专栏:互联网-小阿宇

🎈 作者:互联网-小啊宇 🎈 简介: CSDN 运维领域创作者。目前从事 Kubernetes运维相关工作,擅长Linux系统运维、开源监控软件维护、Kubernetes容器技术、CI/CD持续集成、自动化运维、开源软件部署维护等领域。 🎈 博客首页:互联网-小啊宇

在这里插入图片描述
在这里插入图片描述

Terraform命令行工具

⭐Terraform简介

🍒Terraform的定义

  • Terraform是一个可以安全、高效地建立、变更、以及版本化管理基础设施的工具,可以在主流的服务提供商上提供自定义的解决方案;
  • 以配置文件为驱动,在文件中定义所需要管理的组件(基础设施),以此生成一个可执行的计划,通过执行这个计划来完成所定义组件的创建、增量式的变更和持续的管理。
  • Terraform不仅可以管理Iaas的资源,也可以管理更上层的服务,如DNS解析,SaaS应用等。

🍒Terraform的特点

  • 基础设施即代码:Terraform基于一种特定的配置语言HCL(Hashicorp Configuration Language)来描述基础设施资源。可以像对待任何其他代码一样,实现对所描述的解决方案,或者基础架构的版本控制和管理。同时,通用的解决方案和基础架构可以以模板的形式进行便捷的共享和复用。
  • 执行计划:Terraform在执行前,可以通过terraform plan命令先解析模板生成一个可执行的计划,这个计划展示了当前模板需要创建、变更的资源和属性。操作人可以预览这个计划,在确认无误后在执行apply命令,完成所定义资源的创建和变更。
  • 资源拓扑:可以根据模板中的定义,构建所需资源的图形,以并行的方式创建和修改没有任何依赖资源的资源,以保证执行的高效性。有依赖的动作,被依赖的资源会优先执行。
  • 自动化变更:不管多么复杂的资源,当模板创建完成,通过apply一个命令,即可完成数个变更操作,避免人为操作带来的错误。

⭐关键概念

🍒Configuration:基础设施的定义和描述

基础设施即代码,其中的代码Code就是对基础设施资源的代码定义和描述,通过代码表达需要管理的资源。

所有资源的代码描述都是定义在一个以.tf结尾的文件,用于terraform的加载和解析。这个文件就称之为“Terraform模板”或者“configuration”

🍒Provider: 基础设施管理组件

Terraform常用于公有云上基础设施的管理,如虚拟机、网络、容器等。Provider就是与OpenAPI交互的后端驱动,Terraform通过Provider完成对基础设施资源的管理。

每个基础设施提供商,aliyun、aws等都需要提供一个provider来实现对自家资源的统一管理。目前我们使用的阿里云对应的provider就是alicloud。

在运行环境中,Terraform和Provider是两个独立存在的package,执行Terraform时,会根据用户模板中指定的Provider或者resource/datasource的标志自动下载模板使用的provider,并放在当前目录下的.terraform隐藏目录下。

🍒Resource:基础设施资源和服务的管理

在Terraform中,一个具体的资源或者服务称为resource,比如一个ECS,一个SLB、一个域名解析记录。每个特定的resource包含了若干可用于描述对应资源或服务的属性字段。通过这些字段来定义一个完整的资源或者服务,比如dns的domain_name、ttl等。

如下定义一个resource:

代码语言:javascript
复制
|
resource "alicloud_alidns_record" "dns701438486351555584" {
domain_name = "test.com"
line = "default"
priority = 0
rr = "mobile.api"
status = "ENABLE"
ttl = 600
type = "A"
value = "1.1.1.4"
}
|
  • 其中alicloud_alidns_record为资源类型,定义这个资源的类型,告诉terraform这个resource是域名解析记录。
  • dns701438486351555584为资源名称,资源名称在同一个模板中必须唯一,可以用于其他资源引用该资源。
  • 大括号里面的block为配置参数,定义资源的属性。

🍒Data Source:基础设施资源和服务的查询

Data Source提供查询资源的功能,每个data source实现对一个资源的动态查询,其结果可以认为是动态变量,只有运行时才知道其值。

代码语言:javascript
复制
|
data "alicloud_alidns_records" "records_ds_uni" {
domain_name = "test.com"
type = "A"
line = "unicom"
rr_regex = "mobile*.api"
output_file = "records-uni.txt"
}
|

如上定义一个records_ds_uni的资源,其通过data引用,查询test.com域名下,解析记录匹配mobile*.api的,解析线路为unicom的所有A记录,并输出到records-uni.txt文本中。

🍒state:保存资源关系以及属性文件的数据库

Terraform创建和管理所有资源都保存在自己的数据库上,这个数据库是一个名为terraform.tfstate文件,在terraform中称之为state,默认存放在执行命令的本地目录中。

在执行terraform命令时,terraform会利用state文件与模板文件进行diff对比,如果出现不一致,terraform将按照模板中的定义重新创建,或者修改资源,直到没有diff。所以这个文件非常重要,如果损坏,terraform将认为已创建的资源被破坏,或者需要重建。当然实际的云资源不会收到影响。

🍒Backend:存储state文件的载体

因terraform创建资源后,会将资源属性保存在state文件中,而这个文件可以放本地,也可以存放在远端,实现state和模板代码的分离,这个存放state文件的载体就是backend。

Backend分为本地和remote两类,默认为本地。目前已支持多达13中远端存储方案,如console、etcd、oss等,可以降低多人协作对state维护的成本,也可以保障数据的安全性。

🍒Provisioner:在机器上执行操作的组件

用来在本地机器或者登录远程主机执行相关的操作,如local-exec在本地执行命令,chef用来在远程主机安装、配置、执行chef client,remote-exec用来登录远程主机执行命令。

通常与provider搭配实现,provider创建资源后,使用provisioner在创建的资源上执行各种操作。

⭐Terraform的安装与使用


🍒Centos7安装Terraform

代码语言:javascript
复制
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install terraform

🍒查看Terraform版本

代码语言:javascript
复制
[root@localhost ~]# terraform --version
Terraform v1.2.5
on linux_amd64

🍒常用命令

  • terraform init: 初始化,加载所需模块
  • terraform plan: 资源预览

用于对模板定义的资源进行预览。如预览当前模板中定义的资源是否符合预期,如果存在state文件则展示diff结果,即变更的内容。

  • terraform apply:新建、变更资源
  • terraform show:资源展示,展示当前state中所管理的资源以及所有属性
  • terraform destroy: 资源释放
  • terraform import: 资源导入,将存量的云资源导入到state中,进而加入到terraform的管理体系中。适用以下场景:
    • 从来没使用terraform管理过资源,现在需要切换到terraform管理;
    • 在不影响资源使用的前提下,重构资源模板中的定义;
    • Provider有升级支持了更多的参数,需要把新参数同步过来。
  • terraform fmt: 格式化模板文件。将编写的tf文件进行就地格式化。

概念和命令的理解可以参考下图:

在这里插入图片描述
在这里插入图片描述

操作生命周期

在这里插入图片描述
在这里插入图片描述

资源编排的动作的生命周期如上,其中左侧为Terraform系统系统的能力,右侧provider、provisioner为厂商提供。

当执行terraform apply命令时:

①、terraform唤醒进程,初始化backend(默认为local-file); ②、解析用户定义的模板文件,并获取最新的资源状态,进行对比; ③、构建DAG,将所有编排动作依次发送给provider; ④、provider调用云API管理云资源 ⑤、将返回的结果写回state

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Terraform命令行工具
  • ⭐Terraform简介
    • 🍒Terraform的定义
      • 🍒Terraform的特点
      • ⭐关键概念
        • 🍒Configuration:基础设施的定义和描述
          • 🍒Provider: 基础设施管理组件
            • 🍒Resource:基础设施资源和服务的管理
              • 🍒Data Source:基础设施资源和服务的查询
                • 🍒state:保存资源关系以及属性文件的数据库
                  • 🍒Backend:存储state文件的载体
                    • 🍒Provisioner:在机器上执行操作的组件
                    • ⭐Terraform的安装与使用
                      • 🍒Centos7安装Terraform
                        • 🍒查看Terraform版本
                          • 🍒常用命令
                          相关产品与服务
                          数据库
                          云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档