amazon-web-services - 重试尝试之间的 Aws StepFunction 通知
问题描述
Aws Step 函数,假设我们有一个具有以下重试逻辑的任务,它将在 10 秒、1 分钟、6 分钟、36 分钟、3.6 小时后重试 6 次,最后在 21.6 小时后重试。但是,我想在 4 次尝试后重试失败时直接向 SNS 发送通知或设置警报,以采取措施并解决后端问题。步骤重试可以吗?我尝试查看步骤和 Lambda 的 Cloudwatch 日志,以查看日志中是否有任何差异,以确定它失败了多长时间或尝试了多少次尝试等来创建过滤器。我还没有找到任何好的解决方案。有什么我可以尝试的吗?
{
"Type":"Task",
"Resource":"${MyLambda}",
"End":true,
"Retry":[
{
"ErrorEquals":[
"States.ALL"
],
"IntervalSeconds":10,
"MaxAttempts":6,
"BackoffRate":6
}
]
},
解决方案
恐怕步进函数重试逻辑中没有提供您正在寻找的功能。我可以想到两种潜在的解决方法。
选项1
有一个 lambda,该 lambda 由步骤函数 lambda 中的错误 CloudWatch 日志触发(您可以按照此示例创建订阅过滤器)。此 lambda 将获取您的 step 函数的所有正在运行的执行,并在任何运行时间超过指定时间时发出警报。
选项 2
在您的 step function lambdas 中,使用 step function arn & execution id 包装您的错误日志(在您的 lambda 中获取这些错误日志的一种方法是通过context object)。有一个单独的 lambda,该 lambda 由您的步骤函数 lambda 中的错误 CloudWatch 日志触发。使用步进函数 arn 和执行 ID,此 lambda 可以根据步进函数执行处于运行状态的时间长短执行警报。
示例客户端调用(其他客户端也应该提供类似的方法)
- Boto3方法可用于获取所有正在运行的步骤函数执行
*可悲的是,获取步进函数执行的客户端方法仅返回开始日期(而不是时间)。如果您可以为步进函数执行创建命名标准,那么您可以从执行本身的名称推断开始时间。(这也可能是避免在尝试调用具有重复执行名称的步进函数时遇到错误的好方法)
希望这可以帮助!
推荐阅读
- sql - 从 2 个表中选择数据,UNPIVOT 第一个表并将其与其他表连接
- android - AndroidX中Phone Window和MenuPresenter有什么关系
- python-3.x - 在 Python string.format 中调用 datetime.strftime 失败
- html - 为什么 z-index 会阻止 div 中嵌入的项目被访问?
- react-native - React Native:有没有办法防止离开屏幕?
- python - 我在熊猫中有两列 sales_agent 和 deal_stage?
- bootstrap-5 - 在引导程序 5 中将内容放在占据 100% 视口的行下
- firebase - 为什么我们不能仅使用公共 apiKey 连接到 node.js 服务器上的 firestore
- sql - 同一个键有 2 个不同的值
- sorting - 如何在 Kotlin 中对包含双值的数组进行排序?