我正在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”的值不合适:所需的对象列表。
出什么问题了?
感谢您的帮助。
答案 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文件作为步骤的源。