首页 > 解决方案 > 当步骤函数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 的这个函数。我怎样才能做到这一点 ?

标签: pythonpython-2.7amazon-s3aws-lambdaaws-step-functions

解决方案


你可以尝试类似下面的步骤功能。 阶跃函数定义

脚步 :

  1. 从 s3-copy-task 开始 - 它执行 lambda。
  2. s3-copy-task-choice - 做出选择 - 重新运行,成功,失败。它根据 LastEvaluatedKey 和步骤 1 中 lambda 函数返回的异常变量做出决定。
  3. s3-copy-task-fail - 如果整个过程失败,可以在这里执行一些后处理或清理任务。
  4. 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"
    }
  }
}


推荐阅读