第13天:Terraform 数据源

发布: (2025年12月8日 GMT+8 01:34)
3 min read
原文: Dev.to

Source: Dev.to

数据源

把数据源想象成一个电话簿,里面的用户名和电话号码是通过 API 访问的键‑值对。与其硬编码值,你可以使用键来检索它们。

简而言之,Terraform 对 AWS 的数据源让你能够获取已有 AWS 资源或外部数据的信息,然后在 Terraform 配置中引用这些信息。

示例: 创建 EC2 实例时需要 AMI ID。与其手动查找最新的 Amazon Linux 2 AMI,你可以使用数据源自动获取 AMI ID。

数据源使 Terraform 能够 读取 现有基础设施的信息。它们:

  • 不会创建、更新或删除资源
  • 允许你引用在其他地方管理的资源
  • 能在团队之间共享基础设施
  • 使用 data 块而不是 resource 块来定义

数据源示意图

如何使用 AWS 数据源

在 Terraform 配置中使用 data 块定义数据源:

data "provider_type" "name" {
  # 用于过滤或标识数据源的配置设置
}
  • provider_type – AWS 数据源的类型(例如 aws_amiaws_vpcaws_s3_bucket)。
  • name – 用于引用该数据源的本地标识符。
  • 配置设置 – 根据数据源不同而异,通常包括 idname,或带有 namevalues 参数的 filter 块。

示例:Data 与 Resource 块的区别

# Resource Block – Terraform 管理此资源
resource "aws_vpc" "my_vpc" {
  cidr_block = "10.0.0.0/16"
}

# Data Block – Terraform 读取此资源
data "aws_vpc" "existing_vpc" {
  filter {
    name   = "tag:Name"
    values = ["shared-network-vpc"]
  }
}

resource 块中,Terraform 创建并管理 VPC;在 data 块中,Terraform 仅读取符合提供的过滤条件的 已存在 VPC 的信息。

任务

使用 Terraform 创建一个 VPC,然后使用数据源获取 AMI ID 并在刚创建的 VPC 中启动 EC2 实例。

任务示意图

VPC 的创建

# 由其他团队模拟创建的基础设施
provider "aws" {
  region = "us-east-1"
}

resource "aws_vpc" "shared" {
  cidr_block = "10.0.0.0/16"
  tags = {
    Name = "shared-network-vpc"
  }
}

resource "aws_subnet" "shared" {
  vpc_id     = aws_vpc.shared.id
  cidr_block = "10.0.1.0/24"
  tags = {
    Name = "shared-primary-subnet"  # ← 这个标签很重要!
  }
}

运行 plan 查看 Terraform 将执行的操作:

terraform plan

典型输出(为简洁起见已截断):

# aws_subnet.shared will be created
+ resource "aws_subnet" "shared" {
    + cidr_block = "10.0.1.0/24"
    + tags = {
        + "Name" = "shared-primary-subnet"
      }
    + vpc_id = (known after apply)
  }

# aws_vpc.shared will be created
+ resource "aws_vpc" "shared" {
    + cidr_block = "10.0.0.0/16"
    + enable_dns_support = true
    + tags = {
        + "Name" = "shared-network-vpc"
      }
  }
Back to Blog

相关文章

阅读更多 »

Terraform 数据源 (AWS)

Terraform 数据源是什么?Terraform 中的数据源是对现有资源的只读查找。Terraform 并不是创建新资源,而是查询…

第13天:Terraform 中的数据源

什么是 Data Sources?您可以使用 data sources 来获取现有 VPC、子网、AMI、security groups 等信息。hcl data 'data_source_type' 'dat...