重试尝试之间的 Aws StepFunction 通知
Aws StepFunction Notification in between Retry attempts
Aws Step 函数,假设我们有一个具有以下重试逻辑的任务,它将在 10 秒、1 分钟、6 分钟、36 分钟、3.6 小时后重试 6 次,最后在 21.6 小时后重试。但是,我想直接向 SNS 发送通知或设置警报,当 4 次尝试后重试失败时,采取措施并解决后端问题。步骤重试有可能吗?我试图查看 step 和 Lambda 的 Cloudwatch 日志,看看日志中是否存在任何差异,以确定它失败了多长时间或尝试了多少次尝试等来创建过滤器。我还没有找到任何好的解决方案。有什么我可以尝试的吗?
{
"Type":"Task",
"Resource":"${MyLambda}",
"End":true,
"Retry":[
{
"ErrorEquals":[
"States.ALL"
],
"IntervalSeconds":10,
"MaxAttempts":6,
"BackoffRate":6
}
]
},
恐怕步进函数重试逻辑中没有提供您正在寻找的功能。我可以想到两种可能的解决方法。
选项 1
有一个 lambda,该 lambda 由步骤函数 lambda 中的错误 CloudWatch 日志触发(您可以按照 this 示例创建订阅过滤器)。此 lambda 将获取您的步进函数的所有 运行 次执行,并在任何 运行 长于指定时间时发出警报。
选项 2
在您的步骤函数 lambda 中,使用步骤函数 arn 和执行 ID 包装您的错误日志(在您的 lambda 中获取这些信息的一种方法是通过 context object)。有一个单独的 lambda,该 lambda 由步骤函数 lambda 中的错误 CloudWatch 日志触发。使用步进函数 arn 和执行 ID,此 lambda 可以根据步进函数执行处于 运行 状态的时间执行警报。
客户端调用示例[=34=](其他客户端也应该提供类似的方法)
- Boto3 method 你可以用来获取所有 运行 步函数执行
*遗憾的是,获取步骤函数执行的客户端方法仅 return 开始日期(不是时间)。如果您可以为步骤函数执行创建命名标准,则可以从执行本身的名称推断开始时间。 (这也可能是避免 运行 尝试调用具有重复执行名称的步骤函数时出现的错误的好方法)
希望对您有所帮助!
我花了大约 4 个小时才找到与您类似的问题的解决方案。
我需要在第一次尝试失败后发送电子邮件通知。这是我为让它发挥作用所做的工作:
{
"Type": "Task",
"Resource": "${MyLambda}",
"End": true,
"Parameters": {
"retryCount.$": "$$.State.RetryCount"
},
"Retry": [
{
"ErrorEquals": [
"States.ALL"
],
"IntervalSeconds": 10,
"MaxAttempts": 6,
"BackoffRate": 6
}
]
},
然后在您的 lambda 函数中编写如下内容:
export const handler = (event) => {
if (event.retryCount) {
// send email notification
}
};
我从 AWS 文档中获取信息:https://docs.aws.amazon.com/step-functions/latest/dg/input-output-contextobject.html
Aws Step 函数,假设我们有一个具有以下重试逻辑的任务,它将在 10 秒、1 分钟、6 分钟、36 分钟、3.6 小时后重试 6 次,最后在 21.6 小时后重试。但是,我想直接向 SNS 发送通知或设置警报,当 4 次尝试后重试失败时,采取措施并解决后端问题。步骤重试有可能吗?我试图查看 step 和 Lambda 的 Cloudwatch 日志,看看日志中是否存在任何差异,以确定它失败了多长时间或尝试了多少次尝试等来创建过滤器。我还没有找到任何好的解决方案。有什么我可以尝试的吗?
{
"Type":"Task",
"Resource":"${MyLambda}",
"End":true,
"Retry":[
{
"ErrorEquals":[
"States.ALL"
],
"IntervalSeconds":10,
"MaxAttempts":6,
"BackoffRate":6
}
]
},
恐怕步进函数重试逻辑中没有提供您正在寻找的功能。我可以想到两种可能的解决方法。
选项 1
有一个 lambda,该 lambda 由步骤函数 lambda 中的错误 CloudWatch 日志触发(您可以按照 this 示例创建订阅过滤器)。此 lambda 将获取您的步进函数的所有 运行 次执行,并在任何 运行 长于指定时间时发出警报。
选项 2
在您的步骤函数 lambda 中,使用步骤函数 arn 和执行 ID 包装您的错误日志(在您的 lambda 中获取这些信息的一种方法是通过 context object)。有一个单独的 lambda,该 lambda 由步骤函数 lambda 中的错误 CloudWatch 日志触发。使用步进函数 arn 和执行 ID,此 lambda 可以根据步进函数执行处于 运行 状态的时间执行警报。
客户端调用示例[=34=](其他客户端也应该提供类似的方法)
- Boto3 method 你可以用来获取所有 运行 步函数执行
*遗憾的是,获取步骤函数执行的客户端方法仅 return 开始日期(不是时间)。如果您可以为步骤函数执行创建命名标准,则可以从执行本身的名称推断开始时间。 (这也可能是避免 运行 尝试调用具有重复执行名称的步骤函数时出现的错误的好方法)
希望对您有所帮助!
我花了大约 4 个小时才找到与您类似的问题的解决方案。
我需要在第一次尝试失败后发送电子邮件通知。这是我为让它发挥作用所做的工作:
{
"Type": "Task",
"Resource": "${MyLambda}",
"End": true,
"Parameters": {
"retryCount.$": "$$.State.RetryCount"
},
"Retry": [
{
"ErrorEquals": [
"States.ALL"
],
"IntervalSeconds": 10,
"MaxAttempts": 6,
"BackoffRate": 6
}
]
},
然后在您的 lambda 函数中编写如下内容:
export const handler = (event) => {
if (event.retryCount) {
// send email notification
}
};
我从 AWS 文档中获取信息:https://docs.aws.amazon.com/step-functions/latest/dg/input-output-contextobject.html