Comment recevoir une alerte par e-mail lorsque ma pile AWS CloudFormation passe à l'état ROLLBACK_IN_PROGRESS ?

Lecture de 7 minute(s)
0

Je souhaite recevoir une alerte e-mail lorsque ma pile AWS CloudFormation passe à l'état ROLLBACK_IN_PROGRESS lors de sa création.

Brève description

Après avoir exécuté les étapes de la section Résolution, les notifications fonctionnent comme suit :

  1. Votre pile AWS CloudFormation envoie toutes les notifications à la rubrique Amazon Simple Notification Service (Amazon SNS) qui notifie une fonction AWS Lambda.
  2. La fonction Lambda analyse les notifications et n'envoie que les notifications “ROLLBACK_IN_PROGRESS” à une seconde rubrique Amazon SNS configurée pour recevoir par des alertes par e-mail.
  3. Cette seconde rubrique SNS envoie un e-mail aux abonnés concernant le message « ROLLBACK_IN_PROGRESS ».

Solution

Créer une rubrique SNS et un abonnement pour les alertes par e-mail

1.    Ouvrez la console Amazon SNS.

2.    Dans le volet de navigation, choisissez Topics (Rubriques).

Remarque : pour utiliser une rubrique existante, sélectionnez la rubrique dans la liste des ressources, puis passez à l'étape 7.

3.    Choisissez Create topic (Créer une rubrique).

4.    Pour Name (Nom), saisissez un nom de rubrique.

5.    Pour Display name (Nom d'affichage), saisissez un nom d'affichage.

6.    Choisissez Create topic (Créer une rubrique).

7.    Notez le nom ARN (Amazon Resource Name) pour l'utiliser ultérieurement.

8.    Sélectionnez Create subscription(Créer un abonnement).

9.    Pour Topic ARN (Nom ARN de la rubrique), choisissez le nom ARN de la rubrique SNS que vous avez notée à l'étape 7.

10.    Pour Protocol (Protocole), choisissez Email.

11.    Pour Endpoint (Point de terminaison), saisissez votre adresse e-mail.

12.    Sélectionnez Create subscription(Créer un abonnement).

Remarque : vous recevez un e-mail de confirmation d'abonnement d'Amazon SNS de l'adresse e-mail que vous avez saisie à l'étape 11.

13.    Dans l'e-mail de confirmation, choisissez Confirm subscription (Confirmer un abonnement).

Un message de confirmation d'abonnement s'affiche dans votre navigateur.

Créer une stratégie AWS Identity and Access Management (IAM) qui permet à Lambda de publier dans la rubrique SNS pour les alertes par e-mail

Remarque : cette stratégie permet également à Lambda d'écrire dans les Amazon CloudWatch Logs.

1.    Ouvrez la console IAM.

2.    Dans le volet de navigation, choisissez Policies (Stratégies).

3.    Choisissez Create policy (Créer une stratégie).

4.    Choisissez l'onglet JSON, puis saisissez le code suivant dans l'éditeur de code 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:*:*:*"
    }
  ]
}

Remarque : remplacez awsExampleSNSTopicARN par le nom ARN de la rubrique SNS que vous avez créée pour les alertes par e-mail.

5.    Choisissez Review policy (Vérifier la stratégie).

6.    Pour Name (Nom), saisissez un nom de stratégie.

7.    Choisissez Create policy (Créer une stratégie).

Associer la stratégie IAM à un rôle IAM pour Lambda

1.    Ouvrez la console IAM.

2.    Dans le volet de navigation, choisissez Roles (Rôles).

3.    Sélectionnez “Create role” (Créer un rôle).

4.    Dans la section Select type of trusted entity (Sélectionner le type d'entité de confiance), choisissez AWS service (Service AWS).

5.    Dans la zone Choose the service that will use this role (Choisir le service qui utilisera ce rôle), choisissez Lambda.

6.    Choisissez Next: Permissions (Étape suivante : autorisations).

7.    Dans la barre de recherche, saisissez le nom de la stratégie que vous avez créée précédemment, puis sélectionnez la stratégie.

8.    Choisissez Next : Tags (Étape suivante : balises), puis créez une balise IAM facultative.

9.    Sélectionnez Next: Review (Étape suivante : vérification).

10.    Pour Role name (Nom de rôle), saisissez un nom de rôle.

11.    Sélectionnez “Create role” (Créer un rôle).

Créer une fonction Lambda et attribuer le rôle IAM que vous avez créé

1.    Ouvrez la console Lambda.

2.    Choisissez Créer une fonction.

3.    Choisissez Author from scratch (Créer à partir de zéro).

4.    Pour Name (Nom), saisissez le nom de la fonction Lambda.

5.    Pour Runtime (Exécution), choisissez Node.js 10.x.

6.    Pour Execution role (Rôle d'exécution), choisissez Use an existing role (Utiliser un rôle existant).

7.    Pour Existing role (Rôle existant), choisissez le rôle IAM que vous avez créé précédemment.

8.    Choisissez Créer une fonction.

Créer une seconde rubrique SNS et un abonnement pour notifier la fonction Lambda

1.    Ouvrez la console Amazon SNS.

2.    Dans le volet de navigation, choisissez Topics (Rubriques).

3.    Choisissez Create topic (Créer une rubrique).

4.    Pour Name (Nom), saisissez un nom de rubrique.

5.    Pour Display name (Nom d'affichage), saisissez un nom d'affichage.

6.    Choisissez Create topic (Créer une rubrique).

7.    Notez le nom ARN de la rubrique pour l'utiliser ultérieurement.

8.    Sélectionnez Create subscription(Créer un abonnement).

9.    Pour Topic ARN (Nom ARN de la rubrique), choisissez le nom ARN de la rubrique SNS que vous avez notée à l'étape 7.

10.    Pour Protocol (Protocole), choisissez AWS Lambda.

11.    Pour Endpoint (Point de terminaison), choisissez la fonction Lambda que vous avez créée.

12.    Sélectionnez Create subscription(Créer un abonnement).

Mettre à jour la fonction Lambda avec un script qui publie dans la rubrique SNS

1.    Ouvrez la console Lambda.

2.    Dans le volet de navigation, choisissez Functions (Fonctions), puis sélectionnez la fonction que vous avez créée précédemment.

3.    Dans la section Function code (Code de fonction), saisissez le script suivant dans le volet de l'éditeur :

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

Remarque : remplacez awsExampleSNSTopicARN par le nom ARN de la rubrique SNS que vous avez créée pour les alertes par e-mail.

4.    Dans la vue Designer, dans la section Add triggers (Ajouter des déclencheurs), choisissez SNS.

5.    Dans la section Configure triggers (Configurer des déclencheurs), pour la SNS topic (Rubrique SNS), choisissez la rubrique SNS que vous avez créée pour notifier la fonction Lambda.

6.    Choisissez Add (Ajouter).

7.    Sélectionnez Enregistrer.

Définir votre pile AWS CloudFormation pour envoyer toutes les notifications à la rubrique SNS qui notifie la fonction Lambda

1.    Ouvrez la console AWS CloudFormation , puis suivez les étapes dans l'assistant de configuration pour créer une pile.

2.    Pour Notification options (Options de notification), choisissez Existing Amazon SNS topic (Rubrique Amazon SNS existante).

3.    Choisissez la rubrique SNS que vous avez créée pour notifier la fonction Lambda.

4.    Suivez les étapes de l'assistant de configuration pour créer votre pile.

Si vous utilisez l'interface de ligne de commande AWS (AWS CLI) pour créer une pile, puis utilisez la commande --notification-arns. Cette commande envoie des notifications à la rubrique SNS qui informe la fonction Lambda. Ensuite, définissez le nom ARN SNS comme valeur de la rubrique SNS.


Informations connexes

Extraits de code de modèle

Anatomie de modèle

Bonnes pratiques concernant AWS CloudFormation

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 4 ans