【发布时间】:2021-04-21 14:43:43
【问题描述】:
我一直在搞乱步进函数,并找到了一个很好的解决方案来编排使用新的同步快速工作流从 API 网关调用的 lambda,但遇到了一个问题,我无法调整输出的外部 json。我可以使用 ResultPath 和 OutputPath 修改 json 响应的“输出”节点中的所有内容,但其他所有内容都会保留并发送回用户(不需要的信息,例如 BillingDetails)。
我必须使用 HTTP API 网关,因为它是唯一可以同步调用步骤函数的网关,并且您无法在那里转换响应,所以我正在寻找是否有任何方法可以转换此响应而无需在 Step Function 之上创建一些额外的层,这会破坏首先使用它们的整个目的。
如何让 Step Function 只返回“输出”json 节点并过滤掉其他所有内容?
Step 函数定义如下所示:
{
"Comment": "Simple Lambda Function",
"StartAt": "Invoke Lambda function",
"States": {
"Invoke Lambda function": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"ResultPath": "$",
"OutputPath": "$.Payload",
"Parameters": {
"FunctionName": "LAMBDA ARN",
"Payload": {
"input.$": "$"
}
},
"End": true
}
}
}
此状态机通过 API 网关的输出产生以下内容:
{
"billingDetails": {
"billedDurationInMilliseconds": 500,
"billedMemoryUsedInMB": 64
},
"executionArn": "ARN",
"input": "{\r\n \"sendToQueue\": \"true\",\r\n \"retryNumber\": 1,\r\n \"uploadFile\": \"testS3file\"\r\n }",
"inputDetails": {
"__type": "com.amazonaws.swf.base.model#CloudWatchEventsExecutionDataDetails",
"included": true
},
"name": "name",
"output": "{\"statusCode\":200,\"body\":\"{\\\"input\\\": {\\\"sendToQueue\\\": \\\"true\\\", \\\"retryNumber\\\": 1, \\\"uploadFile\\\": \\\"testS3file\\\"}}\"}",
"outputDetails": {
"__type": "com.amazonaws.swf.base.model#CloudWatchEventsExecutionDataDetails",
"included": true
},
"startDate": 1.618947563121E9,
"stateMachineArn": "ARN",
"status": "SUCCEEDED",
"stopDate": 1.618947563572E9
}
【问题讨论】:
标签: amazon-web-services aws-api-gateway aws-step-functions