Я новичок ie на nodejs. Я пытаюсь создать лямбда-функцию для извлечения файла xml из ведра S3 и публикации sh каждой записи файла xml в sns с форматом json.
Он все еще не работает . В журнале я не вижу ответа или ошибки функции publishTextPromise. Я пробовал образец кода для публикации сообщения в sns topi c, и он работает нормально. Значит, разрешения для моей лямбды и sns должны быть правильными.
Может ли кто-нибудь указать, в чем проблема? Большое спасибо!
журнал
INFO sending info to SQS
INFO before sending
код
// eslint-disable-next-line import/no-unresolved
const aws = require('aws-sdk');
const s3 = new aws.S3({ apiVersion: '2006-03-01' });
// Set region ---not sure if we need that
//AWS.config.update({region: 'REGION'});
const convertXML = (s3Xml) => {
// eslint-disable-next-line global-require
const { parseString } = require('xml2js');
parseString(s3Xml, (_err, result) => {
result.infofield.info.forEach((xmlRecord) => {
publishMessage(xmlEntry);
});
});
};
// promise
var publishMessage =(messageContent) => {
console.log('sending info to SQS');
// console.log(JSON.stringify(messageContent, null, 4));
aws.config.update({region: 'ap-southeast-2'});
// Create publish parameters
var params = {
Message: JSON.stringify(messageContent), /* required */
TopicArn: 'arn:aws:sns:ap-southeast-2:xxxxxxxxxxxxxxxxxx'
};
console.log("before sending");
try{
// Create promise and SNS service object
var publishTextPromise = new aws.SNS({apiVersion: '2010-03-31'}).publish(params).promise();
// Handle promise's fulfilled/rejected states
publishTextPromise.then(
function(data) {
console.log(`Message ${params.Message} send sent to the topic ${params.TopicArn}`);
console.log("MessageID is " + data.MessageId);
}).catch(
function(err) {
console.error(err, err.stack);
});
} catch (err) {
console.log(err);
}
console.log("after sending");
}
/**
* Main Handler
*/
exports.handler = async (event) => {
console.log('Received event:', JSON.stringify(event, null, 2));
// Get the object from the event and show its content type
const bucket = event.Records[0].s3.bucket.name;
const key = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
const params = {
Bucket: bucket,
Key: key,
};
try {
const data = await s3.getObject(params).promise();
const s3Xml = data.Body.toString('utf-8');
console.log('s3Xml:', s3Xml);
convertXML(s3Xml);
return s3Xml;
} catch (err) {
console.log(err);
const message = `Error getting object ${key} from bucket ${bucket}. Make sure they exist and your bucket is in the same region as this function.`;
console.log(message);
throw new Error(message);
}
};