Serverless工作流异步调用fc未回调,怎么解决?244170f6-e7b6-405b-a616-a384b377347e 这是执行名称 杭州地域
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您提供的信息,Serverless工作流在异步调用函数计算(FC)时未收到回调。这可能是由于以下原因导致的: 1. 权限配置问题:函数计算未正确授予回调Serverless工作流的权限。 2. 任务令牌未正确传递:在异步调用中,任务令牌(taskToken
)未正确传递到函数计算。 3. 函数计算执行失败或未触发回调:函数计算任务可能未成功执行,或者未调用ReportTaskSucceeded
或ReportTaskFailed
接口通知工作流。 4. 超时或网络问题:回调请求可能因超时或网络问题未能到达Serverless工作流。
以下是针对上述可能原因的详细排查和解决步骤。
确保函数计算已正确授予回调Serverless工作流的权限。具体权限策略如下:
{
"Statement": [
{
"Effect": "Allow",
"Action": [
"fnf:ReportTaskSucceeded",
"fnf:ReportTaskFailed"
],
"Resource": [
"*"
]
}
],
"Version": "1"
}
在异步调用中,任务令牌(taskToken
)需要正确传递到函数计算。请检查您的流程定义文件(FDL),确保inputMappings
中正确映射了taskToken
:
inputMappings:
- target: taskToken
source: $context.task.token
taskToken
,确认其是否被正确接收。taskToken
,请检查流程定义文件中的inputMappings
配置。函数计算任务可能未成功执行,或者未调用ReportTaskSucceeded
或ReportTaskFailed
接口通知工作流。请按以下步骤排查: - 查看函数计算日志: 1. 登录阿里云控制台,进入函数计算服务。 2. 找到对应函数,查看其执行日志,确认任务是否成功执行。 3. 如果任务失败,请修复代码逻辑并重新部署。 - 确认回调接口调用: 函数计算任务完成后,需调用以下接口通知Serverless工作流:
POST /reportTaskSucceeded
{
"taskToken": "your-task-token",
"output": "your-output"
}
或
POST /reportTaskFailed
{
"taskToken": "your-task-token",
"error": "your-error-message"
}
如果回调请求因超时或网络问题未能到达Serverless工作流,请按以下步骤排查: - 检查回调超时时间: 在流程定义文件中,确认waitForCallback
模式的超时时间是否合理。例如:
timeoutSeconds: 3600
如果超时时间过短,可能导致回调失败。 - 检查网络连通性: 确保函数计算与Serverless工作流之间的网络连通性正常。如果使用VPC环境,请检查安全组和路由表配置。
如果以上步骤均未解决问题,建议开启函数计算的有状态异步调用功能,以增强任务执行的可观测性和操作能力。具体操作如下: - 开启有状态异步调用: 1. 登录阿里云控制台,进入函数计算服务。 2. 找到对应函数,开启“有状态异步调用”功能。 - 更新流程定义文件: 在流程定义文件中,添加StatefulAsyncInvocationID
参数:
serviceParams:
InvocationType: Async
StatefulAsyncInvocationID: $.id
244170f6-e7b6-405b-a616-a384b377347e
的执行记录,查看其详细日志和状态信息。通过以上步骤,您可以系统性地排查并解决Serverless工作流异步调用函数计算未回调的问题。