我正在尝试通过 Lambda 调用步骤函数。并且 lambda 将输入 json 转储到步骤函数。 这是 Lambda 的步骤函数的输入 -
{
"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 动态填充文件名 -
{
"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’的值必须是字符串”...任何帮助表示赞赏。谢谢!
在您的
Args
部分中,更改以下内容:
{"FileName$.":"$.FileName"}
对此:
"$.FileName"
亚马逊状态语言(ASL)只需要其中的字符串。 这就是 ASL 中对输入值的引用的方式。
$
引用执行上下文对象,所以在这种情况下就像说input.FileName
。
有关大量与 EMR 集群具体相关的示例,请查看 Step Functions 开发人员指南部分,包含类似容器用例的示例,或宣布 Step Functions EMR 集成的博客文章
还要确保正确指定选择顺序,特别是如果您使用 IsNull...
"CheckForNextPage": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.tasks.Marker",
"IsNull": true,
"Next": "Done"
},
{
"Variable": "$.tasks.Marker",
"IsPresent": true,
"Next": "Next state"
}
],
"Default": "Done"
},