我到网上都在寻找答案。

本质上,我们使用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/

10-11 08:58