我到网上都在寻找答案。
本质上,我们使用Swagger编写了一个API,它很棒而且效果很好,但是一件事没用...当我们调用Endpoint时,会出现500错误(不是500错误我们提供的是AWS的一种。错误状态为“由于配置错误,执行失败:Lambda函数的权限无效”(https://youtu.be/H4LM_jw5zzs
我经历了很多麻烦,并找到了答案...它涉及到使用AWS CLI,看起来有点像这样:
aws lambda add-permission \
--function-name FUNCTION_NAME \
--statement-id STATEMENT_ID \
--action lambda:InvokeFunction \
--principal apigateway.amazonaws.com \
--source-arn "arn:aws:execute-api:us-east-1:ACCOUNT_ID:API_ID/*/METHOD/ENDPOINT"
一切都很好,但是我们正在使用CloudFormation加速所有工作,我们希望这是自动化的。有没有更简单的方法可以做到这一点? CloudFormation中是否有某些东西可以提供我们所需的资源策略?
我为此遇到了一些麻烦,但是我已经为此工作了几个小时,并且它对我们的API版本有点阻碍,因此,我们将不胜感激。 :)
最佳答案
有一个CloudFormation
解决方案可以解决此问题。请参见以下CloudFormation
代码段:
"Permission": {
"Type": "AWS::Lambda::Permission",
"Properties": {
"FunctionName": { "Fn::GetAtt": [ "Lambda", "Arn" ] },
"Action": "lambda:InvokeFunction",
"Principal": "apigateway.amazonaws.com",
"SourceArn": { "Fn::Join": [ "", [
"arn:aws:execute-api:",
{ "Ref": "AWS::Region" }, ":",
{ "Ref": "AWS::AccountId" }, ":",
{ "Ref": "API" },
"/*/*/*"
] ] }
}
}
这授予
API Gateway
权限以启动您的Lambda
函数。您需要更改的此代码段变量为Lambda
(第4行)和API
(第11行)。关于amazon-web-services - 如何授予API Gateway通过CloudFormation调用lambda函数的权限?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39905255/