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

使用paypload从StepFunction调用lambda时出错

如何解决使用paypload从StepFunction调用lambda时出错

我有一个 lambda,它是 StepFunction 状态机的步骤之一,lambda 处理程序如下所示:

def lambda_handler(event,context):

    year = event['year'] #payload
    month = event['month'] #payload
    example_function(year,month)

如果我使用有效负载在 Lambda 本身中开始运行,则此 lambda 执行成功:

{
  "year": "2019","month": "06"
}

但是,如果我开始一个 stepfunction 运行,它将失败并显示错误

[ERROR] KeyError: 'year'
Traceback (most recent call last):
  File "/var/task/xxx.py",line 34,in lambda_handler
    year = event['year']

我的阶跃函数定义是:

{
    "Comment": "xxxxxxxxx","StartAt": "invoke lambda","States": {
      "invoke lambda" : {
        "Type": "Task","Resource": "arn:aws:states:::lambda:invoke","Parameters": {
          "FunctionName":"xxxxxxxxxx","Payload": {
            "Input": {
              "year": "2019","month": "06"
            }
          }
        }
        "End": true
      }
    }
  }

我不知道如何调试和解决这个问题,有人可以帮忙吗?

解决方法

有两种方法可以从 step 函数调用 lambda 函数。

第一种方法,直接将资源名称指定为 lambda Arn 并将整个输入传递给参数。这将给定的输入按原样传递给 Lambda

{
   "StartAt":"invoke-lambda","States":{
      "invoke-lambda":{
         "End":true,"Type":"Task","Resource":"arn:aws:lambda:us-east-1:660008888333:function:HelloWorld","Parameters":{
            "year":"2019","month":"06"
         }
      }
   }
}

使用资源 lambda:invoke 和 Payload 和 Json body 的第二种方法(无需包裹在 Input 中)

{
   "StartAt":"invoke-lambda","Resource":"arn:aws:states:::lambda:invoke","Parameters":{
            "FunctionName":"arn:aws:lambda:us-east-1:660008888333:function:HelloWorld","Payload":{
               "year":"2019","month":"06"
            }
         }
      }
   }
}

如果 Lambda 的输入来自上一步或从输入到步骤函数输入,我们可以使用 "Payload.$": "$" 甚至 "Payload.$": "$.subPath"(传递部分 json) 另外建议为AWS引起的异常触发的异常添加Retry。

{
  "StartAt": "invoke-lambda","States": {
    "invoke-lambda": {
      "End": true,"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:us-east-1:660008888333:function:HelloWorld","Payload.$": "$","InvocationType": "RequestResponse"
      }
    }
  }
}

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