问题描述
我正在尝试通过Lambda调用step函数。然后,lambda将输入的json转储到step函数。 这是Lambda对step函数的输入-
{
"name": "Add step to EMR cluster","input": {
"TransactionId": "c6a3ea17-db1b-11ea-bd00-a366cfd325b1","FileName": "NEA_FINAL_08072020_20.txt","BucketName": "catalyst-landing-stage"
},"inputDetails": null
}
我正在尝试使用以下代码从输入json动态填充FileName-
{
"Comment": "Running Catalist step on Amazon EMR","StartAt": "Add step to EMR cluster","States": {
"Add step to EMR cluster": {
"Type": "Task","Resource": "arn:aws:states:::elasticmapreduce:addStep.sync","Parameters": {
"ClusterId": "j-JMJL7M823WT6","Step": {
"Name": "Catalist_Step","ActionOnFailure": "CONTINUE","HadoopJarStep": {
"Jar": "command-runner.jar","Args": [
"spark-submit","s3://usercase1-test1/Code/Catalist_MemberExtract.py",{"FileName$.":"$.FileName"},"s3://usercase1-test1/yesterday.csv/part-00000-ec88bf25-cb22-42d0-b341-f68289ebc781-c000.csv","s3://usercase1-test1/MemberExtract_QC_08042020"
]
}
}
},"End": true
}
}
}
我得到上面的错误“字段'null'的值必须为STRING” ...任何帮助,我们将感激不尽。谢谢!
解决方法
在您的Args
部分中,更改以下内容:
{"FileName$.":"$.FileName"}
对此:
"$.FileName"
Amazon States Language(ASL)仅希望在其中输入字符串。这就是在ASL中完成对输入值的引用的方式。 $
引用执行上下文对象,因此在这种情况下就像说input.FileName
。
有关大量与EMR群集相关的示例,请查看 《步骤功能开发人员指南》 section,其中包含类似容器用例的示例,或Blog Post announcing Step Functions EMR Integration