web-dev-qa-db-fra.com

Pouvez-vous publier un message dans une rubrique SNS à l'aide d'une fonction AWS Lambda soutenue par node.js?

Pouvez-vous publier un message dans une rubrique SNS à l'aide d'une fonction AWS Lambda soutenue par node.js?

56
GarySharpe

Oui, vous pouvez écrire une fonction Lambda qui publie dans une rubrique SNS. Le code exécuté dans Lambda a accès à l'intégralité du kit SDK AWS pour Java ou Javascript , quelle que soit l'utilisation de votre fonction. Vous devez simplement vous assurer que vous accordez au rôle IAM exécutant la fonction l'accès à publier dans votre sujet. En 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);
};

Il est également possible de gérer les messages SNS à l'aide de fonctions Lambda. Vous pouvez jeter un oeil au sns-message schéma de fonction, proposé par le bouton Créer une fonction Lambda sur la console Lambda.

92
James

Tout d'abord, vous devez accorder à votre autorisation Lambda IAM role L'autorisation de publier sur votre SNS topic À l'aide de la fonction IAM policy Appropriée.

{
    "Action" : [
        "sns:Publish",
        "sns:Subscribe"
    ],
    "Effect" : "Allow",
    "Resource" : [
        { "Ref" : "<your SNS topic ARN>" }
    ]
}

Ensuite, vous pouvez utiliser le code suivant pour SNS publish Dans votre SNS topic À partir de votre autre code Lambda ou 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.succeed(null, data);
    }
});
45
kixorz