问题描述
我无法使用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 (将#修改为@)