【问题标题】:Retry Logic when some things fails in step function python当步骤函数python中某些事情失败时重试逻辑
【发布时间】:2021-09-25 04:57:51
【问题描述】:

我有一个需要重新运行函数的场景,我该怎么做。

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 的这个函数。我该怎么做?

【问题讨论】:

标签: python python-2.7 amazon-s3 aws-lambda aws-step-functions


【解决方案1】:

您可以尝试以下类似的步骤功能。 step function definition

步骤:

  1. 从执行 lambda 的 s3-copy-task 开始。
  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"
    }
  }
}

【讨论】:

  • 感谢您的回复。在这种情况下,我认为我们不会重新运行 s3 复制功能。请帮助我理解@avisek hazra
  • 感谢您的逻辑,是的,根据我的工作,重试逻辑有一些变化。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-03
  • 2022-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多