AWS Step 函数 - 字段“null”的值必须是字符串

问题描述 投票:0回答:2

我正在尝试通过 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’的值必须是字符串”...任何帮助表示赞赏。谢谢!

amazon-web-services aws-lambda
2个回答
0
投票

在您的

Args
部分中,更改以下内容:

{"FileName$.":"$.FileName"}

对此:

"$.FileName"

亚马逊状态语言(ASL)只需要其中的字符串。 这就是 ASL 中对输入值的引用的方式。

$
引用执行上下文对象,所以在这种情况下就像说
input.FileName

有关大量与 EMR 集群具体相关的示例,请查看 Step Functions 开发人员指南部分,包含类似容器用例的示例,或宣布 Step Functions EMR 集成的博客文章


0
投票

还要确保正确指定选择顺序,特别是如果您使用 IsNull...

    "CheckForNextPage": {
      "Type": "Choice",
      "Choices": [
        {
          "Variable": "$.tasks.Marker",
          "IsNull": true,
          "Next": "Done"
        },
        {
          "Variable": "$.tasks.Marker",
          "IsPresent": true,
          "Next": "Next state"
        }
      ],
      "Default": "Done"
    },

© www.soinside.com 2019 - 2024. All rights reserved.