AWS lambda 没有将结果推送到 dynamodb

AWS lambda not pushing results to dynamodb

我有一个用 node.js 编写的 lambda,我想将数据推送到我的 dynamodb table。我的最终目标是让我的 api 请求拉入响应,然后将 items 部分中的结果直接推送到 dynamodb,但目前我的 lambda 仅通过查询拉取并且 createmessage 函数被忽略(当前使用静态数据进行测试)。我想我的代码有些混乱,所以需要一些帮助来正确地使用这个 运行,请看下面:

// Loads in the AWS SDK
const AWS = require('aws-sdk');

// Creates the document client specifing the region 
// The tutorial's table is 'in eu-west-2'
const ddb = new AWS.DynamoDB.DocumentClient({region: 'eu-west-2'});

exports.handler = async (event, context, callback) => {
    // Captures the requestId from the context message
    const requestId = context.awsRequestId;

    // Handle promise fulfilled/rejected states
    await createMessage(requestId).then(() => {
        callback(null, {
            statusCode: 201,
            body: '',
            headers: {
                'Access-Control-Allow-Origin' : '*'
            }
        });
    }).catch((err) => {
        console.error(err)
    })
};

// Function createMessage
// Writes message to DynamoDb table Message 
function createMessage(requestId) {
    const params = {
        TableName: 'splunk-lambda',
        Item: {
            'id' : '101',
            'message' : 'Hello from lambda'
        }
    }
    return ddb.put(params).promise();
}

 var request = require('request');
    var options = {
    'method': 'POST',
    'url': 'myurl',
    'headers': {
        'x-api-key': 'my-api-key',
        'Content-Type': 'text/plain'
    },
    body: 'query my graphql query'

    };
    request(options, function (error, response) {
    if (error) throw new Error(error);
    console.log(response.body);
    });

我对 lambda 的回应:

Test Event Name
test

Response
null

Function Logs
    {my graphql response}
    END RequestId: bdf23337-ca51-4f8b-868c-314f4d048055

根据评论。

问题是由使用 async handler 引起的。这会导致您的函数在它有机会 运行 其所有代码之前完成。

克服此问题的一种方法是将代码包装在 new Promise 中的处理程序中,如 AWS docs.

中所示