如何解决获取步进函数执行结果
我是 AWS 的新手,正在为阶梯函数苦苦挣扎。
我的工作流程是这样的:
client('search_word')-> api gateway -> lambda 函数(调用 step 函数)-> step 函数(生成搜索输出)-> client
import json
import boto3
import uuid
client = boto3.client('stepfunctions')
def lambda_handler(event,context):
transactionId = str(uuid.uuid1())
print(transactionId)
input = {'TransactionId':transactionId,'text':'search_word'}
response = client.start_execution(
stateMachineArn='arn:aws:states:ap-northeast-2:xxxxxxxxxx:stateMachine:MyStateMachine',name=transactionId,input=json.dumps(input)
)
print(response)
return {
'statusCode': 200,'body': json.dumps('Hello from Lambda!')
}
我想从 step 函数中获取执行结果并将其传递给客户端。但我不知道该怎么做。
工作流程不一定是我建议的,只要我能把step function的执行结果给客户端就行了。
这是我的步进函数。
{
"Comment": "A simple AWS Step Functions state machine.","StartAt": "Tokenize","States": {
"Tokenize": {
"Type": "Task","Resource": "arn:aws:lambda:ap-northeast-2:xxxxxxxx:function:search_ko","Next": "Search"
},"Search": {
"Type": "Task","Resource": "arn:aws:lambda:ap-northeast-2:xxxxxxx:function:BM-25-Get-Index","End": true
}
}
}
请帮忙。
提前致谢!
解决方法
您正在尝试将同步的 api 网关与异步的步骤函数结合起来。如果您使用步进函数,您的流程应该是异步的。您不会通过单个 API 调用获得响应。您将需要创建另一个 API,该 API 将继续“轮询” step 函数以查看它是否已成功执行以及响应是什么。
这是您可以尝试的流程。
- 用于初始化 step 函数的 API 调用。您可以尝试将 API 网关 post 调用与您的 step 函数直接连接,看看它是否返回执行 arn 作为响应。如果是这样,您将不需要 lambda。如果没有,则坚持使用当前的 lambda 并使其返回执行 arn。
- 您的应用然后获取执行 arn 并使用它定期调用另一个 API。如果您认为完成单步函数执行所需的时间少于 30 秒(API 网关超时限制),您可以定期调用 API 或让后端的 lambda 继续轮询以获取响应。
- 您的第二个 API/Lambda 然后使用 DescribeExecution 查找执行结果,并返回响应。
编辑: 如果您认为您的 step 函数将在 30 秒内始终如一地执行,您可以尝试使用单个 lambda 来启动 step 函数,然后使用 DescribeExecution 继续轮询它以完成。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。