添加多个S3路径和Terraform的胶水搜寻器



我正在用Terraform构建一些基础架构。我创建了几个S3存储桶,并希望胶水爬网每小时爬一次。我的Terraform Glue目录DB,角色和策略都可以构建正常,但是当我尝试通过在CRAWLER的s3_target{}部分添加四个S3路径来创建轨道资源时,我会遇到失败:

resource "aws_glue_crawler" "datalake_crawler" {
  database_name = "${var.glue_db_name}"
  name          = "${var.crawler_name}"
  role          = "${aws_iam_role.glue.id}" 
  s3_target {
#    count = "${length(var.data_source_path)}"
    path = "${var.data_source_path}"#"${formatlist("%s", var.data_source_path)}"
  }
}

这会导致错误:

Error: aws_glue_crawler.datalake_crawler: s3_target.0.path must be a single value, not a list

我尝试在s3_target中添加count语句,但这会失败。我也尝试添加

"${formatlist("%s", var.data_source_path)}"

path参数中,但这也失败了。

我可以在带有Terraform的胶水轨道上添加多个s3路径吗?我可以通过AWS控制台实现这一目标,但这需要使用基础结构作为代码完成。

要针对其他S3路径,您只需多次重复s3_target块:

resource "aws_glue_crawler" "datalake_crawler" {
  database_name = "${var.glue_db_name}"
  name          = "${var.crawler_name}"
  role          = "${aws_iam_role.glue.id}" 
  s3_target {
    path = "${var.data_source_path_1}"
  }
  s3_target {
    path = "${var.data_source_path_2}"
  }
}

aws_glue_crawler资源文档中简要提到了这一点:

s3_target(可选)列表嵌套了亚马逊S3目标参数。请参阅下面。

您还可以在资源架构的源代码中看到这一点:

        "s3_target": {
            Type:     schema.TypeList,
            Optional: true,
            MinItems: 1,

不幸的是,前0.12,您无法直接在Terraform上构建此此此操作,以在动态路径列表上循环循环,并且需要静态指定它们。

Terraform 0.12将引入HCl2,该HCL2对循环(使用count除外)的支持更好,包括动态块,这将使您可以执行这样的操作:

resource "aws_glue_crawler" "datalake_crawler" {
  database_name = var.glue_db_name
  name          = var.crawler_name
  role          = aws_iam_role.glue.id 
  dynamic "s3_target" {
    for_each = var.data_source_paths
    content {
      path = s3_target
    }
  }
}

最新更新