我有一个非常奇怪的问题。我正在使用boto3为Lambda函数创建API网关代理。我可以在API网关控制台中创建方法,它告诉我API网关将被授予调用该功能的权限。这很有效。
但是,如果我使用SDK(lambda.add_permission
)创建API网关方法,我会遇到以下异常:
Execution failed due to configuration error: Invalid permissions on Lambda function
我已经确认我创建的策略与控制台向导创建的策略完全相同,所以我对发生的事情以及为什么API无法调用该函数感到困惑。这是我附加的许可:
{
"Policy": "{\"Version\":\"2012-10-17\",\"Id\":\"default\",\"Statement\":[{\"Sid\":\"1ac63c2c972f3cbdbcf0f4b0038133e2\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"apigateway.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:REGION:ACCOUNT:function:FUNCTION_NAME\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:execute-api:REGION:ACCOUNT:API_ID/*/*/*\"}}}]}"
}
似乎其他人也有类似的问题,但这些解决方案是我已经尝试过的:
https://forums.aws.amazon.com/thread.jspa?threadID=217254&tstart=0
答案 0 :(得分:2)
TL; WR:通过CLI或SDK为其添加权限时,为功能版本指定ARN。
在使用CLI和API网关控制台搞乱之后,我能够解决这个问题。由于我是动态更新我的Lambda函数,因此每次更新时都会创建版本号。当我在Method中创建API网关请求时,我将其指向该函数的特定版本,然后我更新了最新版本的策略那个版本的政策。在控制台向导中,它不会使用版本号,因此策略是正确的......
弄清楚多么痛苦!应该更好地记录!!