AWS Stepfunction передает данные в следующую лямбду без всех дополнительных дополнений

#aws-lambda #aws-step-functions

#aws-lambda #aws-step-функции

Вопрос:

Я создал конечный автомат с AWD CDK (typescript), и все это работает нормально. Это просто вывод лямбды 1, который является входом для лямбды 2, имеет какое-то заполнение конечного автомата, которое меня не интересует.

Определение конечного автомата:

 {
  "StartAt": "",
  "States": {
    "...applicationPdf": {
      "Next": "...setApplicationProcessed",
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "Parameters": {
        "FunctionName": "...applicationPdf",
        "Payload.$": "$"
      }
    },
    "...setApplicationProcessed": {
      "Next": "Done",
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "Parameters": {
        "...applicationPdf",
        "Payload.$": "$"
      }
    },
    "Done": {
      "Type": "Succeed"
    }
  }
}
 

Вывод Lambda1 (applicationPdf):

 {
  "ExecutedVersion": "$LATEST",
  "Payload": {
    ...
  },
  "SdkHttpMetadata": {
    "AllHttpHeaders": {
      ...
    },
    "HttpHeaders": {
       ....
    },
    "HttpStatusCode": 200
  },
  "SdkResponseMetadata": {
     ....
  },
  "StatusCode": 200
}
 

Поэтому меня интересуют только Payload , а не все остальное.
Причина, по которой я хочу это сделать, заключается в том, что я хочу запустить 2-ю лямбду отдельно, я просто хочу, чтобы событие, входящее в лямбду, было объектом полезной нагрузки, а не объектом с. ExecutedVersion etc

Кто-нибудь знает, как это сделать? Я посмотрю на Parameters вариант определения, возможно, ответ лежит там.

Ответ №1:

Спасибо за ваш вопрос и за ваш интерес к шаговым функциям.

Поля resultSelector и OutputPath можно использовать для управления выводом состояния, что может быть особенно полезно, когда состояние выводит значения, к которым вам не нужен доступ в последующих состояниях. Разница между ними заключается в том, что resultSelector применяется до применения ResultPath состояния, а OutputPath применяется после него.

Как вы заметили, вы можете использовать OutputPath для фильтрации любых нежелательных метаданных перед передачей в следующее состояние.

Комментарии:

1. Спасибо за ваш отзыв!

Ответ №2:

Я нашел одно решение, добавьте outputPath :

 return new LambdaInvoke(this, 'lamba', {
      lambdaFunction: Function.fromFunctionArn(this, name, this.createLabmdaArn('applicationPdf')),
      outputPath: '$.Payload',
    });
 

Похоже, это работает и может быть решением.