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.
中所示
我有一个用 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.