AWS Step Function 同步快速工作流从 API 网关调用并从响应输出中消除状态机详细信息
AWS Step Function synchronous Express Workflow calling from API Gateway and eliminating state machine details from response output
我一直在处理步骤函数,并找到了一个很好的解决方案来使用新的同步快速工作流来编排从 API 网关调用的 lambda,但是 运行 遇到了一个我无法调整的问题输出上的外部 json 。我可以使用 ResultPath 和 OutputPath 修改 json 响应的“输出”节点中的所有内容,但其他所有内容都会保留并发送回用户(不需要的信息,如 BillingDetails)。
我必须使用 HTTP API 网关,因为它是唯一可以同步调用步骤函数的网关,而且您不能在那里转换响应,所以我想看看是否有任何方法可以无需在 Step Function 之上创建一些额外的层即可转换此响应,这首先会破坏使用它们的整个目的。
如何让步进函数仅return“输出”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
}
我有同样的问题并询问了一些 AWS 内部人员,他们说此时无法更改输出。
按照您的建议,解决方法是 API 网关 -> Lambda -> Step Function 而不是 API 网关 -> Step Function。
我一直在处理步骤函数,并找到了一个很好的解决方案来使用新的同步快速工作流来编排从 API 网关调用的 lambda,但是 运行 遇到了一个我无法调整的问题输出上的外部 json 。我可以使用 ResultPath 和 OutputPath 修改 json 响应的“输出”节点中的所有内容,但其他所有内容都会保留并发送回用户(不需要的信息,如 BillingDetails)。
我必须使用 HTTP API 网关,因为它是唯一可以同步调用步骤函数的网关,而且您不能在那里转换响应,所以我想看看是否有任何方法可以无需在 Step Function 之上创建一些额外的层即可转换此响应,这首先会破坏使用它们的整个目的。
如何让步进函数仅return“输出”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
}
我有同样的问题并询问了一些 AWS 内部人员,他们说此时无法更改输出。
按照您的建议,解决方法是 API 网关 -> Lambda -> Step Function 而不是 API 网关 -> Step Function。