amazon-web-services - 如何向 API Gateway 授予通过 CloudFormation 调用 lambda 函数的权限?

标签 amazon-web-services aws-lambda aws-api-gateway aws-cloudformation

我一直在网上寻找这个问题的答案。

本质上,我们正在使用 Swagger 构建一个 API,这非常棒并且工作得很好,但是有一件事不起作用......当我们调用端点时,我们收到 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/71082778/

相关文章:

java - Jboss AS 7.1.1无法启动

aws-lambda - DevOps : AWS Lambda . zip 与 Terraform

java - 使用 gradle 编译 zip,包括由同级子项目实现的库

cors - SAM 应用程序部署给出预检错误,但如果我在 aws apigateway 控制台中创建 OPTIONS 方法,我的预检会通过

java - Archive TransferManagerBuilder 无法通过区域提供商链找到区域

amazon-web-services - Aws Organization - 将成员(member)账户移交给其他方

amazon-web-services - 云信息弹性疼痛 : "cannot be specified along with CacheSecurityGroupNames"

java - AWS - Lambda Scheduler 调用多个 lambda 实例

amazon-web-services - 带有资源策略的aws api网关的terraform循环依赖

python-2.7 - 如何从 aws lambda 事件对象(在 python 中)获取 POST 请求的 header ,其中传入请求的正文为空,但 header 中有信息