Добавление нескольких путей S3 для склеивания гусеничного полотна с помощью terraform - PullRequest
0 голосов
/ 18 февраля 2019

Я строю некоторую инфраструктуру в AWS с помощью Terraform.У меня есть несколько корзин S3, и я хочу, чтобы гусеничный сканер сканировал эти корзины раз в час.Мой каталог базы данных Terraform Glue, роль и политика все в порядке, но когда я пытаюсь создать ресурс искателя, добавив четыре пути 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 {
#    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

Я попытался добавить оператор count в s3_target, но это не удалось.Я также попытался добавить

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

в аргумент path, но это тоже не помогло.

Могу ли я добавить несколько путей s3 в Glue Crawler с Terraform?Я могу сделать это с помощью консоли AWS, но это необходимо сделать с использованием инфраструктуры в качестве кода.

1 Ответ

0 голосов
/ 19 февраля 2019

Для нацеливания на дополнительные пути 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 (Необязательно) Список вложенных целевых аргументов Amazon S3.См. Ниже.

Это также можно увидеть в исходном коде для схемы ресурса :

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

К сожалению, до 0.12 вы не можетеПостроить это программно непосредственно в Terraform для циклического перемещения по списку динамических путей и необходимости указывать их статически.

Terraform 0.12 представит 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
    }
  }
}
...