Skip to content

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

image-20250711151956009

可以通过输入参数,

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"
}

image-20250711164112506

注意,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的输出数据。