Come posso ricevere un avviso e-mail quando il mio stack AWS CloudFormation entra nello stato ROLLBACK_IN_PROGRESS?

6 minuti di lettura
0

Desidero ricevere un avviso via e-mail quando il mio stack AWS CloudFormation entra nello stato ROLLBACK_IN_PROGRESS durante la creazione dello stack.

Breve descrizione

Dopo aver completato i passaggi nella sezione Risoluzione, puoi aspettarti che la notifica funzioni come segue:

  1. Lo stack AWS CloudFormation invia tutte le notifiche all'argomento Amazon Simple Notification Service (Amazon SNS) che notifica una funzione AWS Lambda.
  2. La funzione Lambda analizza le notifiche e invia solo le notifiche "ROLLBACK_IN_PROGRESS" a un secondo argomento Amazon SNS configurato per gli avvisi via e-mail.
  3. Questo secondo argomento SNS invia un'e-mail agli iscritti in merito al messaggio "ROLLBACK_IN_PROGRESS".

Risoluzione

Crea un argomento SNS e un abbonamento per gli avvisi via e-mail

1.    Apri la console Amazon SNS.

  1. Nel riquadro di navigazione, scegli Topics.

Nota: Per utilizzare un argomento esistente, selezionalo dall'elenco delle risorse, quindi vai al passaggio 7.

  1. Scegli Crea argomento.

  2. In Nome, inserisci il nome di un argomento.

  3. In Nome visualizzato, inserisci un nome visualizzato.

  4. Scegli Crea argomento.

  5. Annota l'Amazon Resource Name (ARN) del tuo argomento per un uso successivo.

  6. Scegli Crea abbonamento.

  7. Per Argomento ARN, scegli l'ARN dell'argomento SNS che hai annotato nel passaggio 7.

  8. Per Protocollo, scegli Email.

  9. Per Endpoint, inserisci il tuo indirizzo email.

  10. Scegli Crea abbonamento.

Nota: Riceverai un'email di conferma dell'iscrizione da Amazon SNS dall'indirizzo email che hai inserito nel passaggio 11.

  1. Dal messaggio e-mail di conferma, scegli Conferma iscrizione.

Vedrai un messaggio di conferma dell'iscrizione nel tuo browser.

Crea una policy di AWS Identity and Access Management (IAM) che consenta a Lambda di pubblicare avvisi via e-mail sull'argomento SNS

Nota: Questa politica consente inoltre a Lambda di scrivere su Amazon CloudWatch Logs.

  1. Apri la console IAM.

  2. Nel riquadro di navigazione, scegli Politiche.

  3. Scegli Crea politica.

  4. Scegli la scheda JSON, quindi inserisci il seguente codice nell'editor di codice 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: Sostituisci awsExampleSNSTopicARN con l'ARN per l'argomento SNS che hai creato per gli avvisi e-mail.

  1. Scegli Politica di revisione.

  2. In Nome, inserisci un nome per la politica.

  3. Scegli Crea politica.

Associa la policy IAM a un ruolo IAM per Lambda

  1. Apri la console IAM.

  2. Nel riquadro di navigazione, scegliRuoli.

  3. Scegli Crea ruolo.

  4. Nella sezione Seleziona il tipo di entità affidabile, scegli il servizio AWS.

  5. Nella sezione Scegli il servizio che utilizzerà questo ruolo, scegli Lambda.

6.    Scegli Avanti: Autorizzazioni.

  1. Nella barra di ricerca, inserisci il nome della politica che hai creato in precedenza, quindi seleziona quella politica.

  2. Scegli Next:Tags, quindi crea un tag IAM opzionale.

9.    Scegli Avanti: Revisione.

  1. Per Nome ruolo, inserisci un nome di ruolo.

  2. Scegli Crea ruolo.

Crea una funzione Lambda e assegna il ruolo IAM che hai creato

  1. Apri la console Lambda.

  2. Scegli Crea funzione.

  3. Scegli Autore da zero.

  4. In Nome, inserisci un nome per la funzione Lambda.

  5. Per Runtime, scegli Node.js 10.x.

  6. Per il ruolo di Esecuzione, scegli Usa un ruolo esistente.

  7. Per Ruolo esistente, scegli il ruolo IAM che hai creato in precedenza.

  8. Scegli Crea funzione.

Crea un secondo argomento SNS e un secondo abbonamento per notificare la funzione Lambda

1.    Apri la console Amazon SNS.

  1. Nel riquadro di navigazione, scegli Topics.

  2. Scegli Crea argomento.

  3. In Nome, inserisci il nome di un argomento.

  4. In Nome visualizzato, inserisci un nome visualizzato.

  5. Scegli Crea argomento.

  6. Annota l'ARN del tuo argomento per un uso successivo.

  7. Scegli Crea abbonamento.

  8. Per Argomento ARN, scegli l'ARN dell'argomento SNS che hai annotato nel passaggio 7.

  9. Per Protocol, scegli AWS Lambda.

  10. Per Endpoint, scegli la funzione Lambda che hai creato.

  11. Scegli Crea abbonamento.

Aggiorna la funzione Lambda con uno script che pubblica nell'argomento SNS

  1. Apri la console Lambda.

  2. Nel riquadro di navigazione, scegli Funzioni, quindi seleziona la funzione che hai creato in precedenza.

  3. Nella sezione Codice funzione, inserisci il seguente script nel riquadro dell'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: Sostituisci awsExampleSNSTopicARN con l'ARN per l'argomento SNS che hai creato per gli avvisi e-mail.

  1. Nella vista Designer, nella sezione Aggiungi frigger, scegli SNS.

  2. Nella sezione Configurazione dei trigger, per l'argomento SNS, scegli l'argomento SNS che hai creato per notificare la funzione Lambda.

  3. Scegli Aggiungi.

  4. Scegli Salva.

Imposta il tuo stack AWS CloudFormation per inviare tutte le notifiche all'argomento SNS che notifica la funzione Lambda

  1. Apri la console AWS CloudFormation e segui i passaggi della procedura guidata di configurazione per creare uno stack.

  2. Per le opzioni di notifica, scegli l'argomento Amazon SNS esistente.

  3. Scegli l'argomento SNS che hai creato per notificare la funzione Lambda.

  4. Completa i passaggi della procedura guidata di configurazione per creare il tuo stack.

Se utilizzi l'interfaccia a riga di comando AWS (AWS CLI) per creare uno stack, utilizza il comando --notification-arns. Questo comando invia notifiche all'argomento SNS che notifica la funzione Lambda. Quindi, imposta il valore dell'argomento SNS su SNS ARN.


Informazioni correlate

Frammenti di modello

Anatomia del modello

Migliori pratiche di AWS CloudFormation

AWS UFFICIALE
AWS UFFICIALEAggiornata 4 anni fa