1
votes

Comment transmettre l'erreur AWS Lambda dans la notification AWS SNS via AWS Step Functions?

J'ai créé une fonction AWS Step qui déclenche un code python Lambda, se termine sans erreur si Lambda réussit, sinon appelle une rubrique SNS pour envoyer un message aux utilisateurs abonnés si Lambda échoue. Il fonctionne, mais le message a été corrigé. La fonction Step JSON est la suivante:

{
  "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
    }
  }
}

La seule chose est que je veux ajouter le message d'erreur d'échec à ma chaîne de message, ce que j'ai essayé, mais ne fonctionne pas comme prévu. P >

 Ex: La fonction step s'exécute en cas d'échec

Mais je reçois un mail comme suit:

 Courrier reçu a>

Comment s'y prendre?


5 commentaires

J'essaie également de faire de même, avez-vous trouvé la bonne façon de le faire? ajout d'une chaîne statique à la valeur du chemin


Oui je l'ai eu. Je posterai une réponse dans un moment.


Ce serait formidable si vous pouviez publier la réponse si vous la résolviez. J'ai les mêmes problèmes.


Bien sûr, je le ferai, cela a été résolu et fonctionne bien maintenant.


@carpa_jo vérifie ma réponse. Pardonnez le retard.


3 Réponses :


0
votes

Cette ligne ajoute déjà un objet d'exception au chemin "error".

"ResultPath": "$"

Il nous suffit de passer "$" à Message. $ à la tâche SNS, les détails d'entrée et d'erreur seront envoyés à SNS.

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

si nous ne voulons pas que l'entrée dans Lambda soit ajoutée dans l'e-mail, nous devons ignorer ResultPath ou avoir juste '$' comme ResultPath, l'objet d'entrée est ignoré .

 "ResultPath": "$.error"


0 commentaires

0
votes

Je pourrais résoudre le problème en utilisant "Error. $": "$ .Cause" .

Voici un exemple fonctionnel de la partie échec de la machine à états:

< pre> XXX

J'espère que cela vous aidera!


0 commentaires

0
votes

Voici la version complète du code

{
  "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
    }
  }
}

entrez la description de l'image ici


0 commentaires