AWS:从 Lambda 函数发布到 SNS
AWS: Publishing to SNS from Lambda function
我正在尝试从 lambda 函数发布到我的 AWS SNS 主题,但我只是不明白为什么以下代码不起作用。
我已经尝试了以下代码的许多变体,但它似乎永远都行不通。
我还确保我的角色具有此处所述的正确权限:
我在回调函数中的登录从未触发,无论我将 Lambda 超时期限设置为什么,它总是等待时钟结束。
我对我正在使用的 AWS ARN 进行了双重检查和三次检查,我非常有信心它是正确的。
如果我使用无效的 AWS ARN,当我的代码被触发时,它的行为方式完全相同。
CloudWatch Logs 没有向我提供任何额外信息。这几乎就像它只是默默地失败而没有在任何地方登录。
const logger = require('./Framework/logger');
const aws = require('aws-sdk');
exports.handler = (event, context, callback) => {
try {
var message = {
"default": "TEST"
};
var snsParameters = {
TopicArn: process.env.Topic,
Message: JSON.stringify(message)
}
logger.error(snsParameters);
var sns = new aws.SNS();
sns.publish(snsParameters, function (err, data) {
if (err) {
logger.error('error publishing to SNS');
context.fail(err);
} else {
logger.error('message published to SNS');
context.done(null, data);
}
});
}
catch (e) {
logger.error(e);
}
};
编辑#1
我更改了我的代码以尝试在指定 AWS 版本时进行异步调用,但它仍然无法正常工作
const repository = require('./Framework/database');
const logger = require('./Framework/logger');
const aws = require('aws-sdk');
aws.config.update({ region: 'eu-west-1' });
exports.handler = async (event, context, callback) => {
try {
var message = "TEST";
var snsParameters = {
TopicArn: process.env.Topic,
Message: message
}
logger.error(snsParameters);
var sns = new aws.SNS({ apiVersion: '2010-03-31' });
var snsPromise = sns.publish(snsParameters).promise();
await snsPromise
.then((data) => {
logger.error('message published to SNS');
context.done(null, data);
})
.catch((error) => {
logger.error('error publishing to SNS');
context.fail(err);
});
}
catch (e) {
logger.error(e);
}
};
输出日志:
START RequestId: [removed] Version: $LATEST
2018-08-22T14:25:35.126Z [removed] { TopicArn: 'arn:aws:sns:eu-west-1:[removed]', Message: 'TEST' }
END RequestId: [removed]
REPORT RequestId: [removed] Duration: 3003.27 ms Billed Duration: 3000 ms Memory Size: 128 MB Max Memory Used: 66 MB
2018-08-22T14:25:37.847Z [removed] Task timed out after 3.00 seconds
编辑#2
我已经更新了我的代码如下
var AWS = require('aws-sdk');
AWS.config.update({ region: 'eu-west-1' });
exports.handler = async (event, context, callback) => {
try {
var message = "TEST";
var snsParameters = {
TopicArn: process.env.Topic,
Message: message
};
console.log(snsParameters);
var publishTextPromise = new AWS.SNS({ apiVersion: '2010-03-31' }).publish(snsParameters).promise();
publishTextPromise
.then(function (data) {
console.log("Message ${params.Message} send sent to the topic ${params.TopicArn}");
console.log("MessageID is " + data.MessageId);
callback(null, data);
})
.catch(function (err) {
console.log(err);
callback(err);
});
console.log(publishTextPromise);
}
catch (e) {
console.log(e);
}
};
输出日志
START RequestId: 1155953d-b645-11e8-883f-bb9cff5533aa Version: $LATEST
2018-09-12T04:33:59.966Z 1155953d-b645-11e8-883f-bb9cff5533aa { TopicArn: 'arn:aws:sns:eu-west-1:XXX:XXX',
Message: 'TEST' }
2018-09-12T04:34:00.516Z 1155953d-b645-11e8-883f-bb9cff5533aa Promise { <pending> }
END RequestId: 1155953d-b645-11e8-883f-bb9cff5533aa
REPORT RequestId: 1155953d-b645-11e8-883f-bb9cff5533aa Duration: 610.75 ms Billed Duration: 700 ms Memory Size: 128 MB Max Memory Used: 32 MB
替换,
context.done(null, data);
和
callback(null, data);
和
context.fail(err);
和
callback(err);
我正在尝试从 lambda 函数发布到我的 AWS SNS 主题,但我只是不明白为什么以下代码不起作用。
我已经尝试了以下代码的许多变体,但它似乎永远都行不通。
我还确保我的角色具有此处所述的正确权限:
我在回调函数中的登录从未触发,无论我将 Lambda 超时期限设置为什么,它总是等待时钟结束。
我对我正在使用的 AWS ARN 进行了双重检查和三次检查,我非常有信心它是正确的。
如果我使用无效的 AWS ARN,当我的代码被触发时,它的行为方式完全相同。
CloudWatch Logs 没有向我提供任何额外信息。这几乎就像它只是默默地失败而没有在任何地方登录。
const logger = require('./Framework/logger');
const aws = require('aws-sdk');
exports.handler = (event, context, callback) => {
try {
var message = {
"default": "TEST"
};
var snsParameters = {
TopicArn: process.env.Topic,
Message: JSON.stringify(message)
}
logger.error(snsParameters);
var sns = new aws.SNS();
sns.publish(snsParameters, function (err, data) {
if (err) {
logger.error('error publishing to SNS');
context.fail(err);
} else {
logger.error('message published to SNS');
context.done(null, data);
}
});
}
catch (e) {
logger.error(e);
}
};
编辑#1 我更改了我的代码以尝试在指定 AWS 版本时进行异步调用,但它仍然无法正常工作
const repository = require('./Framework/database');
const logger = require('./Framework/logger');
const aws = require('aws-sdk');
aws.config.update({ region: 'eu-west-1' });
exports.handler = async (event, context, callback) => {
try {
var message = "TEST";
var snsParameters = {
TopicArn: process.env.Topic,
Message: message
}
logger.error(snsParameters);
var sns = new aws.SNS({ apiVersion: '2010-03-31' });
var snsPromise = sns.publish(snsParameters).promise();
await snsPromise
.then((data) => {
logger.error('message published to SNS');
context.done(null, data);
})
.catch((error) => {
logger.error('error publishing to SNS');
context.fail(err);
});
}
catch (e) {
logger.error(e);
}
};
输出日志:
START RequestId: [removed] Version: $LATEST
2018-08-22T14:25:35.126Z [removed] { TopicArn: 'arn:aws:sns:eu-west-1:[removed]', Message: 'TEST' }
END RequestId: [removed]
REPORT RequestId: [removed] Duration: 3003.27 ms Billed Duration: 3000 ms Memory Size: 128 MB Max Memory Used: 66 MB
2018-08-22T14:25:37.847Z [removed] Task timed out after 3.00 seconds
编辑#2 我已经更新了我的代码如下
var AWS = require('aws-sdk');
AWS.config.update({ region: 'eu-west-1' });
exports.handler = async (event, context, callback) => {
try {
var message = "TEST";
var snsParameters = {
TopicArn: process.env.Topic,
Message: message
};
console.log(snsParameters);
var publishTextPromise = new AWS.SNS({ apiVersion: '2010-03-31' }).publish(snsParameters).promise();
publishTextPromise
.then(function (data) {
console.log("Message ${params.Message} send sent to the topic ${params.TopicArn}");
console.log("MessageID is " + data.MessageId);
callback(null, data);
})
.catch(function (err) {
console.log(err);
callback(err);
});
console.log(publishTextPromise);
}
catch (e) {
console.log(e);
}
};
输出日志
START RequestId: 1155953d-b645-11e8-883f-bb9cff5533aa Version: $LATEST
2018-09-12T04:33:59.966Z 1155953d-b645-11e8-883f-bb9cff5533aa { TopicArn: 'arn:aws:sns:eu-west-1:XXX:XXX',
Message: 'TEST' }
2018-09-12T04:34:00.516Z 1155953d-b645-11e8-883f-bb9cff5533aa Promise { <pending> }
END RequestId: 1155953d-b645-11e8-883f-bb9cff5533aa
REPORT RequestId: 1155953d-b645-11e8-883f-bb9cff5533aa Duration: 610.75 ms Billed Duration: 700 ms Memory Size: 128 MB Max Memory Used: 32 MB
替换,
context.done(null, data);
和
callback(null, data);
和
context.fail(err);
和
callback(err);