我想将数据从主代码中分离出来,并在类似于 local.tf 或 Variables.tf 的单独文件中使用它们,但是即使在文档中也没有参考。
用例
我正在尝试为 s3 存储桶创建访问日志记录。目标存储桶不受 s3 管理,因此我想在通过数据源使用它之前确保它存在
resource "aws_s3_bucket" "artifact" {
bucket = "jatin-123"
}
data "aws_s3_bucket" "selected" {
bucket = "bucket.test.com"
}
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}/"
}
是的,您可以在任何您想要的文件中拥有数据源。
Terraform 基本上不关心文件组成及其名称,只是将同一目录中的所有 .tf 文件集中到一个大 blob 中。
文档指出:
模块是保存在一个目录中的 .tf [...] 文件的集合。
Terraform 评估模块中的所有配置文件,有效地将整个模块视为单个文档。
将各个块分成不同的文件纯粹是为了方便读者和维护者,对模块的行为没有影响。
是的,当然可以。出于组织目的,您应该使用不同的文件。当您有一个简单的项目时,很容易检查代码甚至在单个文件中进行故障排除,但当您开始部署更多基础设施时将是一场噩梦。所以我的建议是通过拆分不同的文件来启动“小”项目。 关于您的示例,这是我给您的建议:
base.auto.tfvars
region = us-east-1
project = web-appliance
s3.auto.tfvars
s3.tf
datasource.tf
datasources
放入其中。provider.tf
versions.tf