能否通过文件或本地变量创建Terraform数据源?代码分离及配置咨询
当然可以将Terraform数据源分离到独立文件
Terraform对.tf文件的命名没有强制要求,只要文件在同一个模块目录下,它会自动加载所有.tf文件并解析其中的资源、数据源、变量、本地值等。所以你完全可以把数据源定义单独放在比如data.tf这类独立文件中,实现代码分离。
示例拆分方案
- main.tf(存放核心资源定义)
resource "aws_s3_bucket" "artifact" { bucket = "jatin-123" } resource "aws_s3_bucket_logging" "artifacts_server_access_logs" { for_each = local.env bucket = data.aws_s3_bucket.selected.id target_bucket = local.s3_artifact_access_logs_bucket_name target_prefix = "${aws_s3_bucket.artifact[each.key].id}/" }
- data.tf(专门存放数据源定义)
data "aws_s3_bucket" "selected" { bucket = "bucket.test.com" }
- local.tf(存放本地变量)
locals { env = { # 你的环境配置内容 } s3_artifact_access_logs_bucket_name = "指定的日志存储桶名称" }
关键说明
- 文件名可自定义,比如用
data-s3.tf更明确对应S3相关数据源,只要符合小写字母、连字符/下划线的命名规则即可。 - 分离后不影响资源间的引用,Terraform会自动处理模块内所有数据源、资源的依赖关系。
- 若使用多模块结构,需确保数据源定义在需要引用它的模块目录下,或通过模块输出传递引用。
内容的提问来源于stack exchange,提问作者Jatin Mehrotra
相关产品推荐
相关产品推荐

