AWS Lambda函数在手动调用时工作正常,但不能通过端点工作

时间:2018-05-06 16:51:15

标签: aws-lambda amazon-dynamodb aws-api-gateway aws-amplify

我有一个连接到API网关端点的Lambda函数,它列出了DynamoDB中ID下的项目。

我使用无服务器框架构建了我的功能。当我在本地调用函数(serverless invoke local ...)时,它工作正常。当我在AWS Lambda控制台上手动测试它时,它工作正常,但是当我从API网关调用它时,它不起作用。

它已配置为使用此有效负载:(我用于测试的内容)

{
    "requestContext": {
        "identity": {
            "cognitoIdentityId": "468648c5-b135-4075-910a-8a648d66e67d"
        }
   }
}

在我的应用中,我使用aws-amplify包。这就是我调用端点的方式:

data = await API.get('endpoint-name', '/endpoint', {
    body: {
        requestContext: {
            cognitoIdentityId: '468648c5-b135-4075-910a-8a648d66e67d'
        }
    }
});

在这里,我收到403错误。如果我在没有额外数据的情况下调用它,即:

data = await API.get('endpoint-name', '/endpoint');

我得到一个空列表[ ],但没有错误。 aws-amplify会自动填充cognitoIdentityId字段吗?我正在关注serverless-stack教程,他们对此有所了解。

我也设置了CloudWatch,我看不到任何有趣的东西。关于如何修复/调试此问题的任何想法?

干杯!

1 个答案:

答案 0 :(得分:0)

啊 - 我想我解决了!

我将端点配置为从GET请求的正文中获取参数,但是(我认为)aws-amplifyAPI Gateway在执行时不支持请求正文GET。我通过手动测试API Gateway(我之前没有做过)来注意到这一点,并说明了Request Body is not supported for GET methods

所以我想我必须在URL本身传递我的参数。