python - 当步骤函数python中某些事情失败时重试逻辑
问题描述
我有一个需要重新运行该功能的场景,我该怎么做。
def test_cpbucket():
res = s3.copy_object(
Bucket = 'bucket-name',
CopySource: 'bucket-name/hello/21-01-2020-12-23-00/testing.ddl',
Key: 'hello/21-01-2020-12-23-00/testing.ddl',
ACL: 'public-read'
)
在上面的示例中,我将对象复制到同一位置,以便它可以触发我的 lambda 函数。
当 lambda 函数失败时,我需要重新运行 copy s3 的这个函数。我怎样才能做到这一点 ?
解决方案
你可以尝试类似下面的步骤功能。 阶跃函数定义
脚步 :
- 从 s3-copy-task 开始 - 它执行 lambda。
- s3-copy-task-choice - 做出选择 - 重新运行,成功,失败。它根据 LastEvaluatedKey 和步骤 1 中 lambda 函数返回的异常变量做出决定。
- s3-copy-task-fail - 如果整个过程失败,可以在这里执行一些后处理或清理任务。
- s3-copy-task-success - 如果整个过程成功,可以在这里执行一些后处理或清理任务。
步骤功能代码如下,
{
"StartAt": "s3-copy-task",
"States": {
"s3-copy-task": {
"Next": "s3-copy-task-choice",
"Retry": [
{
"ErrorEquals": [
"Lambda.ServiceException",
"Lambda.AWSLambdaException",
"Lambda.SdkClientException"
],
"IntervalSeconds": 2,
"MaxAttempts": 6,
"BackoffRate": 2
}
],
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Parameters": {
"FunctionName": "arn:aws:lambda:eu-west-1:474496007096:function:ph_offer-synchronization-dev-query-dynamodb-fn",
"Payload.$": "$"
}
},
"s3-copy-task-choice": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.Payload.exception",
"StringEquals": "true",
"Next": "s3-copy-task-fail"
},
{
"Variable": "$.Payload.LastEvaluatedKey",
"StringEquals": "EMPTY",
"Next": "s3-copy-task-success"
}
],
"Default": "s3-copy-task"
},
"s3-copy-task-fail": {
"Type": "Fail",
"Cause": "Error during lambda processing"
},
"s3-copy-task-success": {
"Type": "Succeed"
}
}
}
推荐阅读
- python - Python中的数据争吵,根据某些条件计算值
- rust - 如何将 future::join_all() 转换为使用 FuturesUnordered?
- python-3.x - 代替
熊猫数据框中带有空字符串的值 - oracle - 向多个接收者发送电子邮件程序
- javascript - React 测试库如何测试按钮点击调度动作
- javascript - Firebase Cloud Functions 日志错误错误:进程退出,代码 16 和错误:4 DEADLINE_EXCEEDED:已超过截止日期
- windows - 如何获取 Windows 资源管理器使用的默认字体 (TTF)?
- python - 如何在文件夹中找到相同的文件名,然后将重复项移动到 Python 中的不同文件夹?
- c - 如何在引导程序中使用 fexec 编译和运行 C 程序?
- android - Android API 31,如何获取SSID?