我需要为 stepfunctions 制作一个 api,但问题是,我如何获得第一个的输出作为下一个的输入?
这是我目前所拥有的:
{
"Comment": "Match",
"StartAt": "Search",
"States": {
"Search": {
"Type": "Task",
"Resource": "arn:aws:states:::ecs:runTask.sync",
"Parameters": {
"Cluster": "Search-cluster",
"TaskDefinition": "Search-task",
"Overrides": {
"ContainerOverrides": [
{
"Name": "search",
"Command.$": "$.commands"
}
]
}
},
"Next": "Save"
},
"Save": {
"Type": "Task",
"Resource": "arn:aws:states:::ecs:runTask.sync",
"Parameters": {
"Cluster": "save-cluster",
"TaskDefinition": "save-task",
"Overrides": {
"ContainerOverrides": [
{
"Name": "save",
"Command.$": "$.commands"
}
]
}
},
"Next": "Send"
},
"Send": {
"Type": "Task",
"Resource": "arn:aws:states:::ecs:runTask.sync",
"Parameters": {
"Cluster": "send-cluster",
"TaskDefinition": "send-task",
"Overrides": {
"ContainerOverrides": [
{
"Name": "send",
"Command.$": "$.commands"
}
]
}
},
"End": true
}
}
}
最佳答案
我遇到了同样的问题并联系了 AWS Support。被告知无法像使用 Lambda 那样直接返回 Fargate 任务的结果。一种选择是将您的任务结果存储在单独的数据库(如 DynamoDB)中,并编写一个 Lambda 来检索该值并使用上一个任务的输出更新您的输入 JSON。
旁注:在您的 ASL 中,您应该考虑使用 ResultPath
。默认行为是用输出(结果)替换输入节点。意思是,如果在您的输入 JSON 中有您想要在后续状态中使用的值,并且如果您没有指定 ResultPath
,它们将在第一个状态后丢失。引用:https://docs.aws.amazon.com/step-functions/latest/dg/input-output-resultpath.html#input-output-resultpath-amend
关于java - 使用 fargate 作为 worker 的 AWS Step Functions 工作流程 - 如何将输出发送到下一步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54981911/