¿Cómo puedo recibir una alerta por correo electrónico cuando mi pila de AWS CloudFormation entre en estado ROLLBACK_IN_PROGRESS?

7 minutos de lectura
0

Quiero recibir una alerta por correo electrónico cuando mi pila de AWS CloudFormation entre en estado ROLLBACK_IN_PROGRESS durante la creación de la pila.

Breve descripción

Tras completar los pasos de la sección Resolución, es de esperar que la notificación funcione de la siguiente manera:

  1. La pila de AWS CloudFormation envía todas las notificaciones al tema de Amazon Simple Notification Service (Amazon SNS) que notifica a una función de AWS Lambda.
  2. La función de Lambda analiza las notificaciones y solo envía las notificaciones «ROLLBACK_IN_PROGRESS» a un segundo tema de Amazon SNS que está configurado para recibir alertas por correo electrónico.
  3. Este segundo tema de SNS envía un correo electrónico a los suscriptores en relación con el mensaje «ROLLBACK_IN_PROGRESS».

Resolución

Crear un tema de SNS y una suscripción para las alertas por correo electrónico

1.    Abra la consola de Amazon SNS.

2.    En el panel de navegación, elija Temas.

Nota: Para usar un tema existente, selecciónelo de la lista de recursos y, a continuación, vaya al paso 7.

3.    Elija Crear un tema.

4.    En Nombre, escriba un nombre de tema.

5.    En Nombre para visualización, escriba un nombre para mostrar.

6.    Elija Crear un tema.

7.    Anote el nombre de recurso de Amazon (ARN) del tema para usarlo más adelante.

8.    Elija Crear una suscripción.

9.    En ARN del tema, elija el ARN del tema de SNS que anotó en el paso 7.

10.    En Protocolo, elija Correo electrónico.

11.    En Punto de enlace, escriba su dirección de correo electrónico.

12.    Elija Crear una suscripción.

Nota: Recibirá un correo electrónico de Amazon SNS con la confirmación de la suscripción desde la dirección de correo electrónico que indicó en el paso 11.

13.    En el mensaje de correo electrónico de confirmación, elija Confirmar la suscripción.

Verá un mensaje de confirmación de la suscripción en el navegador.

Crear una política de AWS Identity and Access Management (AWS IAM) que permita a Lambda publicar en el tema de SNS para recibir alertas por correo electrónico

Nota: Esta política también permite a Lambda escribir en Registros de Amazon CloudWatch.

1.    Abra la consola de IAM.

2.    En el panel de navegación, elija Políticas.

3.    Elija Crear política.

4.    Elija la pestaña JSON y, a continuación, introduzca el siguiente código en el editor de código JSON:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sns:Publish"
      ],
      "Resource": [
        "{awsExampleSNSTopicARN}"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Resource": "arn:aws:logs:*:*:*"
    }
  ]
}

Nota: Sustituya awsExampleSNSTopicARN por el ARN del tema de SNS que creó para las alertas por correo electrónico.

5.    Elija Revisar la política.

6.    En Nombre, escriba un nombre para la política.

7.    Elija Crear política.

Asociar la política de IAM a un rol de IAM para Lambda

1.    Abra la consola de IAM.

2.    En el panel de navegación, elija Roles.

3.    Elija Crear rol.

4.    En la sección Seleccionar el tipo de entidad de confianza, elija Servicio de AWS.

5.    En la sección Elegir el servicio que utilizará este rol, elija Lambda.

6.    Elija Siguiente: Permisos.

7.    En la barra de búsqueda, escriba el nombre de la política que creó anteriormente y, a continuación, selecciónela.

8.    Elija Siguiente: Etiquetas y, a continuación, cree una etiqueta de IAM opcional.

9.    Elija Siguiente: Revisar.

10.    En Nombre de rol, escriba un nombre de rol.

11.    Elija Crear rol.

Crear una función de Lambda y asignar el rol de IAM que creó

1.    Abra la consola de Lambda.

2.    Elija Crear una función.

3.    Elija Crear desde cero.

4.    En Nombre, escriba un nombre para la función de Lambda.

5.    En Tiempo de ejecución, elija Node.js 10.x.

6.    En Rol de ejecución, elija Uso de un rol existente.

7.    En Rol existente, elija el rol de IAM que creó anteriormente.

8.    Elija Crear una función.

Crear un segundo tema de SNS y una suscripción para notificar a la función de Lambda

1.    Abra la consola de Amazon SNS.

2.    En el panel de navegación, elija Temas.

3.    Elija Crear un tema.

4.    En Nombre, escriba un nombre de tema.

5.    En Nombre para visualización, escriba un nombre para mostrar.

6.    Elija Crear un tema.

7.    Anote el ARN del tema para usarlo más adelante.

8.    Elija Crear una suscripción.

9.    En ARN del tema, elija el ARN del tema de SNS que anotó en el paso 7.

10.    En Protocolo, elija AWS Lambda.

11.    En Punto de enlace, elija la función de Lambda que creó.

12.    Elija Crear una suscripción.

Actualizar la función de Lambda con un script que publique en el tema de SNS

1.    Abra la consola de Lambda.

2.    En el panel de navegación, elija Funciones y, a continuación, seleccione la función que creó anteriormente.

3.    En la sección Código de la función, introduzca el siguiente script en el panel del editor:

topic_arn = "{awsExampleSNSTopicARN}";
var AWS = require('aws-sdk');
AWS.config.region_array = topic_arn.split(':'); // splits the ARN into an array
AWS.config.region = AWS.config.region_array[3];  // makes the 4th variable in the array (will always be the region)

// ####################   BEGIN LOGGING   ########################

console.log(topic_arn);   // just for logging to the that the var was parsed correctly
console.log(AWS.config.region_array); // to see if the SPLIT command worked
console.log(AWS.config.region_array[3]); // to see if it got the region correctly
console.log(AWS.config.region); // to confirm that it set the AWS.config.region to the correct region from the ARN

// ####################  END LOGGING (you can remove this logging section)  ########################

exports.handler = function(event, context) {
    const message = event.Records[0].Sns.Message;
    if (message.indexOf("ROLLBACK_IN_PROGRESS") > -1) {
        var fields = message.split("\n");
        subject = fields[11].replace(/['']+/g, '');
        send_SNS_notification(subject, message);   
    }
};

function send_SNS_notification(subject, message) {
    var sns = new AWS.SNS();
    subject = subject + " is in ROLLBACK_IN_PROGRESS";
    sns.publish({
        Subject: subject,
        Message: message,
        TopicArn: topic_arn
    }, function(err, data) {
        if (err) {
            console.log(err.stack);
            return;
        }
        console.log('push sent');
        console.log(data);
    });
}

Nota: Sustituya awsExampleSNSTopicARN por el ARN del tema de SNS que creó para las alertas por correo electrónico.

4.    En la vista Diseñador, en la sección Añadir desencadenadores, elija SNS.

5.    En la sección Configurar desencadenadores, para el Tema de SNS, elija el tema de SNS que creó para notificar a la función de Lambda.

6.    Elija Añadir.

7.    Elija Guardar.

Configurar la pila de AWS CloudFormation para enviar todas las notificaciones al tema de SNS que notifica a la función de Lambda

1.    Abra la consola de AWS CloudFormation y siga los pasos del asistente de configuración para crear una pila.

2.    En Opciones de notificación, elija Tema existente de Amazon SNS.

3.    Elija el tema de SNS que creó para notificar a la función de Lambda.

4.    Complete los pasos del asistente de configuración para crear la pila.

Si utiliza la Interfaz de la línea de comandos de AWS (AWS CLI) para crear una pila, utilice el comando --notification-arns. Este comando envía notificaciones al tema de SNS que notifica a la función de Lambda. A continuación, defina el valor del tema del SNS en el ARN del SNS.


Información relacionada

Template snippets

Template anatomy

AWS CloudFormation best practices

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 4 años