Comment puis-je modifier la ligne d'objet par défaut, « AWS Notification Message » (Message de notification AWS), de l'e-mail Amazon SNS pour une règle CloudWatch Events ?

Dernière mise à jour : 06/01/2021

J' ai configuré mon Amazon Simple Notification Service (Amazon SNS) pour recevoir des notifications par e-mail d'une règle Amazon CloudWatch Events qui a plusieurs sources d'événements. Comment puis-je personnaliser la ligne d'objet par défaut, « AWS Notification Message » (Message de notification AWS), et le corps du message de l'e-mail SNS en fonction de l'événement qui déclenche la notification ?

Brève description

Il n'existe actuellement aucun moyen de personnaliser le message d'un e-mail Amazon SNS basé sur des règles CloudWatch Events spécifiques à l'aide de la console Amazon SNS.

Utilisez plutôt une fonction Lambda, au lieu de la rubrique Amazon SNS, comme cible pour la règle CloudWatch Events. Ensuite, configurez la fonction Lambda pour publier un message personnalisé dans la rubrique Amazon SNS lorsqu'elle est déclenchée par la règle CloudWatch Events.

Voici comment ça marche :

  1. La règle CloudWatch Events est déclenchée.
  2. La fonction Lambda appelle avec la charge utile de la règle CloudWatch Events.
  3. La fonction appelle l'API de publication d'Amazon SNS.
  4. Amazon SNS envoie une notification par e-mail avec un sujet et/ou un message personnalisé.

Résolution

Remarque : Si vous recevez des erreurs lors de l'exécution de commandes depuis l'interface de ligne de commande AWS (AWS CLI), vérifiez que vous utilisez la version la plus récente d'AWS CLI.

Créez une fonction AWS Lambda définie comme cible pour la règle CloudWatch Events

Pour plus d'informations, consultez Planifier les fonctions AWS Lambda à l'aide des événements CloudWatch.

Important : assurez-vous que le rôle d'exécution de la fonction Lambda est autorisé à publier dans la rubrique Amazon SNS. Par exemple, si le rôle d'exécution de votre fonction comporte la stratégie gérée AWS, AWSLambdaBasicExecutionRole, vous devez attacher la stratégie AmazonSNSFullAccess au rôle d'exécution.

Une fois la fonction Lambda définie comme cible pour la règle CloudWatch Events, la stratégie basée sur les ressources suivante est automatiquement ajoutée à la fonction :

{
  "Version": "2012-10-17",
  "Id": "default",
  "Statement": [
    {
      "Sid": "AWSEvents_CWRule_CustomEmailSubject_Id196649187337",
      "Effect": "Allow",
      "Principal": {
        "Service": "events.amazonaws.com"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "<Lambda-function-ARN>",
      "Condition": {
        "ArnLike": {
          "AWS:SourceArn": "<Cloudwatch-event-rule-ARN>"
        }
      }
    }
  ]
}

Configurez la fonction Lambda pour publier un objet d'e-mail personnalisé ou un message personnalisé dans la rubrique Amazon SNS

Pour plus d'informations, consultez Publier (référence API).

Important : Les extraits de code suivants sont à titre de référence uniquement. N'utilisez pas les extraits de code dans votre environnement de production avant de les tester.

Exemple d'appel d'API de publication Python

import boto3
import json
sns_arn = "<SNS_TOPC_ARN>"

def lambda_handler(event, context):
    client = boto3.client("sns")
    resp = client.publish(TargetArn=sns_arn, Message=json.dumps(event), Subject="<CUSTOM_SUBJECT>")
Exemple d'appel d'API de publication JavaScript/NodeJS
const AWS = require('aws-sdk');

exports.handler = (event, context, callback) => {
    let sns = new AWS.SNS();
    sns.publish({
    TopicArn: '<SNS_TOPIC_ARN>',
    Message: JSON.stringify(event), 
    Subject: '<CUSTOM_SUBJECT>'
    }, function(error, data){
       if(error) console.log(error, error.stack);
       callback(error, data);
     });
};

Important : Assurez-vous de remplacer les valeurs pour <SNS_TOPIC_ARN> et <CUSTOM_SUBJECT>  par vos propres entrées.

De cette façon, vous pouvez utiliser une fonction Lambda pour personnaliser et transférer l'objet ou le message d'une règle CloudWatch Events à une rubrique Amazon SNS.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?