Как передать AWS лямбда-ошибку в AWS уведомлении SNS через AWS Step Functions? - PullRequest
1 голос
/ 05 мая 2020

Я создал функцию AWS Step, которая запускает код Lambda python, завершается без ошибок, если Lambda завершается успешно, в противном случае вызывает SNS topi c, чтобы сообщить подписанным пользователям, если Lambda не работает. Он запущен, но сообщение исправлено. Пошаговая функция JSON выглядит следующим образом:

{
  "StartAt": "Lambda Trigger",
  "States": {
    "Lambda Trigger": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:us-east-2:xxxxxxxxxxxx:function:helloworldTest",
      "End": true,
      "Catch": [
        {
          "ErrorEquals": [
            "States.ALL"
          ],
          "ResultPath": "$.error",
          "Next": "Notify Failure"
        }
      ]
    },
    "Notify Failure": {
      "Type": "Task",
      "Resource": "arn:aws:states:::sns:publish",
      "Parameters": {
        "Message": "Batch job submitted through Step Functions failed with the following error, $.error",
        "TopicArn": "arn:aws:sns:us-east-2:xxxxxxxxxxxx:lambda-execution-failure"
      },
      "End": true
    }
  }
}

Единственное, что я хочу добавить сообщение об ошибке сбоя в строку сообщения, которое я пробовал, но работает не так, как ожидалось.

Eg: The step function run on failure

But I get a mail as follows:

Письмо получено

Как go об этом?

Ответы [ 3 ]

0 голосов
/ 10 июля 2020

Я мог бы решить проблему, используя "Error. $": "$ .Cause" .

Ниже приведен рабочий пример части отказа конечного автомата:

"Job Failure": {
              "Type": "Task",
              "Resource": "arn:aws:states:::sns:publish",
              "Parameters": {
                "Subject": "Lambda Job Failed",
                "Message": {
                  "Alarm": "Lambda Job Failed",
                  "Error.$": "$.Cause"
                },
                "TopicArn": "arn:aws:sns:us-east-2:xxxxxxxxxxxx:Job-Run-Notification"
              },
              "End": true
            }

Надеюсь, это поможет!

0 голосов
/ 14 августа 2020

Вот полная версия кода

{
  "Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function",
  "StartAt": "HelloWorld",
  "States": {
    "HelloWorld": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:us-east-1:XXXXXXXXXXXXX:function:StepFunctionTest",
      "End": true,
      "Catch": [
        {
          "ErrorEquals": [
            "States.ALL"
          ],
          "Next": "NotifyFailure"
        }
      ]
    },
    "NotifyFailure": {
      "Type": "Task",
      "Resource": "arn:aws:states:::sns:publish",
      "Parameters": {
        "Subject": "[ERROR]: Task failed",
        "Message": {
          "Alarm": "Batch job submitted through Step Functions failed with the following error",
          "Error.$": "$.Cause"
        },
        "TopicArn": "arn:aws:sns:us-east-1:XXXXXXXXXXXXX:Notificaiton"
      },
      "End": true
    }
  }
}

введите описание изображения здесь

0 голосов
/ 09 июля 2020

Эта строка уже добавляет объект исключения к пути 'error'.

 "ResultPath": "$.error"

Нам просто нужно передать '$' в задачу Message. $ В SNS, входные данные и сведения об ошибке будут отправлены в SNS .

{
   "TopicArn":"${SnsTopic}",
   "Message.$":"$"
}

, если мы не хотим, чтобы входные данные Lambda добавлялись к электронному письму, мы должны пропустить ResultPath или указать только «$» в качестве ResultPath, входной объект игнорируется.

"ResultPath": "$"
...