如何解决Terraform部署APIGatewayV2调用Lambda时IAM角色无权限错误
问题根因与解决方案
核心根因定位
你收到的报错明确指向API Gateway集成绑定的IAM角色缺少调用Lambda的权限,该问题90%以上的场景是由配置逻辑错误导致:
你当前为Lambda和API Gateway共用的api_gateway_role(对应Terraform资源aws_iam_role.lambda_exec)仅绑定了AWSLambdaBasicExecutionRole策略,该策略仅支持Lambda函数自身向CloudWatch打印日志,完全不包含调用Lambda函数的权限。如果你的API Gateway V2集成配置了该角色作为执行角色,调用时必然会触发权限报错。
修复方案(二选一即可,优先选方案1)
方案1:移除集成的执行角色配置(更适配HTTP API场景)
APIGatewayV2的HTTP API调用Lambda不需要额外指定执行角色,只要配置了aws_lambda_permission资源即可完成授权,属于官方推荐的轻量方案。你只需要找到你的aws_apigatewayv2_integration资源配置,删除其中的credentials_arn参数,重新apply即可。
方案2:为执行角色新增Lambda调用权限
如果你有特殊场景必须保留集成的执行角色配置,直接给角色新增调用Lambda的权限即可,新增Terraform代码如下:
resource "aws_iam_role_policy" "apigw_invoke_lambda" { name = "apigw-invoke-lambda" role = aws_iam_role.lambda_exec.id policy = jsonencode({ Version = "2012-10-17" Statement = [ { Effect = "Allow" Action = "lambda:InvokeFunction" Resource = aws_lambda_function.prod_options.arn } ] }) }
可选排查项
如果上述方案仍未解决问题,可以依次排查以下配置:
- 确认
aws_lambda_permission资源的source_arn绑定的是你当前调用的API实例ARN,避免关联到其他错误的API资源 - 可以暂时将
source_arn调整为更宽松的匹配规则验证是否是路径匹配问题:source_arn = "${aws_apigatewayv2_api.gateway_prod.execution_arn}/*" - 运行
terraform plan确认所有配置变更都已经执行terraform apply生效,不存在未部署的配置修改
内容的提问来源于stack exchange,提问作者Shammir
相关产品推荐
相关产品推荐

