gpt4 book ai didi

amazon-web-services - Amazon Lambda 到 SNS 通知不起作用

转载 作者:行者123 更新时间:2023-12-02 21:09:33 24 4
gpt4 key购买 nike

我有一个从 Amazon lambda 推送 SNS 通知的用例。我编写了以下代码,其中 IAM 角色具有调用 SNS 的权限。即使使用 Kenesis 触发器,此 Lambda 函数也无法向 SNS 发送任何通知。我通过在 SNS 上订阅我的电子邮件 ID 来确认这一点。

[编辑]:只是一个后续问题。我现在需要查询 DynamoDB 并根据输出,需要调用 SNS 的不同端点。现在,当我查询 DynamoDB 时,执行会在 DynamoDB 查询后停止,甚至无法进行 SNS 检查。

以下是我的 lambda 函数代码。

console.log('Loading function');
var AWS = require('aws-sdk');
exports.handler = function(event, context) {
event.Records.forEach(function(record) {
//var payload = new Buffer(record.kinesis.data, 'base64').toString('ascii');
var payload = record.kinesis.data;
console.log('Decoded payload:', payload);

var dynamodb = new AWS.DynamoDB();
var dynamodb_params = {
Key: {
dataSource: {
S: payload
}
},
TableName: 'TableName',
AttributesToGet: [
'attribute' // ...
],
ConsistentRead: false,
};
var sns_endpoint = null;
dynamodb.getItem(dynamodb_params, function(err, data) {
if (err) {
console.log(err.stack);
context.done(err, 'Errors while querying dynamodb!');
} else {
console.log(data);
sns_endpoint = data.Item.sns.S;
console.log("Result= " + data);
console.log("Item= " + data.Item);
console.log("sns= " + data.Item.sns);
console.log("value= " + data.Item.sns.S);
console.log("sns_endpoint= " + sns_endpoint);
context.done(null, 'Querying dynamodb succeeded!');
}
});
if( sns_endpoint != null ) {
console.log("sns_endpoint= " + sns_endpoint);
var sns_params = {
Message: payload,
Subject: 'Event Notification From Lambda',
TopicArn: sns_endpoint
};
var sns = new AWS.SNS();
sns.publish(sns_params, function(err, data) {
if (err) {
console.log(err.stack);
context.done(err, 'Errors while putting to SNS!');
} else {
console.log(data);
context.done(null, 'Putting to SNS succeeded!');
}
});
}
});

};

最佳答案

您正在 forEach 循环中调用异步函数 sns.publish()。然后您将立即调用 context.succeed()。一旦调用 context.succeedcontext.failcontext.done,您的 Lambda 函数就会退出。您需要修改代码,以便在所有异步函数调用完成后仅调用其中之一。

关于amazon-web-services - Amazon Lambda 到 SNS 通知不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34277343/

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