使用EventBridge输入变压器时如何从状态机输出中提取属性

问题描述

我无法使用EventBridge服务将AWS状态机返回的值之一作为输入传递给Lambda。

我在AWS Step Functions中创建了一个状态机来为我们域中的特定问题建模。状态机完成后,我想从我的一个Lambda内部执行另一项操作。为此,我使用EventBridge创建了一条新规则:只要状态机完成,它就会通过特定的Json输入触发我的lambda。

我的问题是如何从状态机输出中提取属性并将其作为lambda输入的属性传递。

说我的状态机返回此信息:

{
    "usefulObject":{
        "usefulProperty":"value"
    },"anotherProperty":"anotherValue"
}

我想在我的lambda中接收以下有效负载:

{
    "property":"value"
}

最初,我认为我可以使用EventBridge规则上的“输入转换”选项来做到这一点,例如:

  • InputTransformer路径:
{"propertyValue":"$.usefulObject.usefulProperty"}
  • InputTransformer模板:
{"property":<propertyValue>}

但是,在测试期间,我意识到事件有效负载包含的数据比我的状态机输出多得多。实际上,状态机输出包装在此“事件容器”对象中,如下所示:

{
    "version": "0","id": "...","detail-type": "Step Functions Execution Status Change","source": "aws.states","account": "...","time": "2020-11-10T13:59:57Z","region": "us-east-1","resources": [
        "...myStateMachineArn..."
    ],"detail": {
        "executionArn": "...myStateMachineExecutionArn...","stateMachineArn": "...myStateMachineArn...","name": "ff72036a-2917-c657-80e7-2589b7b76d59","status": "SUCCEEDED","startDate": 1605016794597,"stopDate": 1605016797936,"input": "{\n  \"usefulObject\":{\n    \"usefulProperty\": \"value\"\n  },\n  \"anotherProperty\": \"anotherValue\"\n}","inputDetails": {
            "included": true
        },"output": "{\n  \"usefulObject\":{\n    \"usefulProperty\": \"value\"\n  },"outputDetails": {
            "included": true
        }
    }
}

如您所见,在实际事件有效负载中,我的状态机数据作为字符串化的Json值存储在output节点内。如果然后我将输入转换路径更改为以下内容:

{"propertyValue":"$.detail.output.usefulObject.usefulProperty"}

在转换后的输入中,property的结果为空。事实证明,JsonPath无法遍历作为Json有效负载一部分的字符串化值,并且搜索将失败。

如何从事件有效负载中的Json字符串中提取usefulProperty值,以便将其传递给我的lambda函数?有没有办法使用我所缺少的纯JsonPath做到这一点?也许有一种方法可以将AWS配置为不将有效负载转换为字符串,而只是使其成为整个事件有效负载的一部分?还有其他选择吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)