调用aws apigateway put-integration报错:Lambda函数ARN需同账户
嘿,这个错误我之前部署Lambda+API Gateway的时候也踩过坑,别着急,咱们一步步拆解排查:
核心原因
这个错误直白来说就是:你当前用来创建API Gateway集成的AWS账号,和你要关联的Lambda函数所属的AWS账号不是同一个。哪怕你觉得是同一IAM用户,也可能在配置或者脚本里出了小问题。
具体排查步骤
确认Lambda ARN的账号ID
Lambda的ARN格式是arn:aws:lambda:<region>:<account-id>:function:<function-name>,你得先核对这个ARN里的<account-id>是不是和你环境变量里的AWS_ACCOUNT_ID完全一致。可以通过命令查看:aws lambda get-function --function-name YOUR_FUNCTION_NAME | grep FunctionArn把输出里的账号ID和
echo $AWS_ACCOUNT_ID的结果对比,看有没有拼写错误、多空格或者数字遗漏。检查当前凭证对应的账号
有时候本地AWS配置可能有多个profile,或者环境变量没正确生效,导致你用的不是预期的账号。运行下面的命令确认当前凭证所属账号:aws sts get-caller-identity输出里的
Account字段就是当前操作的账号ID,必须和Lambda ARN里的账号ID完全匹配。核对PutIntegration命令的URI参数
你调用aws apigateway put-integration时的--uri参数必须正确指向目标Lambda的ARN,格式一般是:arn:aws:apigateway:<region>:lambda:path/2015-03-31/functions/arn:aws:lambda:<region>:<account-id>:function:<function-name>/invocations这里面嵌套的Lambda ARN部分的账号ID必须和当前账号一致,别把之前测试用的其他账号ARN硬编码在脚本里了。
排除跨账号场景(如果不是故意的)
如果你本来就想跨账号调用Lambda,那需要额外配置权限:给API Gateway所在账号的角色添加调用Lambda的权限,同时在Lambda的资源策略里允许API Gateway的访问。但根据你的描述,你用的是同一IAM用户的资源,所以大概率不是这个情况。
快速修复方案
如果排查后发现是账号不匹配:
- 切换到正确的AWS凭证:要么修改环境变量
AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY为Lambda所在账号的凭证,要么在脚本里添加--profile YOUR_CORRECT_PROFILE指定正确的配置文件。 - 修正脚本里的Lambda ARN,确保账号ID和当前操作账号一致。
内容的提问来源于stack exchange,提问作者Josh Long

