Como posso alterar a linha de assunto do e-mail padrão do Amazon SNS, "Mensagem de notificação da AWS", para uma regra de eventos do CloudWatch?

Data da última atualização: 14/12/2021

Eu configurei meu Amazon Simple Notification Service (Amazon SNS) para receber notificações por e-mail de uma regra do Amazon EventsBridge que tem várias origens de eventos. Como personalizo a linha de assunto padrão do e-mail do SNS, “Mensagem de notificação da AWS”, e o corpo do e-mail com base no evento que aciona a notificação?

Breve descrição

No momento, não há como personalizar a mensagem de um e-mail do Amazon SNS com base em regras específicas do EventBridge usando o console do Amazon SNS.

Use uma função do Lambda, em vez do tópico do Amazon SNS, como destino para a regra EventBridge. Em seguida, configure a função do Lambda para publicar uma mensagem personalizada no tópico do Amazon SNS quando acionada pela regra EventBridge.

Veja como a lógica funciona:

  1. A regra EventBridge é acionada.
  2. A função Lambda é invocada com a carga útil da regra EventBridge.
  3. A função chama a API de publicação do Amazon SNS.
  4. O Amazon SNS entrega uma notificação por e-mail com um assunto ou mensagem personalizada.

Resolução

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), certifique-se de estar usando a versão mais recente da AWS CLI.

Crie uma função do AWS Lambda definida como um destino para a regra EventBridge

Para obter mais informações, consulte Tutorial: agendar funções do AWS Lambda usando o EventBridge.

Importante: verifique se a função de execução da função do Lambda tem permissão para publicar no tópico do Amazon SNS. Por exemplo, se a função de execução da sua função tiver a política gerenciada da AWS, AWSLambdaBasicExecutionRole, você deverá anexar a política AmazonSNSFullAccess à função de execução.

Depois que a função do Lambda é definida como um destino para a regra EventBridge, a seguinte política baseada em recursos é adicionada automaticamente à função:

{
  "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": "Eventbridge-rule-ARN"
        }
      }
    }
  ]
}

Configurar a função do Lambda para publicar um assunto de e-mail personalizado ou uma mensagem personalizada no tópico do Amazon SNS

Para obter mais informações, consulte a Publicação (referência de API).

Importante: Os trechos de código a seguir são apenas para referência. Não use os trechos de código em seu ambiente de produção antes de testá-los.

Exemplo de chamada de API de publicação 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")

Exemplo de chamada de API de publicação JavaScript/Node.js

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);
     });
};

Importante: certifique-se de substituir os valores de SNS_TOPIC_ARN e CUSTOM_SUBJECT por suas próprias entradas.

Dessa forma, você pode usar uma função do Lambda para personalizar e encaminhar o assunto ou a mensagem de e-mail de uma regra do EventBridge para um tópico do Amazon SNS.