[英]AWS Step function parameters are not moving to the next step
我正在运行一个包含许多不同步骤的步骤 function,但我仍然停留在第二步。 第一步是 Java Lambda 获取所有输入参数并执行它需要执行的操作。 lambda 返回 null 因为它不需要返回任何东西。
下一步是调用 API 网关,它需要使用 URL 中的参数之一。但是,我看到 URL 都没有所需的参数,我实际上也没有将参数获取到该步骤中。 (“输入”:TaskStateEntered 下的 null)
API 网关步骤如下所示:(我还尝试了 "Payload.$": "$"而不是"Input.$": "$" )
"API Gateway start": {
"Type": "Task",
"Resource": "arn:aws:states:::apigateway:invoke",
"Parameters": {
"Input.$": "$",
"ApiEndpoint": "aaaaaa.execute-api.aa-aaaa-1.amazonaws.com",
"Method": "GET",
"Headers": {
"Header1": [
"HeaderValue1"
]
},
"Stage": "start",
"Path": "/aaa/aaaa/aaaaa/aaaa/$.scenario",
"QueryParameters": {
"QueryParameter1": [
"QueryParameterValue1"
]
},
"AuthType": "IAM_ROLE"
},
"Next": "aaaaaa"
},
但是当我的步骤 function 到达这个阶段时它失败了,我在日志中看到以下内容:
{
"name": "API Gateway start",
"input": null,
"inputDetails": {
"truncated": false
}
}
最终:
{
"error": "States.Runtime",
"cause": "An error occurred while executing the state 'API Gateway start' (entered at the event id #9). Unable to apply Path transformation to null or empty input."
}
我在这里错过了什么? 请注意,部分路径是我在步骤 function 执行时输入的值。 ("路径": "/aaa/aaaa/aaaaa/aaaa/$.scenario")
编辑:
按照@lynkfox 的要求,我在 API 网关步骤之前添加了 lambda 定义:为了回答这个问题,是的,它是标准的,我没有看到任何输入。
"Run tasks": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"OutputPath": "$.Payload",
"Parameters": {
"Payload.$": "$",
"FunctionName": "arn:aws:lambda:aaaaaa-1:12345678910:function:aaaaaaa-aaa:$LATEST"
},
"Retry": [
{
"ErrorEquals": [
"Lambda.ServiceException",
"Lambda.AWSLambdaException",
"Lambda.SdkClientException"
],
"IntervalSeconds": 2,
"MaxAttempts": 6,
"BackoffRate": 2
}
],
"Next": "API Gateway start"
},
所以是的,正如我评论的那样,我认为问题出在您的 lambda 任务定义的 OutputPath 上。 这就是说,从这个 lambda(什么都不是。)中取出任何东西,并切断除关键有效负载之外的所有内容。
好吧,你没有返回任何东西,所以这不会导致任何东西被发送到下一个任务。
我假设你的传入通风口已经在 Json 中有一个名为 Payload 的密钥,所以你要做的是从你的 lambda 中删除OutputPath
。它不需要返回任何东西,所以它不需要 Output 或结果小路。
接下来,在你的 API 任务中,再次假设你的初始化事件有一个有效负载键,你将有"InputPath": "$.Payload"
- 如果你在初始化 json 事件中有你的标题或参数,那么你可以参考那些键在定义的参数部分。
每项 AWS 服务都以事件开始并以事件结束。 每个事件都是 JSON object。(我相信你知道)。 对于 State 机器,这将继续 - State 机器/步骤 Function 只是用于将事件从一个任务传递到下一个任务的 controller。
因此,任何给定的任务都可以有一个 InputPath、OutputPath 或 Result Path——这三个定义参数可以决定哪些值 go 进入任务,哪些值发送到下一个任务。 根据定义,State 机器用于在任务之间维护 State,这些有助于控制“状态”(并且在任何给定时间几乎只有一个“状态”,事件指向下一个任务)
ResultPath 是任务在整个事件中放置数据的位置。 如果您单独放置ResultPath: "$.MyResult"
它会将此键附加到传入事件
如果您添加 OutputPath,它只会将该键从任务的 output 事件传递到 Step Functions 中的下一步。
这三个给你很多控制权。
想要将事件带入 Lambda 并以完全不同的方式响应 - 您不需要传入数据 - 您将 OutputPath 和 ResultPath 组合为相同的值(并且您的 Lambda 需要以 Json 对象响应)然后您可以替换活动批发。
如果您有某个值的 ResultPath 和OutputPath: "$."
您使用包含任务结果的单个键创建一个新的 json object(键是 ResultPath 中设置的定义
InputPath 允许您设置进入任务的内容。 我不是 100% 确定,但我很确定它不会从链中的下一个任务中删除任何内容。
可以在此处找到更多信息,但它可能会变得非常混乱。
我的快速指南:
ResultPath 本身如果你想 append 数据到事件
ResultPath + OutputPath 相同的值,如果你想切断输入并且只让任务的 output 继续(并且它返回一个 JSON 样式对象)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.