微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当步骤函数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 函数失败时,我需要重新运行此复制 s3 函数。我该怎么做?

解决方法

你可以尝试类似下面的步骤函数。 step function definition

步骤:

  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"
    }
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。