Pouvez-vous publier un message dans une rubrique SNS à l'aide d'une fonction AWS Lambda soutenue par node.js?
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.
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);
}
});