寸阳分阴须爱惜,休负春色与时光。这篇文章主要讲述Terraform 常用语法相关的知识,希望能为你提供帮助。
ProviderTerraform 通过 provider 管理基础设施,使用 provider 与云供应商 API进行交互;
每个 Provider 都包含相关的资源和数据源;
??Provider??
声明 Provider
每个 Terraform 模块必须声明它需要哪些 Provider,以便 Terraform 可以安装和使用他们。
提供者要求在一个 ??required_providers?
?块中声明。
配置 Provider
关键字 ??provider?
? ,一般是主体部分的配置参数。
配置多个 Provider
可以为同一个 Provider 定义多个配置,并选择基于每个资源或每个模块使用那一个,这样做的主要原因是支持一个云平台的多个区域。
引用方式:alicloud.beijing
Resource
??alicloud_docs??
定义一台 ECS 实例:包括如下选项
~# cat alicloud_instance.tf
resource "alicloud_instance" "myecs"
# 可用区
availability_zone = "cn-beijing-b"
# 安全组
security_groups= alicloud_security_group.group.*.id
# 实例规格
instance_type= "ecs.t5-lc2m1.nano"
# 系统盘类型、名称、描述
system_disk_category= "cloud_efficiency"
system_disk_name= "test_foo_system_disk_name"
system_disk_description= "test_foo_system_disk_description"
# 使用镜像
image_id= "centos_7_5_x64_20G_alibase_20211130.vhd"
# 实例名称
instance_name= "test_foo"
# Vswitch ID
vswitch_id= alicloud_vswitch.vsw.id
# 带宽
internet_max_bandwidth_out = 1
# 付款方式
instance_charge_type = "PaybyTraffic"
# 账号密码
password = "Test1234567"
Resource DNS
??alicloud_dns_record_docs??
定义一条 DNS 解析记录
~# cat alicloud_dns.tf
resource "alicloud_dns_record" "record"
name= "whale.com"
host_record = "test"
type= "A"
value= https://www.songbingjia.com/android/alicloud_instance.myecs.public_ip
DataSourceDataSource 提供资源的数据,可以通过参数过滤数据并供其他模块引用
使用 ??data?
?块声明
使用 ??output?
? 块进行展示引用
data "alicloud_images" "images_centos"
owners= "system"
name_regex= "^centos_7_9"
architecture = "x86_64"
status= "Available"
os_type= "linux"
output_file= "./outputs.json"
output "first_image_id"
value = https://www.songbingjia.com/android/data.alicloud_images.images_centos.images
# resource 引用
image_id = data.alicloud_images.images_centos.images[0].id
Variable变量允许自定义 Terraform 模块,而无需更改模块自己的代码。这可以实现跨不同的 Terraform 配置共享模块,使模块可组合和可重用。
?variables.tf?
? 中定义变量;?terraform.tfvars?
?
variable "region"
type = string
description = "region name"
default = "cn-beijing"
sensitive = true
variable 参数类型?default?
? 变量的默认值?type?
? 变量的类型?describtion?
? 变量的描述信息?validation?
? 定义变量的验证规则?sensitive?
? 限制变量在 UI 中显示?nullable?
? 变量是否可为空
map DNS# variables.tf
variable "dns_record"
type = map(string)
description = "custom dns record"
# terraform.tfvars
dns_record =
"dev" = "dev.whale.com",
"stag" = "stag.whale.com",
"prod" = "prod.whale.com"
# variables.tf
variable "env_list"
type = list(string)
description = "env list"
output "env_list"
value = https://www.songbingjia.com/android/var.env_list
# terraform.tfvars
env_list = [ "dev", "stag", "prod" ]
# variables.tf
variable "ecs_info"
type = object(ecs_image = string, ecs_name = string)
output "ecs_info"
value = https://www.songbingjia.com/android/var.ecs_info
# terraform.tfvars
ecs_info =
ecs_image = "centos_7_5_64_20G_alibase_20G_20211130.vhd",
ecs_name = "mydemoecs"
在变量声明后,可以使用 ??var.VAR_NAME?
? 的方式引用;VAR_NAME即 variables.tf 中的定义
?terrform.tfvars?
? |??terrform.tfvars.json?
??*.auto.tfvars?
? |??*.auto.tfvars.json?
?# -var
terraform plan -var="region=cn-hangzhou"
terraform plan -var=env_list=["dev", "stag"] -var="region=cn-hangzhou"
# -var-file
terraform plan -var-file="dev.tfvars"
##ENV
export TF_VAR_region=cn-beijing
export TF_VAR_env_list=env_list=["dev", "stag"]
locals-局部变量局部、本地变量;局部值有助于避免在配置中多次重复相同的值或表达式;
# 定义局部变量
locals
ecs_name = "mydemoecs"
owner = "whale"
# 引用局部变量
local.ecs_name
local.owner
Outputoutput 可以打印已定义的变量,并且可以公开信息以供其他 Terraform 配置使用。输出值类似于编程语言中的返回值。
可选参数:
# output.tf
output "dev_dns_name"
value = https://www.songbingjia.com/android/alicloud_dns_record.record.host_record
# 运行
terraform plan
例如:如果一个名称 ??ecs_server?
? 的子模块声明了一个名为 ??instance_ip_addr?
?的输出,则可以将该值作为?? module.ecs_server.instance_ip_addr?
?
【Terraform 常用语法】??module.<
MODULE NAME>
.<
OUTPUT NAME>
?
?
推荐阅读
- A/B测试与灰度发布
- 系统之家win7纯净版32位系统启用“以兼容方式运行”选项的办法
- 中关村系统之家浅析经常见的电脑键盘故障与应对技巧
- 将闲置U盘变成内存运用提升系统之家win7纯净版iso系统运行速度
- 完全隐藏系统之家win7旗舰版 64位系统u盘盘符的技巧
- 关闭word文档时系统之家精简纯净win7系统没有保存提示怎样办
- win7系统之家解析为何U盘容量达不到标称容量
- 最新xp系统之家教你妙用虚拟光驱迅速打开ISO文件
- pe系统之家win7旗舰版系统删除U盘中的autorun病毒的窍门