带有代理 Lambda 的 AWS API Gatewat:Lambda 函数的权限无效

Sha*_*ish 7 amazon-web-services aws-lambda aws-api-gateway

当 lambda 函数的名称作为阶段变量出现时,我将 AWS API Gateway 与代理 Lambda 一起使用。这意味着我有一个 API 集成,它根据部署的阶段连接到适当的 lambda。请参阅此处的总体思路: 在此处输入图片说明

当我测试我的一个阶段(称为:“暂存”)时,一切正常,但在测试另一个阶段(“生产”)时,我收到错误“由于配置错误执行失败:Lambda 函数的权限无效”。

我已经测试和验证的事情:
1. 当从 Lambda 仪表板测试时,应该由 API 调用的两个 lambda 都运行良好,并且符合预期。
2. 我已经确定(很多次)我已经允许 API 网关调用我的 lambda 函数(即执行“aws lambda add-permission...”)。之后我多次验证了该策略(即执行了“aws lambda get-policy...”)。

知道我还能检查什么吗?我可能在这里忘记了什么?谢谢。

在此处输入图片说明

Wit*_*rba 9

我有同样有趣的问题。当您创建 API 时,您可能在创建之前不小心输入了 lambda 函数的名称。创建 lambda 后,名称将正确显示,但不会连接或授予权限。

尝试:

  1. 删除您从 api 网关输入的 lambda
  2. 使用 dropdown从下拉列表中重新输入所需的 lambda 函数。

在此输入图像描述

  1. 如果 AWS 要求您授予lambda 执行权限 - BINGO。,现在应该可以工作了。


Dig*_*aen 5

在阶段变量中指定 Lambda 函数时,不会自动创建调用 Lambda 函数的权限。您需要手动执行此操作:

aws lambda add-permission --function-name arn:aws:lambda:eu-west-1:111111111111:function:some-function:default --source-arn arn:aws:execute-api:eu-west-1:111111111111:xxxxxxxxxx/* --principal apigateway.amazonaws.com --statement-id 88b42004-f504-44d5-9adf-d027ee65a890 --action lambda:InvokeFunction
Run Code Online (Sandbox Code Playgroud)

(您需要替换此语句中的区域、您的 lambda 函数名称和您的帐号,以及 api-gateway ARN。)


Sha*_*ish 0

找不到原因,但找到了解决问题的解决方法。我没有使用 $stageVariables 作为 Lambda 函数名称,而是明确地一一写入了我将使用的 Lambda 函数的名称。这样,AWS 将自动向 Lambda 函数授予权限(对于您显式写入的每个函数)。之后,您可以将集成编辑回使用阶段变量。

在此输入图像描述