Можете ли вы опубликовать сообщение в теме SNS с помощью функции AWS Lambda, поддерживаемой node.js?
Можете ли вы опубликовать сообщение в теме SNS с помощью функции AWS Lambda, поддерживаемой node.js?
Ответ 1
Да, вы можете написать функцию Lambda, которая публикует тему SNS. Код, запущенный в Lambda, имеет доступ к полному AWS SDK для Java или Javascript, в зависимости от того, что ваша функция используется. Вам просто нужно убедиться, что вы передаете роль IAM, выполняющую функцию, доступ к публикации в вашу тему. В Javascript:
console.log("Loading function");
var AWS = require("aws-sdk");
exports.handler = function(event, context) {
var eventText = JSON.stringify(event, null, 2);
console.log("Received event:", eventText);
var sns = new AWS.SNS();
var params = {
Message: eventText,
Subject: "Test SNS From Lambda",
TopicArn: "arn:aws:sns:us-west-2:123456789012:test-topic1"
};
sns.publish(params, context.done);
};
Также можно обрабатывать SNS-сообщения, используя функции Lambda. Вы можете взглянуть на проект функции sns-message
, предлагаемый с помощью кнопки Создать функцию лямбда на консоли Lambda.
Ответ 2
Во-первых, вам необходимо предоставить свои разрешения Lambda IAM role
для публикации в SNS topic
, используя правильный IAM policy
.
{
"Action" : [
"sns:Publish",
"sns:Subscribe"
],
"Effect" : "Allow",
"Resource" : [
{ "Ref" : "<your SNS topic ARN>" }
]
}
Затем вы можете использовать следующий код для SNS publish
для своего SNS topic
из другого кода Lambda
или Node.js
.
var message = {};
var sns = new AWS.SNS();
sns.publish({
TopicArn: "<your SNS topic ARN>",
Message: JSON.stringify(message)
}, function(err, data) {
if(err) {
console.error('error publishing to SNS');
context.fail(err);
} else {
console.info('message published to SNS');
context.done(null, data);
}
});