Wie kann ich eine E-Mail-Benachrichtigung erhalten, wenn mein AWS CloudFormation-Stack den Status ROLLBACK_IN_PROGRESS erreicht?

Lesedauer: 6 Minute
0

Ich möchte eine E-Mail-Benachrichtigung erhalten, wenn mein AWS CloudFormation-Stack während der Stack-Erstellung den Status ROLLBACK_IN_PROGRESS erreicht.

Kurzbeschreibung

Nachdem Sie die Schritte im Abschnitt Behebung abgeschlossen haben, können Sie davon ausgehen, dass die Benachrichtigung wie folgt funktioniert:

  1. Ihr AWS CloudFormation-Stack sendet alle Benachrichtigungen an das Amazon Simple Notification Service (Amazon SNS) -Thema, das eine AWS Lambda-Funktion benachrichtigt.
  2. Die Lambda-Funktion analysiert Benachrichtigungen und sendet nur „ROLLBACK\ _IN\ _PROGRESS“ -Benachrichtigungen an ein zweites Amazon SNS-Thema, das für E-Mail-Benachrichtigungen konfiguriert ist.
  3. Dieses zweite SNS-Thema sendet eine E-Mail an Abonnenten mit der Meldung „ROLLBACK\ _IN\ _PROGRESS“.

Behebung

Ein SNS-Thema und ein Abonnement für E-Mail-Benachrichtigungen erstellen

1.    Öffnen Sie die Amazon SNS-Konsole.

2.    Wählen Sie im Navigationsbereich Themen.

Hinweis: Um ein vorhandenes Thema zu verwenden, wählen Sie dieses Thema aus der Ressourcenliste aus und fahren Sie dann mit Schritt 7 fort.

3.    Wählen Sie Thema erstellen.

4.    Geben Sie unter Name einen Themennamen ein.

5.    Geben Sie für Anzeigename einen Anzeigenamen ein.

6.    Wählen Sie Thema erstellen.

7.    Notieren Sie sich den Amazon-Ressourcennamen (ARN) Ihres Themas zur späteren Verwendung.

8.    Wählen Sie Abonnement erstellen.

9.    Wählen Sie für Topic ARN das SNS-Thema ARN aus, das Sie in Schritt 7 notiert haben.

10.    Wählen Sie für Protokoll die Option E-Mail.

11.    Geben Sie für Endpoint Ihre E-Mail-Adresse ein.

12.    Wählen Sie Abonnement erstellen.

Hinweis: Sie erhalten von Amazon SNS eine Abonnementbestätigungs-E-Mail von der E-Mail-Adresse, die Sie in Schritt 11 eingegeben haben.

13.    Wählen Sie in der Bestätigungs-E-Mail die Option Abonnement bestätigen.

In Ihrem Browser wird eine Bestätigungsnachricht für Ihr Abonnement angezeigt.

Erstellen Sie eine AWS-Richtlinie für Identity and Access Management (IAM), die es Lambda ermöglicht, E-Mail-Benachrichtigungen im SNS-Thema zu veröffentlichen

Hinweis: Diese Richtlinie ermöglicht Lambda auch, in Amazon CloudWatch Logs zu schreiben.

1.    Öffnen Sie die IAM-Konsole.

2.    Wählen Sie im Navigationsbereich Metrics.

3.    Wählen Sie Richtlinie erstellen.

4.    Wählen Sie die **Registerkarte **JSON und geben Sie dann den folgenden Code in den JSON-Code-Editor ein:

{
  "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:*:*:*"
    }
  ]
}

Hinweis: Ersetzen Sie awsExampleSNSTopicARN durch den ARN für das SNS-Thema, das Sie für E-Mail-Benachrichtigungen erstellt haben.

5.    Wählen Sie Richtlinie überprüfen.

6.    Geben Sie für Name einen Richtliniennamen ein.

7.    Wählen Sie Richtlinie erstellen.

Fügen Sie die IAM-Richtlinie einer IAM-Rolle für Lambda hinzu

1.    Öffnen Sie die IAM-Konsole.

2.    Wählen Sie im Navigationsbereich Rollen.

3.    Wählen Sie Rolle erstellen.

4.    Wählen Sie im Abschnitt Typ der vertrauenswürdigen Entität auswählen die Option AWS-Service.

5.    Wählen Sie im Abschnitt Wählen Sie den Dienst, der diese Rolle verwenden wird, Lambda.

6.    Wählen Sie Weiter: Genehmigungen.

7.    Geben Sie in der Suchleiste den Namen der Richtlinie ein, die Sie zuvor erstellt haben, und wählen Sie dann diese Richtlinie.

8.    Wählen Sie Weiter: Tags und erstellen Sie dann ein optionales IAM-Tag.

9.    Wählen Sie Weiter: Bewertung.

10.    Geben Sie für den Rollennamen einen Rollennamen ein.

11.    Wählen Sie Rolle erstellen.

Erstellen Sie eine Lambda-Funktion und weisen Sie die von Ihnen erstellte IAM-Rolle zu

1.    Öffnen Sie die Lambda-Konsole.

2.    Wählen Sie Funktion erstellen.

3.    Wählen Sie Autor von Grund auf neu.

4.    Geben Sie unter Name einen Namen für die Lambda-Funktion ein.

5.    Wählen Sie für **Runtime **Node.js 10.x.

6.    Wählen Sie für die Ausführungsrolle die Option Bestehende Rolle verwenden.

7.    Wählen Sie für Existierende Rolle die IAM-Rolle aus, die Sie zuvor erstellt haben.

8.    Wählen Sie Funktion erstellen.

Erstellen Sie ein zweites SNS-Thema und ein Abonnement, um die Lambda-Funktion zu benachrichtigen

1.    Öffnen Sie die Amazon SNS-Konsole.

2.    Wählen Sie im Navigationsbereich Themen.

3.    Wählen Sie Thema erstellen.

4.    Geben Sie unter Name einen Themennamen ein.

5.    Geben Sie für Anzeigename einen Anzeigenamen ein.

6.    Wählen Sie Thema erstellen.

7.    Notieren Sie sich den ARN Ihres Themas zur späteren Verwendung.

8.    Wählen Sie Abonnement erstellen.

9.    Wählen Sie für Topic ARN das SNS-Thema ARN aus, das Sie in Schritt 7 notiert haben.

10.    Wählen Sie als Protokoll AWS Lambda.

11.    Wählen Sie für Endpoint die Lambda-Funktion aus, die Sie erstellt haben.

12.    Wählen Sie Abonnement erstellen.

Aktualisieren Sie die Lambda-Funktion mit einem Skript, das zum SNS-Thema veröffentlicht

1.    Öffnen Sie die Lambda-Konsole.

2.    Wählen Sie im Navigationsbereich Funktionen und dann die Funktion aus, die Sie zuvor erstellt haben.

3.    Geben Sie im Abschnitt Funktionscode das folgende Skript in den Editorbereich ein:

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

Hinweis: Ersetzen Sie awsExampleSNSTopicARN durch den ARN für das SNS-Thema, das Sie für E-Mail-Benachrichtigungen erstellt haben.

4.    Wählen Sie in der Designer-Ansicht im Abschnitt Trigger hinzufügen die Option SNS.

5.    Wählen Sie im Abschnitt Trigger konfigurieren unter SNS-Thema das SNS-Thema aus, das Sie erstellt haben, um die Lambda-Funktion zu benachrichtigen.

6.    Wählen Sie Hinzufügen.

7.    Wählen Sie Speichern.

Richten Sie Ihren AWS CloudFormation-Stack so ein, dass er alle Benachrichtigungen an das SNS-Thema sendet, das die Lambda-Funktion benachrichtigt

1.    Öffnen Sie die AWS CloudFormation-Konsole und folgen Sie den Schritten des Einrichtungsassistenten, um einen Stack zu erstellen.

2.    Wählen Sie unter Benachrichtigungsoptionen das Thema Existing Amazon SNS.

3.    Wählen Sie das SNS-Thema aus, das Sie erstellt haben, um die Lambda-Funktion zu benachrichtigen.

4.    Führen Sie die Schritte im Einrichtungsassistenten aus, um Ihren Stack zu erstellen.

Wenn Sie die AWS-Befehlszeilenschnittstelle (AWS CLI) verwenden, um einen Stack zu erstellen, verwenden Sie den Befehl --notification-arns. Dieser Befehl sendet Benachrichtigungen an das SNS-Thema, das die Lambda-Funktion benachrichtigt. Stellen Sie dann den Wert des SNS-Themas auf den SNS-ARN ein.


Weitere Informationen

Schnipsel aus Vorlagen

Vorlage Anatomie

Bewährte Methoden für AWS CloudFormation