在阈值时间范围内未启动步骤时的 Sns 邮件通知

Sns mail notification when a step is not kicked off within a threshold timeframe

我有一个通过step函数提交的emr步骤。在步骤 运行 中,我可以看到任务已提交,但 emr 步骤未执行且 emr 控制台没有任何信息。

  1. 我该如何调试它?
  2. 当步骤未在阈值时间范围内开始执行时,如何发送 sns?在我的例子中,步骤函数显示已提交 emr 任务,但 emr 控制台和管道上没有信息很长 运行ning没有失败超过半小时
  1. 您可以通过Step Functions执行日志开始调试过程,找出失败的具体步骤,稍后,您可以继续寻找对于 EMR 控制台或失败的特定服务。通常当 EMR 步骤没有出现在 EMR 控制台中时,是由于调用 EMR 步骤时引发的异常引起的运行时错误。

  2. 对于这种情况,您可以使用 Step Functions 的错误处理,使用 CatchTimeout 字段,您可以在 AWS 文档中找到更多详细信息 here. 基本上你需要添加这个字段如下所示:

{
    "StartAt": "EmrStep",
       "States": {
          "EmrStep": {
             "Type": "Task",
             "Resource": "arn:aws:emr:execute-X-step",
             "Comment": "This is your EMR step",
             "TimeoutSeconds": 10,
             "Catch": [ {
                "ErrorEquals": ["States.Timeout"],
                "Next": "ShutdownClusterAndSendSNS"
             } ],
             "End": true
          },
          "ShutdownClusterAndSendSNS": {
             "Type": "Pass",
             "Comment": "This step handles the timeout exception raised",
             "Result": "You can shutdown the EMR cluster to avoid increased cost here and later send a sns notification!",
             "End": true
          }
}

注意:要捕获超时异常,你必须捕获错误States.Timeout,但你也可以为其他类型的错误定义相同的捕获字段。