为什么 Dynamodb.put 在 Lambda 函数中不起作用?返回空值。如何调试?

Emm*_*uel 4 amazon-web-services amazon-dynamodb aws-lambda

调试 lambda 令人沮丧。

我有一个非常简单的 lambda 函数:

const AWS = require('aws-sdk')

const dynamodb = new AWS.DynamoDB.DocumentClient({region: 'ap-southeast-2'});

exports.handler = async (event, context, callback) => {

    const params = {
        TableName: 'people-dev',
        Item: {
            id: '1',
            name: 'person',
            email: 'person@example.com'
        }
    };

    dynamodb.put(params, (err, data) => {
        if(err) {
            callback(err, null)
        } else{
            callback(null, data)
        }

    });

};
Run Code Online (Sandbox Code Playgroud)

测试响应是:

Response:
null

Request ID:
"3d7e9329-3843-4760-917d-4b4d4781dbd7"

Function Logs:
START RequestId: 3d7e9329-3843-4760-917d-4b4d4781dbd7 Version: $LATEST
END RequestId: 3d7e9329-3843-4760-917d-4b4d4781dbd7
REPORT RequestId: 3d7e9329-3843-4760-917d-4b4d4781dbd7  Duration: 243.13 ms Billed Duration: 300 ms     Memory Size: 128 MB Max Memory Used: 29 MB  
Run Code Online (Sandbox Code Playgroud)

没有任何内容写入 Dynamo。在 cloudwatch 中没有登录任何有用的东西。是的,该函数对 DynamoDB 具有完全权限。

Tha*_*ssi 6

async回到它的地方作为使用回调已经过时,而且更容易出错。使用promise()node.js aws-sdk 上可用的内置方法,并仅await根据这些承诺。如果您想处理错误,只需用try/catch块包围您的代码。

const AWS = require('aws-sdk')

const dynamodb = new AWS.DynamoDB.DocumentClient({region: 'ap-southeast-2'});

exports.handler = async (event) => {

    const params = {
        TableName: 'people-dev',
        Item: {
            id: '1',
            name: 'person',
            email: 'person@example.com'
        }
    };

    await dynamodb.put(params).promise()

    return {
        statusCode: 200,
        body: JSON.stringify({message: 'Success'})
    }

};
Run Code Online (Sandbox Code Playgroud)

更多关于异步/等待