我们可以通过文件或者局部变量来创建数据源吗?

问题描述 投票:0回答:2

我想将数据从主代码中分离出来,并在类似于 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}/"
}
amazon-web-services amazon-s3 terraform terraform-provider-aws
2个回答
1
投票

是的,您可以在任何您想要的文件中拥有数据源。
Terraform 基本上不关心文件组成及其名称,只是将同一目录中的所有 .tf 文件集中到一个大 blob 中。

文档指出

模块是保存在一个目录中的 .tf [...] 文件的集合。
Terraform 评估模块中的所有配置文件,有效地将整个模块视为单个文档。
将各个块分成不同的文件纯粹是为了方便读者和维护者,对模块的行为没有影响。


0
投票

是的,当然可以。出于组织目的,您应该使用不同的文件。当您有一个简单的项目时,很容易检查代码甚至在单个文件中进行故障排除,但当您开始部署更多基础设施时将是一场噩梦。所以我的建议是通过拆分不同的文件来启动“小”项目。 关于您的示例,这是我给您的建议:

  • base.auto.tfvars

    • 您可以在此处放置将在整个项目中使用的变量。
      • 例如:
        region = us-east-1
        project = web-appliance
  • s3.auto.tfvars

    • 您将在 s3 存储桶中使用的变量
  • s3.tf

    • 创建S3的代码
  • datasource.tf

    • 在这里,您可以将项目中需要的所有
      datasources
      放入其中。
  • provider.tf

    • 您的提供商的配置。在您的示例中,aws 提供商
  • versions.tf

    • 您的提供商的版本
© www.soinside.com 2019 - 2024. All rights reserved.