如何在Terraform的EMR群集中将JSON文件分配为STEP?

时间:2019-06-12 07:37:20

标签: amazon-web-services terraform amazon-emr

我正在Terraform中构建一个EMR集群,并在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 :(得分:0)

aws_emr资源中未将步骤定义为JSON,请尝试:

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

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

答案 1 :(得分:0)

好吧,我在另一个网站上找到了解决方案,我会在这里发布它,也许有一天会有帮助的人

   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
      }
    }
  }
  ...
}

这样,就可以在EMR资源中使用JSON文件作为步骤的源。