1. data
1.1 什么是Data Source?✅
Terraform Data Sources(数据源)允许我们从API或其他Terraform状态后端动态获取数据。数据源包括来自云提供商的数据或来自其他配置的Terraform输出。
与resource不同,resource的括号体中给定的是参数的定义条件,而在data的括号体中是传给数据源的查询条件
。查询条件参数的种类取决于provider给定的数据源的类型。
与resource类似,data都可以输入并对外输出。但resource会触发Terraform对基础设施对象进行增删改查操作
,而data只会触发查操作
。
1.2 使用说明✅
https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/data-sources/instances
可以通过输入参数,
vim data.tf
yaml
data "alicloud_instances" "instance-test" {
name_regex = "lyc"
status = "Running"
}
data "alicloud_instances" "instance-test" {
name_regex = "lyc"
status = "Running"
}
vim output.tf
output "name_regex_test" {
#输出结果,是list 的加*
value = data.alicloud_instances.instance-test.instances.*.id
description = "this is instance name test"
}
output "name_regex_test" {
#输出结果,是list 的加*
value = data.alicloud_instances.instance-test.instances.*.id
description = "this is instance name test"
}
注意,alicloud_instances alicloud_instance 的区别
alicloud_instance 是resources中的资源,alicloud_instances 是data sources中的
1.3 引用数据源✅
引用数据源数据的语法是data.<TYPE>.<NAME>.<ATTRIBUTE>
:
yaml
data "alicloud_instances" "instance-test" {
name_regex = "lyc"
status = "Running"
}
data "alicloud_instances" "instance-test" {
name_regex = "lyc"
status = "Running"
}
yaml
output "name_regex_test" {
#输出结果,是list 的加*
value = data.alicloud_instances.instance-test.instances.*.id
description = "this is instance name test"
}
output "name_regex_test" {
#输出结果,是list 的加*
value = data.alicloud_instances.instance-test.instances.*.id
description = "this is instance name test"
}
💡 说明
- 数据源允许查询或计算一些数据以供其他地方使用。使用数据源可以使得Terraform代码使用在Terraform管理范围之外的一些信息,或者是读取其他Terraform代码保存的状态。
- 可以在同一模块内的代码中通过数据源名称来引用数据源,但无法从模块外部直接访问数据源。
- 使用data的时候,data还未获取到该资源,或者获取到的是一个错误或不存在的资源,则会报错。需要先有data获取到的资源,才能引l用data的输出数据。