当步骤函数中某些事情失败时重试逻辑 python
Retry Logic when some things fails in step function 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 函数失败时,我需要重新运行 复制 s3 的这个函数。我该怎么做?
您可以尝试类似以下步骤的功能。
step function definition
步骤:
- 从执行 lambda 的 s3-copy-task 开始。
- s3-copy-task-choice - 做出选择 - 重新运行,成功,失败。它根据 LastEvaluatedKey 和从步骤 1 中的 lambda 函数返回的异常变量做出决定。
- s3-copy-task-fail - 如果整个过程失败,可以在此处执行某些 post 处理或清理任务。
- s3-copy-task-success - 如果整个过程成功,可以在此处执行一些 post 处理或清理任务。
步骤函数代码如下,
{
"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"
}
}
}
我有一个场景需要重新运行函数,我该怎么做。
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 函数失败时,我需要重新运行 复制 s3 的这个函数。我该怎么做?
您可以尝试类似以下步骤的功能。 step function definition
步骤:
- 从执行 lambda 的 s3-copy-task 开始。
- s3-copy-task-choice - 做出选择 - 重新运行,成功,失败。它根据 LastEvaluatedKey 和从步骤 1 中的 lambda 函数返回的异常变量做出决定。
- s3-copy-task-fail - 如果整个过程失败,可以在此处执行某些 post 处理或清理任务。
- s3-copy-task-success - 如果整个过程成功,可以在此处执行一些 post 处理或清理任务。
步骤函数代码如下,
{
"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"
}
}
}