Подтвердить что ты не робот

Можете ли вы опубликовать сообщение в теме SNS с помощью функции AWS Lambda, поддерживаемой node.js?

Можете ли вы опубликовать сообщение в теме SNS с помощью функции AWS Lambda, поддерживаемой node.js?

4b9b3361

Ответ 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);
    }
});