json AWS stepfunctions -从lambda函数传递和阅读变量

agxfikkp  于 2023-06-25  发布在  其他
关注(0)|答案(2)|浏览(92)

我试图将lambda函数的输出读入步长函数中的变量。lambdas的默认输出是

return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

我想返回的是一个像这样的JSON对象

{
            "version": version,
            "bucket": bucket
        }

其中版本和桶名从lambda传递。在我的step函数中,我试图捕获它并将其插入到一个s3 url中,如下所示:

"S3Uri.$": "States.Format('s3://{}/path/to/script/{}/script.py',$.bucket, $.version)"

然而,我正在努力从lambda获得正确的输出,以及如何在步骤函数中获取值。我试过了

return {
        'statusCode': 200,
        'body': json.dumps({
        "version": version,
        "bucket": bucket
    })       }

以及将JSON对象构造成字符串到主体的各种方法,例如

"{\"version\": \"" + version + "\",\"bucket\": \"" + bucket + "\"}"

但我找不到合适的组合,工作总是失败。下面是一个错误消息示例
在输入“{“statusCode””中找不到字段“$.bucket”的JsonPath参数:200,“身体”:“{\“版本":\“v0-1",\“存储桶":“sagemaker-us-west-2-removed”}“}”
我应该如何构造lambda输出,以及相应的step函数变量来传递值?同样,我希望lambda告诉step函数使用了什么bucket和版本,然后让step函数将这些值插入到s3 url字符串中。
编辑:这里是完整的错误消息之一的尝试

{
  "error": "States.Runtime",
  "cause": "An error occurred while executing the state 'Postproc' (entered at the event id #38). The function 'States.Format('s3://{}/AAPM/AAPM_2207/prod/{}/meta/scripts/preproc/aapm-postproc.py',$.bucket, $.version)' had the following error: The JsonPath argument for the field '$.bucket' could not be found in the input '{\"statusCode\": 200, \"body\": \"{\\\"version\\\": \\\"v0-1\\\", \\\"bucket\\\": \\\"sagemaker-us-west-2-removed\\\"}\"}'"
}
nx7onnlm

nx7onnlm1#

就像在这个answer中一样,诀窍只是摆脱json转储。

return {
        'statusCode': 200,
        'body': {
        "version": version,
        "bucket": bucket
                 }       
        }

我可以用$.bucket,$.version访问它们

brccelvz

brccelvz2#

这是我的第一篇stackoverflow文章,但你可以尝试的另一件事是在你的任务状态上使用ResultSelector来调用你的lambda,并使用内部函数States.StringToJson来取消lambda响应的字符串化。
参考:https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-intrinsic-functions.html#asl-intrsc-func-json-manipulate

相关问题