当前位置: 首页 > news >正文

Terraform 语法与HCL语言以及provider

一、HCL语言与Terraform语言介绍

1.1 什么是hcl语言

官网:https://developer.hashicorp.com/terraform/language

github:https://github.com/hashicorp/hcl/blob/main/hclsyntax/spec.md

HCL(HashiCorp Configuration Language)是⼀种专⻔为构建结构化配置格式⽽设计的语法和API。他由HashiCorp公司设计。HCL是⼀个⽤于创建结构化配置语⾔的⼯具包,主要针对DevOps⼯具、服务器等。HCL既有⼀种原⽣语法,旨在让⼈类愉快地阅读和编写,也有⼀种基于json的变体,更容易让机器⽣成和解析。HCL包含⼀个表达式语法,允许基本的内联计算,并且在调⽤应⽤程序的⽀持下,可以使⽤变量和函数来进⾏更动态的配置语⾔。

1.2 Terraform语言

Terraform语⾔的主要⽬的是声明资源,这些资源表示基础设施对象。所有其他语⾔特性的存在只是为了使资源的定义更加灵活和⽅便。
Terraform配置是⼀个⽤Terraform语⾔编写的完整⽂档,它告诉Terraform如何管理给定的基础设施集合。
⼀个配置可以由多个⽂件和⽬录组成。

结构示例:

<BLOCK TYPE> "<BLOCK LABEL>" "<BLOCK LABEL>" {# Block body<IDENTIFIER> = <EXPRESSION> # Argument
}
或称
<block type> "<RESOURCE TYPE>" "<LOCAL NAME/LABEL>"{# Block body<IDENTIFIER> = <EXPRESSION> # Argument
}
块类型 "块标签1/资源类型" "块标签2/本地名称/本地标签" {# 块主体参数 = 表达式参数 = 表达式...
}
block(块)是其他内容的容器,通常表示某种对象的配置,如resource。block具有块类型,可以有零个或多个标签,并且具有包含任意数量的参数和嵌套块的主体。Terraform的⼤部分功能都由配置⽂
件中的顶级块控制。
Terraform语⾔是声明性的,描述的是预期⽬标,⽽不是实现⽬标的步骤。块的顺序和它们被组织成的⽂件通常不重要;Terraform在确定操作顺序时只考虑资源之间的隐式和显式关系。
https://developer.hashicorp.com/terraform/language
#创建vpc
resource "alicloud_vpc" "vpc" {vpc_name   = "vpc_1"cidr_block = "10.0.0.0/16"
}# 创建vswitch
# alicloud_vswitch是阿里云的资源字段,vsw_1字段是tf文件中的自定义唯一资源名称,vswitch_name字段是在阿里云上的自定义备注名
resource "alicloud_vswitch" "vsw_1" {vswitch_name = "vsw_aliyun1"vpc_id       = alicloud_vpc.vpc.idcidr_block   = "10.0.0.0/24"zone_id      = "cn-shanghai-b"
}

 

二、provider

2.1 什么是provider插件

Terraform 是⼀个多云基础设施编排⼯具,是通过Provider来⽀持云基础架构。⽽Provider的本质是上游云⼚商的API的逻辑抽象,他们负责理解API交互并暴露资源。
我们可以将Provider理解为各个云⼚商提供的与云资源交互的后端驱动,不同的基础设施提供商都需要提供⼀个Provider来实现对⾃家基础设施的统⼀管理。
Terraform实现多云编排的⽅法就是Provider插件机制。

2.2 provider的四种类型

  1. Official :官⽅
  2. Partner :合作伙伴
  3. Community :社区
  4. Archived :归档
类型 说明 维护者
Official
官⽅供应商由HashiCorp拥有和维护
hashicorp
Partner 
合作伙伴提供商由第三⽅公司根据⾃⼰的API编写、维
护、验证和发布。
第三⽅组织,例如
mongodb/mongodbatlas公
Community 
社区提供者由个⼈维护者、维护者组或Terraform社区
的其他成员发布到Terraform注册中⼼。
维护者的个⼈或组织帐户,
如DeviaVir/gsuite
Archived 
存档的提供者是不再由HashiCorp或社区维护的官⽅或
合作伙伴提供者。如果API被弃⽤或兴趣较低,则可能
会发⽣这种情况。
hashicorp 或第三⽅

 

 

 

 

 

 

 

 

云厂商提供插件:provider:https://registry.terraform.io/browse/providers

image

例如阿里云provider配置:https://registry.terraform.io/providers/aliyun/alicloud/latest

# 定义provider
terraform {required_providers {alicloud = {source = "aliyun/alicloud"version = "1.273.0"}}
}
# 配置provider
provider "alicloud" {# Configuration optionsaccess_key = "LTAI5tHjccccc"secret_key = "hmbkeRCcccccc"region = "cn-shanghai"
}
配置provider的访问⽅式,不同云⼚商的配置⽅式有所不同,请参考各云⼚商的provider⽂档。
aws:https://registry.terraform.io/providers/hashicorp/aws/latest

image

2.3 provider可以设置多个云厂商

terraform {# 定义terraform版本required_version = ">= v1.14.0"
# 定义providerrequired_providers {aws = {source = "hashicorp/aws"version = "> 6.36.0"}
cloudinit = {source = "hashicorp/cloudinit"version = "> 2.3.7"}
alicloud = {source = "aliyun/alicloud"version = "1.273.0"}} }

2.4 provider⽂件的两种表示⽅式

⼀种是合并设置,将定义provider和配置provider写在同⼀个⽂件provider.tf⽂件中。
# 定义provider
terraform {required_providers {alicloud = {source = "aliyun/alicloud"version = "1.273.0"}}
}
# 配置provider
provider "alicloud" {# Configuration optionsaccess_key = "LTAI5tHjLFccc"secret_key = "hmbkeRCAXXabwccc"region = "cn-shanghai"}
另⼀种是分开设置,分别建⽴provider.tf和version.tf,将定义provider写在version.tf中,将配置provider写在provider.tf中。
层级结构:
$ tree
.
├── main.tf
├── provider.tf
└── version.tf
version.tf:
terraform {required_providers {alicloud = {source = "aliyun/alicloud"version = "1.273.0"}}
}provider.tf
provider "alicloud" {access_key = "LTAI5tHjLFdcccccP"secret_key = "hmbkeRCAXXacccc"region = "cn-shanghai"
}

总结:

Terraform 是⼀个多云基础设施编排⼯具,是通过Provider来⽀持云基础架构。其本质是上游云⼚商的API调⽤。
provider有四种类型,分别是Official、Partner、Community、Archived。
不同云⼚商的配置⽅式有所不同,请参考各云⼚商的provider⽂档。
provider的定义与配置可以写在同⼀个.tf⽂件中,也可以分开填写。
同⼀个Terraform⼯程⽀持配置多个provider,只需要在required_providers中规范配置即可。

 

 

http://www.jsqmd.com/news/490324/

相关文章:

  • Mac开发者必备:用PlistEdit Pro批量修改100+个plist文件的实战技巧
  • ComfyUI配置管理与路径优化完全指南:从故障排除到性能提升
  • 为什么企业的 IT 工单越来越多,但效率却没有明显提升?
  • 2026用友YonSuite选哪家?关键看服务与技术实力 - 品牌排行榜
  • mimotion:本地化健康数据管理的自动化解决方案
  • AI绘画效率翻倍:ComfyUI提示词工作流+Portrait Master插件配置全指南
  • 盘点2026年全国口碑不错的正规的当地上门黄金回收公司,怎么收费 - 工业品牌热点
  • Phi-4-mini-reasoning在ollama中的惊艳效果展示:高质量数学推理生成作品集
  • SAM3提示词分割镜像教程:简单几步,实现图片中物体的精准提取
  • 2026年 拉床厂家实力推荐榜:卧式拉床、液压拉床、数控拉床、伺服拉床等精密加工设备源头企业深度解析与选购指南 - 品牌企业推荐师(官方)
  • Jmeter 与 阿里云 性能测试PTS
  • Surfel与语义分割的完美结合:SuMa++算法在自动驾驶中的实战应用
  • AIGlasses_for_navigation硬件指南:STM32CubeMX配置与HAL库驱动开发
  • 2026年工厂短视频避坑指南:本地化服务缺失最大痛点 - 精选优质企业推荐榜
  • Qwen3-14B智能助手实战:基于vLLM部署的Chainlit界面支持多轮技术对话
  • 腾讯一天甩出三只“虾”!大厂疯狂入局,OpenClaw赛道为何突然挤爆了?
  • 聊聊2026年当地上门回收黄金商家,哪家专业又值得推荐? - 工业推荐榜
  • 当手机变砖时:MTKClient的5个救援方案
  • YOLOE部署教程:YOLOE-v8l-seg模型自动下载+CUDA加速推理配置
  • 分析2026直臂登高车厂家,伸臂式登高车性价比高的有哪些 - mypinpai
  • 软件测试面试题实战:用Phi-3-vision-128k-instruct分析测试用例设计图
  • TI电赛开发板驱动0.91寸OLED屏(SSD1306)移植实战:从引脚配置到显示验证
  • 丹青识画系统黑马点评项目增强版:为商户照片添加智能标签与分类
  • 2026年广州口碑好的汽车换机油服务品牌推荐,专业汽车环保换机油全解析 - myqiye
  • 手把手教你用VisionMaster SDK打造药盒字符检测系统(C#实战)
  • 从理论到代码:二阶巴特沃斯低通滤波器的离散化实现与参数设计
  • Unity3D中Time.timeScale对游戏逻辑与物理更新的深度解析:Update、LateUpdate与FixedUpdate的实战对比
  • 衡山派开发板驱动HC-SR04超声波测距模块:RT-Thread实战与代码移植详解
  • 解读出入口安防设备制造商,口碑好的有几家 - 工业设备
  • ComfyUI配置管理与效率优化指南:从混乱到有序的实践之路