amazon-web-services - 从 API Gateway 调用 AWS Step Function 同步 Express Workflow 并从响应输出中消除状态机详细信息
问题描述
我一直在搞乱步进函数,并找到了一个很好的解决方案来编排使用新的同步快速工作流从 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
}
解决方案
我有同样的问题,并询问了一些内部 AWS 人员,他们说此时无法更改输出。
就像您建议的那样,解决方法是 API Gateway -> Lambda -> Step Function 而不是 API Gateway -> Step Function。
推荐阅读
- python - 在python中将文本文件转换为字典
- python-3.x - 将多个输出放入一个列表
- angular - 如何检测离子5中不同页面上的离子菜单关闭事件
- flutter - 布尔返回 null - 颤振
- python - Python、pandas 和 NLP:通过根据其他列中的值划分文本来创建语料库
- javascript - Javascript DOM 双向扩展文本选择一个词
- spring-boot - 将 SuppressWarnings 添加到 Spring 控制器生成 404 未找到
- cart - 我的大型商务创建购物车 API 调用失败,因为我的产品选项未分配值。我怎样才能给它赋值?
- git - 访问不同的ip或host时如何指定不同的git账号?
- javascript - react-select 在选择选项改变时清除其他输入字段的值(状态)(onChange)