【问题标题】:AWS Lambda function works fine when invoked manually, but not through endpointAWS Lambda 函数在手动调用时可以正常工作,但不能通过端点调用
【发布时间】:2018-05-06 16:51:15
【问题描述】:

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

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

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

{
    "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,但我看不到那里有什么时髦的东西。有关如何修复/调试此问题的任何想法?

干杯!

【问题讨论】:

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


    【解决方案1】:

    啊 - 我想我解决了!

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

    所以我认为我必须在 URL 本身中传递我的参数。

    【讨论】:

    • 我认为 HTTP 中的 GET 方法不包含定义的正文。
    猜你喜欢
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    • 2012-03-10
    • 1970-01-01
    • 2021-06-13
    • 2018-05-05
    • 1970-01-01
    相关资源
    最近更新 更多