使用Boto3创建Lambda角色时遇无法被Lambda承担的错误如何解决
解决Lambda角色无法被Assume的问题
错误信息
调用Lambda的CreateFunction操作时触发以下错误:
botocore.errorfactory.InvalidParameterValueException: An error occurred (InvalidParameterValueException) when calling the CreateFunction operation: The role defined for the function cannot be assumed by Lambda.
问题排查及解决步骤
1. 修复信任策略的JSON语法错误
你的lambda_assume_role_policy存在多余的闭合括号,导致JSON结构无效,IAM无法正确解析信任关系。修正后的策略如下:
lambda_assume_role_policy={ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": { "Service": "lambda.amazonaws.com" } } ] }
(单值的Action和Service字段可省略数组格式,进一步避免语法错误)
2. 等待IAM策略生效
IAM角色的信任策略存在短暂的生效延迟,创建角色后添加等待再执行Lambda创建操作:
import time # 创建IAM角色 resp = iam.create_role( AssumeRolePolicyDocument=json.dumps(lambda_assume_role_policy), RoleName=role_name, ) # 等待5秒确保策略生效 time.sleep(5) # 创建Lambda函数 response = lambdaInst.create_function( FunctionName='Lambda-Func', Runtime='python3.8', Role=resp['Role']['Arn'], # 直接使用返回的ARN避免拼写错误 Handler='lambda_function.lambda_handler', Code={ 'ZipFile': deployment_package, }, Description=' ', Timeout=900, MemorySize=128, Publish=True, PackageType='Zip', EphemeralStorage={ 'Size': 1024 } )
3. 验证角色信任策略是否正确应用
通过IAM API检查角色的信任策略是否生效:
role = iam.get_role(RoleName=role_name) print(json.loads(role['Role']['AssumeRolePolicyDocument']))
输出结果需包含lambda.amazonaws.com作为可信任服务主体,且授权操作为sts:AssumeRole。
4. 确认RoleArn的准确性
确保传入create_function的Role参数是正确的角色ARN,优先使用create_role返回的resp['Role']['Arn'],避免手动拼接时出现拼写错误。
内容的提问来源于stack exchange,提问作者Adithi P
相关产品推荐
相关产品推荐

