AWS Step Functions调用Lambda报错:函数角色无法被Lambda假定
问题分析与解决方案
问题根源
错误提示The role defined for the function cannot be assumed by Lambda,说明你的Lambda函数Test自身的执行角色配置有误——Lambda服务无法扮演该角色来运行函数。注意:你创建状态机时生成的角色是给Step Functions用的,和Lambda自身的执行角色是两个独立角色,不要混淆。
具体修复步骤
定位Lambda的执行角色
- 打开Lambda控制台,找到
Test函数,进入「配置」→「权限」标签,复制「执行角色」的ARN。 - 打开IAM控制台,搜索并进入该角色页面。
- 打开Lambda控制台,找到
修复角色的信任关系
- 切换到「信任关系」标签,点击「编辑信任策略」。
- 替换为以下策略(确保Lambda服务能合法扮演该角色):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } - 保存策略。
确认Step Functions角色的权限(额外检查)
- 虽然当前错误不来自这里,但需确保状态机的角色拥有必要权限:
- 对
CustomerOrderTable的dynamodb:PutItem权限 - 对
Test函数的lambda:InvokeFunction权限
- 对
- 可在IAM中给状态机角色添加如下权限策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "dynamodb:PutItem", "Resource": "arn:aws:dynamodb:eu-central-1:597598337678:table/CustomerOrderTable" }, { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:eu-central-1:597598337678:function:Test" } ] }
- 虽然当前错误不来自这里,但需确保状态机的角色拥有必要权限:
状态机代码优化(可选)
- Lambda调用的
FunctionName中,建议移除$LATEST,直接使用函数基础ARN:arn:aws:lambda:eu-central-1:597598337678:function:Test,避免调用未发布的开发版本。
- Lambda调用的
内容的提问来源于stack exchange,提问作者Ettore Pelosato
相关产品推荐
相关产品推荐

