使用Lambda的Amazon API Gateway使用POST方法提供权限错误

时间:2017-02-20 06:57:03

标签: amazon-web-services aws-lambda aws-api-gateway amazon-iam

我一直在使用Apex和函数部署和部署Lambda函数,我通过AWS API Gateway使用GET方法正常工作。

我现在需要创建一个API,使用POST调用Lambda函数并传入JSON对象。为了获得POST工作的基础知识,我创建了一个简单的Lambda函数,它只执行以下操作

dump(head) {
   // i don't want the 'head' to be changed, so I use a reference instead.
   node *p = head;
   // loop each car + the locomotive until end is reached
   while(*p != null)
   {
      // count the load
      write p->value;
      // inspect the next car
      p = p->next;
   }
}

当我使用API​​网关中的GET方法调用此Lambda函数并测试API时,它运行正常 - API网关测试机制提供“成功”消息,而在CloudWatch中成功调用中记录“已接收请求”。

但是,当我使用POST请求从API网关调用相同的Lambda函数时,我得到以下内容

“message”:“内部服务器错误”

我还看到“由于配置错误导致执行失败:对Lambda函数的权限无效”

所以我想知道,当通过POST方法调用该函数时,调用Lambda函数的角色是否需要任何其他特权。如果是这样,我需要为正在使用的角色分配什么权限?

谢谢, 桑杰。

2 个答案:

答案 0 :(得分:0)

如果要通过API网关级别调用POST方法,则必须部署该post方法。转到AWS API Gateway控制台。然后选择你的POST API名称,在网格(屏幕)的顶部你会找到一个名为Actions的下拉列表,其中有一个名为deploy的选项。您必须选择只有POST API才能正常工作。

答案 1 :(得分:0)

API Gateway需要具有调用Lambda函数的权限。如果您通过Web控制台配置API,则会提示您自动添加权限,未使用阶段变量指定Lambda函数。

因此,如果您使用CloudFormation或Swagger导入等工具来创建或更新API,或者使用阶段变量指定Lambda函数,那么您需要发出aws lambda add-permission命令手动设置权限。

有关详细信息,请参阅这些帖子:

Lambda function -> Api Gateway stage variable permission manually

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