Функция шага AWS синхронный экспресс-вызов рабочего процесса из шлюза API и исключение сведений о состоянии машины из вывода ответа

#amazon-web-services #aws-api-gateway #aws-step-functions

Вопрос:

Я возился с пошаговыми функциями и нашел отличное решение для организации лямбд, вызываемых из шлюза API, с использованием нового синхронного экспресс-рабочего процесса, но столкнулся с проблемой, из-за которой я не могу настроить внешний json на выходе. Я могу изменить все в узле «вывод» ответа json, используя ResultPath и OutputPath, но все остальное сохраняется и отправляется обратно пользователю (информация, которая не нужна, например, BillingDetails).

Я должен использовать шлюз HTTP API, так как он единственный, который может синхронно вызывать пошаговые функции, и вы не можете преобразовать ответ там, поэтому я хочу посмотреть, есть ли какой-либо способ преобразовать этот ответ без необходимости создавать какой-либо дополнительный слой поверх пошаговой функции, что в некотором роде разрушило бы всю цель их использования в первую очередь.

Как заставить функцию Step возвращать только» выходной » узел json и отфильтровывать все остальное?

Определение функции шага выглядит следующим образом:

 {
  "Comment": "Simple Lambda Function",
  "StartAt": "Invoke Lambda function",
  "States": {
    "Invoke Lambda function": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "ResultPath": "$",
      "OutputPath": "$.Payload",
      "Parameters": {
        "FunctionName": "LAMBDA ARN",
        "Payload": {
          "input.$": "$"
        }
      },
      "End": true
    }
  }
}
 

И вывод из этого конечного автомата через шлюз API производит следующее:

 {
    "billingDetails": {
        "billedDurationInMilliseconds": 500,
        "billedMemoryUsedInMB": 64
    },
    "executionArn": "ARN",
    "input": "{rn        "sendToQueue": "true",rn        "retryNumber": 1,rn        "uploadFile": "testS3file"rn    }",
    "inputDetails": {
        "__type": "com.amazonaws.swf.base.model#CloudWatchEventsExecutionDataDetails",
        "included": true
    },
    "name": "name",
    "output": "{"statusCode":200,"body":"{\"input\": {\"sendToQueue\": \"true\", \"retryNumber\": 1, \"uploadFile\": \"testS3file\"}}"}",
    "outputDetails": {
        "__type": "com.amazonaws.swf.base.model#CloudWatchEventsExecutionDataDetails",
        "included": true
    },
    "startDate": 1.618947563121E9,
    "stateMachineArn": "ARN",
    "status": "SUCCEEDED",
    "stopDate": 1.618947563572E9
}
 

Ответ №1:

У меня был тот же вопрос, и я задал его некоторым внутренним сотрудникам AWS, и они сказали, что на данный момент невозможно изменить вывод.

Обходным решением, как вы и предлагали, является API-шлюз — > Лямбда — > > Пошаговая функция вместо API-шлюза — > > > Пошаговая функция.

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

1. Спасибо, что добавили свой ответ, не тот ответ, на который я надеялся, но все больше и больше казалось, что это будет единственный способ добиться этого. Я немного удивлен, что они даже добавили и продвинули эту функцию, когда на данный момент нет хорошего способа ее реализовать. Надеюсь, скоро будет добавлена возможность возвращать правильный ответ через шлюз API.