AWS Шаг Функция Передача всего ввода в качестве полезной нагрузки в лямбда java - PullRequest
0 голосов
/ 25 апреля 2020

На одном из моих шагов я использую лямбда-функцию в качестве задачи и хочу передать весь ввод как payload, чтобы он мог преобразоваться в определенный объект Java строгого типа, который я определил.

Мой тип данных как объект:

@Data
public class JobMetaData {

    public JobMetaData() {

    }

    private String jobName;
    private String jobId;

Лямбда-функция:

@Override
public JobMetaData handleRequest(final JobMetaData jobMetaData,
                                 final Context context) {

Шаг:

"Preparing Job": {
  "Next": "Submitting Job",
  "InputPath": "$",
  "OutputPath": "$.bakeJobResult",
  "Type": "Task",
  "Comment": "Preparing Job",
  "Parameters": {
    "FunctionName": "MyLambdaFunctionName",
    "Payload": {
      "$": "$"
    }
  },
  "Resource": "arn:aws:states:::lambda:invoke",
  "ResultPath": "$.bakeJobResult"
}

При выполнении вышеуказанного шага JobMetaData пройдено в качестве null. Я могу заставить его работать, только изменив его на:

    "Payload": {
      "jobName.$": "$.jobName",
      "jobId.$": "$.jobId"
    }

Но если у меня много полей, это означает, что мне нужно извлечь все поля json и построить их заново, чтобы сделать их полезными. Я использую CDK для определения моего конечного автомата, похоже, что часть Payload определена как Map<String, Object>. Есть ли способ, которым я могу просто передать весь ввод как полезную нагрузку?

1 Ответ

0 голосов
/ 27 апреля 2020

Да. ты можешь сделать это. В полезной нагрузке вы можете определить его следующим образом:

"Payload":{
    "entireInput.$": "$"
}

Итак, на вашем конце лямбды вы получите полезную нагрузку в виде:

{
"entireInput" : {"jobName":"abc", "jobId": 123, ....so on}
}

Итак, ваша полезная нагрузка будет Map<String,Object>, а затем Вы можете разобрать объект в Map<String,String> и получить все входные значения для пошаговой функции. Поэтому я думаю, что вам, возможно, придется немного измениться в своем классе POJO.

...