Как назначить файл JSON как STEP в кластере EMR в Terraform? - PullRequest
0 голосов
/ 12 июня 2019

Я строю кластер EMR в Terraform и в аргументе STEP я хочу загрузить файл JSON, который описывает список шагов.

Я попробовал это в моем main.tf:

ressource "aws_emr" "emr" {
  ...
  ...
  step = "${data.template_file.steps.rendered}"
}

data "template_file" "steps" {
  template = "${file("${path.module}/steps.json")}"
}

И это файл JSON:

[
{
    "action_on_failure" : "CONTINUE",
    "name"              : "step_name",
    "hadoop_jar_step" : {
        "jar" : "command-runner.jar",
        "args" : [
            "spark-submit",
            "s3://mybucket/src/pyspark/script1.py",
            "1",
            "68465131321321",
            "s3://mybucket/parquet",
            "s3://mybucket/result",
            "321",
            "65165165468587",
            "654"
        ]
    }
}
]

Но когда я делаю terraform plan, я получаю эту ошибку:

Недопустимое значение для атрибута "step": список требуемых объектов.

В чем проблема?

Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 13 июня 2019

Хорошо, я нашел решение на другом веб-сайте, и я опубликую его здесь, может быть, это поможет кому-то в один день

   resource "aws_emr_cluster" "cluster" {
  ...
  dynamic "step" {
    for_each = jsondecode(templatefile("steps.json", {}))
    content {
      action_on_failure = step.value.action_on_failure
      name              = step.value.name
      hadoop_jar_step {
        jar  = step.value.hadoop_jar_step.jar
        args = step.value.hadoop_jar_step.args
      }
    }
  }
  ...
}

Так что можно использовать JSON-файл в качестве источника для шага вРесурс EMR.

0 голосов
/ 12 июня 2019

Шаги не определены как JSON в ресурсе aws_emr, вместо этого попробуйте:

step {
  action_on_failure = "CONTINUE"
  name              = "step_name"

  hadoop_jar_step {
    jar  = "command-runner.jar"
    args = ["spark-submit", ...]
  }
}

...