Direkt zum Inhalt

Wie kann ich eine AWS-Lambda-Funktion verwenden, um SNS-Benachrichtigungen zu erhalten, wenn ein AWS-Glue-Job bei einer Wiederholung fehlschlägt?

Lesedauer: 5 Minute
0

Ich möchte eine AWS-Lambda-Funktion verwenden, um eine Warnung von Amazon-Simple-Notification-Service (Amazon SNS) zu erhalten, wenn mein AWS-Glue-Job bei einer Wiederholung fehlschlägt.

Kurzbeschreibung

Du kannst eine Lambda-Funktion erstellen, die das eingehende Ereignis auf eine bestimmte Zeichenfolge überprüft. Wenn die Zeichenfolge im Ereignis mit der Zeichenfolge in der Lambda-Funktion übereinstimmt, veröffentlicht die Funktion eine Nachricht an Amazon SNS.

Um eine Amazon-SNS-Benachrichtigung zu erhalten, wenn ein AWS-Glue-Job nach einer Wiederholung fehlschlägt, erstelle ein Amazon-SNS-Thema und -Abonnement. Erstelle danach eine Lambda-Funktion. Verwende Amazon EventBridge, um E-Mail-Benachrichtigungen zu veranlassen.

Lösung

Voraussetzungen:

  • Ein bestehender Extract,-Transform,-Load(ETL)-Job in AWS Glue.
  • Eine AWS-Identity-and-Access-Management(IAM)-Rolle für Lambda, die die Berechtigung zur Veröffentlichung von Amazon-SNS-Benachrichtigungen beinhaltet.

Erstellen eines Amazon-SNS-Themas und -Abonnements

Führe die folgenden Schritte aus:

  1. Öffne die Amazon-SNS-Konsole.
  2. Wähle Themen und dann Thema erstellen aus.
  3. Wähle für Typ die Option Standard aus.
  4. Gib unter Name einen Namen für das Thema ein.
  5. (Optional) Gib unter Anzeigename den Anzeigenamen für dein Thema ein.
  6. Wähle Thema erstellen aus.
  7. Wähle auf der Seite Thema die Option Abonnement erstellen aus und führe dann die folgenden Schritte aus: 
    Wähle unter Thema-ARN dein Thema aus. 
    Wähle unter Protokoll die Benachrichtigungsmethode aus, z. B. E-Mail.
    Gib unter Endpunkt die Adresse ein, die die Amazon-SNS-Benachrichtigungen erhalten soll.
  8. Wähle Abonnement erstellen.

AWS-Lambda-Funktion erstellen

Führe die folgenden Schritte aus:

  1. Öffne die Lambda-Konsole.

  2. Wähle Funktion erstellen aus.

  3. Führe auf der Seite Funktion erstellen die folgenden Schritte aus:
    Wähle Ohne Vorgabe erstellen.
    Gib unter Funktionsname den Namen deiner Funktion ein.
    Wähle unter Laufzeit eine verfügbare Python-Version.
    Erweitere die Dropdown-Liste Standard-Ausführungsrolle ändern.
    Wähle unter Ausführungsrolle die Option Verwenden einer vorhandenen Rolle.
    Wähle unter Vorhandene Rolle die IAM-Rolle mit der Berechtigung zum Senden von Amazon-SNS-Benachrichtigungen aus.

  4. Wähle Funktion erstellen aus.

  5. Wähle auf der Registerkarte Code im Abschnitt Codequelle die Option Datei und dann Neue Datei aus.

    Benenne die Datei und gib dann den folgenden Code ein:

    import json
    import logging
    import boto3
    
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)
    
    client = boto3.client('sns')
    
    SNS_TOPIC_ARN = "REPLACE_WITH_YOUR_SNS_TOPIC_ARN"
    
    def lambda_handler(event, context):
        logger.info(f"## INITIATED BY EVENT: \n{event['detail']}")
    
        glue_job_name = event['detail']['jobName']
        jobrun_id = event['detail']['jobRunId']
    
        if jobrun_id.endswith('_attempt_1'):
            logger.info(f'## GLUE JOB FAILED RETRY: {glue_job_name}')
            message = (
                f"A Glue job failed after retrying.\n"
                f"Job name: {glue_job_name}\n"
                f"JobRun ID: {jobrun_id}"
            )
            client.publish(
                TargetArn=SNS_TOPIC_ARN,
                Message=json.dumps({'default': json.dumps(message)}),
                Subject='AWS Glue Job Retry Failure Notification',
                MessageStructure='json'
            )

    Hinweis: Ersetze SNS_TOPIC_ARN durch den ARN deines Amazon-SNS-Themas.

  6. Wähle Datei aus und dann Speichern.

  7. Gib unter Dateiname einen Dateinamen ein.

  8. Wähle Bereitstellen aus.

(Optional) Gehe wie folgt vor, um das Ereignis zu testen:

  1. Wähle die Registerkarte Testen.

  2. Gib unter Ereignisname den Namen ein.

    Gib im JSON-Textkörper des Ereignisses den folgenden Code ein:

    {    "version": "0",
        "id": "abcdef01-1234-5678-9abc-def012345678",
        "detail-type": "Glue Job State Change",
        "source": "aws.glue",
        "account": "123456789012",
        "time": "2017-09-07T06:02:03Z",
        "region": "us-west-2",
        "resources": [],
        "detail": {
            "jobName": "MyTestJob",
            "severity": "ERROR",
            "state": "FAILED",
            "jobRunId": "jr_0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef_attempt_1",
            "message": "JobName:MyTestJob and JobRunId:jr_0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef failed to execute with exception Role arn:aws:iam::123456789012:role/Glue_Role should be given assume role permissions for Glue Service."
        }
    }

    Hinweis: Ersetze MyTestJob durch deinen AWS-Glue-Jobnamen.

  3. Wähle Änderungen speichern und dann Testen aus.

  4. Das Ausführungsergebnis wird angezeigt.

  5. Vergewissere dich, dass du eine Amazon-SNS-Warnung erhältst.

Amazon EventBridge verwenden, um E-Mail-Benachrichtigungen zu veranlassen

Führe die folgenden Schritte aus:

  1. Öffnen Sie die EventBridge-Konsole.

  2. Wähle im Navigationsbereich Regeln und dann Regel erstellen aus.

  3. Führe auf der Seite Regel erstellen die folgenden Schritte aus:
    Gib unter Name den Namen der Regel ein.
    (Optional) Gib unter Beschreibung die Beschreibung der Regel ein.
    Wählen Sie für Muster definieren die Option Ereignismuster aus.
    Wähle unter Event-Matching-Muster die Option Benutzerdefiniertes Muster aus.
    Gib unter Ereignismuster das folgende oder dein eigenes Muster ein:

    {  
    "detail-type": [ "Glue Job State Change"],
      "source": ["aws.glue"],
      "detail": {
        "state": ["FAILED"]
      }
    }
  4. Wähle Speichern aus.

  5. Führe im Abschnitt Ziele auswählen die folgenden Schritte aus:
    Wähle unter Ziel die Lambda-Funktion aus.
    Wähle unter Funktion deine Lambda-Funktion aus.

  6. Wähle Weiter und dann Regel erstellen aus.

Fehlertest mit deinem AWS-Glue-Job durchführen

Führe die folgenden Schritte aus:

  1. Öffne die AWS Glue-Konsole.
  2. Wähle im NavigationsbereichJobs dann den AWS-Glue-Job aus, den du testen möchtest.
  3. Wähle die Dropdown-Liste Aktion und danach Job bearbeiten aus.
  4. Erweitere den Abschnitt Sicherheitskonfiguration, Skriptbibliotheken und Jobparameter (optional).
  5. Gib unter Sicherheitskonfiguration unter Anzahl der Wiederholungen den Wert 1 ein.
  6. Wähle Speichern aus.
  7. Wähle auf der Seite Jobs den AWS-Glue-Job aus.
  8. Wähle die Dropdown-Liste Aktion und danach Skript bearbeiten aus.
  9. Ändere ein Element deines Codes, damit dein Job fehlschlägt. Füge beispielsweise „_BROKEN“ zu einem Tabellennamen hinzu.
  10. Wähle Speichern aus.
  11. Wähle auf der Seite Jobs den AWS-Glue-Job aus.
  12. Wähle die Dropdown-Liste Aktion und dann Job ausführen.

Nachdem der AWS-Glue-Job ein zweites Mal fehlgeschlagen ist, vergewissere dich, dass du die Amazon-SNS-Benachrichtigung erhalten hast. Überprüfe, ob dein konfigurierter Endpunkt eine Benachrichtigung erhalten hat. Entferne dann das Element, das du in deinem Code geändert hast, damit dein Job fehlschlägt.

Ähnliche Informationen

Ereignisse in Amazon EventBridge

Einrichten von Amazon SNS-Benachrichtigungen

Problembehebung bei Amazon EventBridge

AWS OFFICIALAktualisiert vor einem Jahr