AWS API 具有代理 Lambda 的网关:对 Lambda 函数的权限无效

AWS API Gateway with proxy Lambda: Invalid permissions on Lambda function

当 lambda 函数的名称作为阶段变量出现时,我正在使用 AWS API 网关和代理 Lambda。这意味着我有一个 API 集成,它根据部署阶段连接到适当的 lambda。 在这里查看总体思路:

当我测试我的一个阶段(称为:"staging")时一切正常,但在测试另一个阶段("production")时我得到错误 "Execution failed due to configuration error: Invalid permissions on Lambda function"。

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

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

在阶段变量中指定 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

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

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

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

尝试:

  1. 正在删除您从 api 网关输入的 lambda
  2. 从下拉菜单中重新输入所需的 lambda 函数使用下拉菜单

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