Hinweis:

E-Mail-Benachrichtigungen für Oracle Cloud Infrastructure Events in OCI Monitoring einrichten

Einführung

Oracle Cloud Infrastructure-(OCI-)Services geben Ereignisse aus. Dies sind strukturierte Nachrichten, die Änderungen an Ressourcen angeben. Sie müssen Regeln erstellen, um mit Ereignissen zu arbeiten. Außerdem müssen Sie eine Aktion angeben, die ausgelöst werden soll, wenn ein übereinstimmendes Ereignis gefunden wird.

E-Mail-Benachrichtigungsaktionen sind eine Antwort, die Sie für Ereignisübereinstimmungen definieren. Der OCI-E-Mail-Zustellungsservice bietet eine schnelle und zuverlässige verwaltete Lösung zum Senden sicherer, volumenintensiver und transaktionaler E-Mail-Benachrichtigungen.

Ziele

Voraussetzungen

Der Oracle Cloud Infrastructure Identity and Access Management-(OCI IAM-)Administrator muss Folgendes erstellen:

Weitere Informationen zum abonnierten und bevorzugten E-Mail-Zustellungsbereich finden Sie unter SMTP-Verbindungsendpunkt konfigurieren.

Aufgabe 1: Genehmigten Absender in E-Mail-Zustellung konfigurieren

Für alle Absenderadressen, die E-Mails über OCI senden, muss ein genehmigter Absender eingerichtet werden. Sie ist mit einem Compartment verknüpft und nur in der Region vorhanden, in der der der genehmigte Absender konfiguriert wurde.

Sie können Ihren Domainnamen oder die Standardbenachrichtigung "oracle" für den genehmigten Absender verwenden, wie unten erwähnt.

  1. Öffnen Sie das Navigationsmenü der OCI-Konsole, und klicken Sie auf Entwicklerservices.

  2. Klicken Sie unter "Anwendungsintegration" auf E-Mail-Versand.

  3. Klicken Sie unter "E-Mail-Versand" auf Genehmigte Absender.

  4. Klicken Sie auf Genehmigten Absender erstellen, und geben Sie die E-Mail-Adresse ein, die Sie als genehmigter Absender listen möchten.

    Hinweis: Wenn der SMTP-Verbindungsendpunkt der OCI-E-Mail-Zustellung SMTP.email.ap-mumbai-1.OCI.oraclecloud.com lautet, fügen Sie noreply@notification zur Region hinzu, und geben Sie die E-Mail-Adresse des genehmigten Absenders ein. Beispiel: noreply@notification.ap-mumbai-1.oci.oraclecloud.com.

  5. Klicken Sie auf Hinzufügen, um der Liste der genehmigten Absender eine E-Mail-Adresse hinzuzufügen.

Aufgabe 2: Tag-Namespace und Schlüsseldefinition erstellen

  1. Öffnen Sie das Navigationsmenü, und klicken Sie auf Governance und Administration.

  2. Klicken Sie unter "Mandantenverwaltung" auf Tag-Namespaces.

  3. Klicken Sie auf der Seite "Tag-Namespaces" auf Tag-Namespaces erstellen.

  4. Wählen Sie im Bereich "Tag-Namespace erstellen" das entsprechende Compartment aus, geben Sie benutzerdefiniert in den Namespace-Namen ein, und geben Sie eine Beschreibung an.

  5. Klicken Sie im benutzerdefinierten Namespace auf Tagschlüsseldefinitionen erstellen, geben Sie Empfänger in den Tagschlüssel ein, und erstellen Sie ihn.

    Hinweis: Sie können die Empfänger-E-Mail-Adressen zum definierten Tag in jeder OCI-Ressource hinzufügen, wenn eine Benachrichtigung erforderlich ist. Die Lösung verwendet recipient addresses, um zu benachrichtigen, wenn sie im Cloud-Ereignis verfügbar ist. Andernfalls wird die Adresse defaultrecepient in der Funktionskonfiguration angegeben. Beispiel: demouser1@abc.com,demouser2@abc.com

Aufgabe 3: Secret in OCI Vault erstellen

  1. Öffnen Sie das Navigationsmenü, klicken Sie auf Identität und Sicherheit, und klicken Sie dann auf Vault.

  2. Wählen Sie im Listengeltungsbereich ein Compartment aus, das den Vault enthält.

    Hinweis: Wenn Sie einen neuen Vault und Master-Verschlüsselungsschlüssel erstellen müssen, befolgen Sie die Anweisungen unter Vault erstellen und Master-Verschlüsselungsschlüssel.

  3. Klicken Sie unter "Ressourcen" auf Secret erstellen, und wählen Sie den entsprechenden Masterverschlüsselungsschlüssel aus.

    • Geben Sie smptppass in das Namensfeld und die Beschreibung des SMTP-Kennworts für die OCI-E-Mail-Zustellungsauthentifizierung ein.

    • Wählen Sie das Format plain-text für die Secret-Typvorlage aus, und geben Sie smtp password als Inhalt des Secrets ein.

      Hinweis: Verwenden Sie das von OCI IAM-Administrator freigegebene SMTP-Kennwort.

Aufgabe 4: OCI-Funktion erstellen und bereitstellen

  1. Klicken Sie in der OCI-Konsole in der oberen Navigationsleiste auf Cloud Shell.

  2. Erstellen Sie eine Funktion mit der Fn-Projekt-CLI aus der cloud shell.

    fn init --runtime python <function-name>
    
    Example: fn init --runtime python emaildelivery-func
    
  3. Verzeichnis in das neu erstellte Verzeichnis ändern.

  4. App erstellen, um die Funktion bereitzustellen.

    # Specify the OCID of subnet
    fn create app emaildeliveryapp --annotation oracle.com/oci/subnetIds='["<subnet OCID>"]'
    
    Example:  fn create app emaildeliveryapp --annotation oracle.com/oci/subnetIds='["ocid1.subnet.oc1.ap-mumbai-1.aaaaaaaabitp32dkyox37qa3tk3evl2nxivwb....."]'
    
  5. Kopieren Sie das folgende Skript, und fügen Sie es in die Datei func.py ein, indem Sie den vorhandenen Inhalt überschreiben.

    # python script for sending SMTP configuration with Oracle Cloud Infrastructure Email Delivery
    import io
    import json
    import logging
    import oci
    from fdk import response
    import smtplib
    import email.utils
    import ssl
    import base64
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    from email.mime.base import MIMEBase
    
    # Get Resource Principal Credentials
    signer = oci.auth.signers.get_resource_principals_signer()
    
    # Get instance principal context
    secret_client = oci.secrets.SecretsClient(config={}, signer=signer)
    identity_client = oci.identity.IdentityClient(config={}, signer=signer)
    tenancy_data = identity_client.get_tenancy(tenancy_id=signer.tenancy_id).data
    t_name = str(tenancy_data.name)
    t_id = signer.tenancy_id
    
    # Retrieve secret
    def read_secret_value(secret_client, secret_id):
       response = secret_client.get_secret_bundle(secret_id)
       base64_Secret_content = response.data.secret_bundle_content.content
       base64_secret_bytes = base64_Secret_content.encode('ascii')
       base64_message_bytes = base64.b64decode(base64_secret_bytes)
       secret_content = base64_message_bytes.decode('ascii')
       return secret_content
    
    # Sender name
    sendername = 'noreply'
    
    # If you're using Email Delivery in a different region, replace the HOST value with an appropriate SMTP endpoint.
    # Use port 25 or 587 to connect to the SMTP endpoint.
    port = 587
    
    # Reading company logo information in base64 encoded
    with open("companylogo.png", "rb") as image_file:
       image_data = base64.b64encode(image_file.read())
    image_data = '<img src="data:image/png;base64,'+str(image_data)[2:]+'" alt="company logo" />'
    
    def handler(ctx, data: io.BytesIO=None):
       try:
          # Extracting function config values
          cfg = ctx.Config()
          smtp_user = cfg["smtpuser"]
          host = cfg["host"]
          sender = cfg["sender"]
          smtp_defrec = cfg["defaultrecipient"]
          smtp_pass = cfg["smtppass"]
    
          # Secrets from vault
          smtp_pass = read_secret_value(secret_client, secret_id=smtp_pass )
    
          # Extracting values from triggered OCI event
          body = json.loads(data.getvalue())
          e_Type = body.get("eventType")
          e_time = body.get("eventTime")
          r_name = body["data"]["resourceName"]
          c_id = body["data"]["compartmentId"]
          c_name = body["data"]["compartmentName"]
          r_id = body["data"]["resourceId"]
          add_detail = ""
    
          try:
                # Extracting additional details from OCI event
                details = body["data"]["additionalDetails"]
                for key, value in details.items():
                   add_detail = add_detail+str(key)+' : '+str(value)+'<br>'
          except (Exception, ValueError) as ex:
                add_detail = "Additional details not available for this OCI event"
    
          try:
                # Extracting recepient details if available in OCI event
                recipient = body["data"]["definedTags"]["custom"]["recipient"]
          except Exception as e:
                recipient = smtp_defrec
    
          # Extract event type
          e_Type = e_Type.split('com.oraclecloud.')[1]
    
          # Extract region name
          r_id = r_id.split('.')[3]
    
          # The subject line of the email.
          SUBJECT = 'Event | '+ r_name + ' | ' + e_Type + ' | ' + e_time
    
          BODY_HTML = """\
          <html>
             <head></head>
             <body>
             """ +str(image_data)+ """
             <h2>Oracle Cloud Notification</h2>
             <hr>
             <b>Event Time : </b>""" +str(e_time)+ """
             <br>
             <b>Event Type : </b>""" +str(e_Type)+ """
             <br>
             <b>Tenancy Name : </b>""" +str(t_name)+ """
             <br>
             <b>Tenancy ID : </b>""" +str(t_id)+ """
             <hr>
             <b>Resource Name : </b>""" +str(r_name)+ """
             <br>
             <b>Region Name : </b>""" +str(r_id)+ """
             <br>
             <b>Compartment ID : </b>""" +str(c_id)+ """
             <br>
             <b>Compartment Name : </b>""" +str(c_name)+ """
             <hr>
             <b>Details : </b><br>""" +str(add_detail)+ """
             <hr>
          <br>
          <p>
          Thank you, <br>
          The OCI team <br><br><br>
          Please do not reply directly to this email. This mailbox is not monitored. If you have any questions regarding this notification, contact your account administrator. <br>
          </p>
          </body>
          </html>
          """
    
          # create message container
          msg = MIMEMultipart()
          msg['Subject'] = SUBJECT
          msg['From'] = email.utils.formataddr((sendername, sender))
          msg['To'] = recipient
    
          # Attach HTML body for email
          msg.attach(MIMEText(BODY_HTML, 'html'))
    
          # Attach JSON payload as attachement
          attach_file = json.dumps(body,indent=2)
          payload = MIMEBase('application', 'octate-stream')
          payload.set_payload(attach_file)
          payload.add_header('Content-Disposition', 'attachment', filename='event_output.json')
          msg.attach(payload)
    
          # Try to send the message.
          server = smtplib.SMTP(host, port)
          server.ehlo()
          # most python runtimes default to a set of trusted public CAs that will include the CA used by OCI Email Delivery.
          # However, on platforms lacking that default (or with an outdated set of CAs), customers may need to provide a capath that includes our public CA.
          server.starttls(context=ssl.create_default_context(purpose=ssl.Purpose.SERVER_AUTH, cafile=None, capath=None))
          # smtplib docs recommend calling ehlo() before & after starttls()
          server.ehlo()
          server.login(smtp_user, smtp_pass)
    
          # our requirement is that SENDER is the same as From address set previously
          server.sendmail(sender, recipient, msg.as_string())
          server.close()
          # Display an error message if something goes wrong.
       except (Exception, ValueError) as ex:
          logging.getLogger().info('error parsing json payload: ' + str(ex))
    
       return response.Response(ctx, response_data=json.dumps({"message": "success"}),headers={"Content-Type": "application/json"})
    
  6. Sie können companylogo.png durch Ihr Unternehmenslogo ersetzen und HTML-Text als E-Mail-Text im Skript aktualisieren. Der Standardwert ist Oracle-Logo.

  7. Führen Sie den folgenden Befehl aus, um die Funktion bereitzustellen.

    fn -v deploy --app <app-name>
    
    Example: fn -v deploy --app emaildeliveryapp
    
  8. Führen Sie unten aus, um die Funktionskonfiguration für jeden Konfigurationsschlüssel und -wert hinzuzufügen.

    • Absender: Verwenden Sie den in Aufgabe 1 konfigurierten genehmigten Absender.

    • smtpuser: Von OCI IAM-Administrator gemeinsam verwendeter SMTP-Benutzer.

    • smtppass: OCID des SMTP-Kennwort-Vault Secrets verwenden und in smtppass-Konfigurationswert aktualisieren.

    • host: Verwenden Sie den SMTP-Verbindungsendpunkt entsprechend der Voraussetzung.

    • defaultrecipient: Geben Sie die E-Mail-Adresse als Standardempfänger an. Die Lösung verwendet _recipient addresses_, um zu benachrichtigen, wenn sie im Cloud-Ereignis verfügbar ist. Andernfalls wird die Adresse _defaultrecepient_ in der Funktionskonfiguration verwendet.

    fn config function <app-name> <function-name> <config-key> <config-value>
    
    Example: fn config function emaildeliveryapp emaildelivery-func sender noreply@notification.ap-mumbai-1.oci.oraclecloud.com
    

Aufgabe 5: Ereignisregel erstellen

  1. Öffnen Sie das Navigationsmenü, und klicken Sie auf Observability and Management.

  2. Klicken Sie unter Events-Serviceauf Regeln.

  3. Klicken Sie auf Regel erstellen, und geben Sie im Bereich "Regel erstellen" einen freundlichen Namen für die Regel und eine Beschreibung für die Regel an.

  4. Geben Sie im Bereich Regelbedingungen den Ereignistyp und die Aktion zum Auslösen der Funktion an. Sie können Filter basierend auf Ereignistypen, Attributen und Tags definieren, um die Ereignisse zu begrenzen, die Aktionen auslösen. Im Folgenden finden Sie ein Beispiel zum Auslösen eines Start- oder Stoppereignisses für die Compute-Instanz.

    Ereignisregel für Compute-Instanz

Aufgabe 6: E-Mail-Benachrichtigung validieren

  1. Starten oder stoppen Sie die Compute-Instanz im Compartment, in dem eine Ereignisregel erstellt wurde, um das OCI-Ereignis auszulösen.

  2. Sie erhalten eine E-Mail-freundliche Benachrichtigung sowie angehängtes Raw JSON.

    E-Mail-Benachrichtigung

Danksagungen

Autor - Dipesh Kumar Rathod (Master Principal Cloud Architect, Infrastructure)

Weitere Lernressourcen

Sehen Sie sich andere Übungen zu docs.oracle.com/learn an, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube-Kanal zu. Besuchen Sie außerdem die Website education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.

Produktdokumentation finden Sie im Oracle Help Center.