gpt4 book ai didi

node.js - AWS lambda 发送 SNS "succeeds"但消息并未实际发送

转载 作者:搜寻专家 更新时间:2023-11-01 00:14:36 25 4
gpt4 key购买 nike

我编写了一个 AWS lambda 函数,用于在上传 S3 对象时发送文本消息。我已确认订阅,我可以接收从 SNS 控制台发送的测试消息。

当我测试 lambda 时,所有日志都说该方法成功但没有儿子消息到达。这是函数(主要只是示例模板,但为了安全起见,在这篇文章中更改了我的主题)。任何关于接下来要测试/尝试的事情的提示都将受到赞赏。

console.log('Loading function');
var aws = require('aws-sdk');
var s3 = new aws.S3({ apiVersion: '2006-03-01' });
exports.handler = function(event, context) {
var bucket = event.Records[0].s3.bucket.name;
var key = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
var params = {
Bucket: bucket,
Key: key
};
var sns = new aws.SNS();
console.log('start of brians sns function')
var pubResult = sns.publish({
Message: 'Test publish to SNS from Lambda',
TopicArn: 'arn:aws:sns:us-east-1:xxxxxxxxxxxx:lambdatop'
}, function(err, data) {
if (err) {
console.log(err.stack);
return;
}
console.log('push sent');
console.log(data);
});
console.log('after sns publish:')
console.log(pubResult)
context.done(null, 'Brians Function Finished!');
};

最佳答案

您在调用 publish() 之后立即调用 context.done()。 publish() 函数是一个异步调用,您不需要等待它完成。另外,我认为您的变量 pubResult 不包含您期望的内容。

试试这个:

console.log('Loading function');
var aws = require('aws-sdk');
exports.handler = function(event, context) {
var sns = new aws.SNS();
console.log('start of brians sns function')
sns.publish({
Message: 'Test publish to SNS from Lambda',
TopicArn: 'arn:aws:sns:us-east-1:xxxxxxxxxxxx:lambdatop'
}, function(err, data) {
if (err) {
console.log(err.stack);

// Notify Lambda that we are finished, but with errors
context.done(err, 'Brians Function Finished with Errors!');
return;
}
console.log('push sent');
console.log(data);

// Notify Lambda that we are finished
context.done(null, 'Brians Function Finished!');
});
};

关于node.js - AWS lambda 发送 SNS "succeeds"但消息并未实际发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34205738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com