Hinweis:
- Dieses Tutorial erfordert Zugriff auf Oracle Cloud. Informationen zum Anmelden für einen kostenlosen Account finden Sie unter Erste Schritte mit Oracle Cloud Infrastructure Free Tier.
- Es verwendet Beispielwerte für Oracle Cloud Infrastructure-Zugangsdaten, -Mandanten und -Compartments. Wenn Sie Ihre Übung abgeschlossen haben, ersetzen Sie diese Werte durch die Werte, die für Ihre Cloud-Umgebung spezifisch sind.
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
- Senden Sie eine E-Mail-freundliche OCI-Ereignisbenachrichtigung mit OCI Email Delivery.
Voraussetzungen
Der Oracle Cloud Infrastructure Identity and Access Management-(OCI IAM-)Administrator muss Folgendes erstellen:
-
Dynamische Gruppe und Policys für OCI-Funktion zum Aufrufen und Senden von E-Mail-Benachrichtigungen.
-
Dynamische Gruppe
Erstellen Sie eine dynamische Gruppe für das Funktions-Compartment.
# Replace OCID for function compartment All {resource.type = 'fnfunc', resource.compartment.id = '<function-compartment>'} Example: All {resource.type = 'fnfunc', resource.compartment.id = 'ocid1.compartment.oc1..aaaaaaaanovmfmmnonjjyxeq4jyghszj2eczlrkgj5svnxrt...'} -
Policys
Erstellen Sie Policys, um der Funktion eine dynamische Gruppe zuzuweisen.
# Replace dynamic-group-name, function-compartment and OCID of vault secret for OCI function Allow dynamic-group <dynamic-group-name> to read secret-family in compartment <function-compartment> where target.secret.id='<ocid of smtp password vaultsecret>' Allow dynamic-group <dynamic-group-name> to inspect compartments in tenancy Allow dynamic-group <dynamic-group-name> to read repos in compartment <function-compartment>
-
-
Serviceaccount für einfaches Mail Transfer Protocol (SMTP) mit eingeschränkter Benutzerfunktion nur auf
SMTP credentials. Generieren und teilen Sie die SMTP-Zugangsdaten mit dem Entwickler. -
Compartment, Gruppe und Policys für Entwickler, um Secrets zu erstellen und die Funktion bereitzustellen.
# Replace group-name as per your tenancy Allow group <group-name> to manage repos in compartment <function-compartment> Allow group <group-name> to manage vaults in compartment <function-compartment> Allow group <group-name> to manage keys in compartment <function-compartment> Allow group <group-name> to manage secret-family in compartment <function-compartment> Allow group <group-name> to manage approved-senders in compartment <function-compartment> allow group <group-name> to use cloud-shell in tenancy allow group <group-name> to manage functions-family in compartment <function-compartment> allow group <group-name> to use virtual-network-family in compartment <network-compartment> Allow group <group-name> to read objectstorage-namespaces in tenancy
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.
-
Öffnen Sie das Navigationsmenü der OCI-Konsole, und klicken Sie auf Entwicklerservices.
-
Klicken Sie unter "Anwendungsintegration" auf E-Mail-Versand.
-
Klicken Sie unter "E-Mail-Versand" auf Genehmigte Absender.
-
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.comlautet, fügen Sienoreply@notificationzur Region hinzu, und geben Sie die E-Mail-Adresse des genehmigten Absenders ein. Beispiel:noreply@notification.ap-mumbai-1.oci.oraclecloud.com. -
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
-
Öffnen Sie das Navigationsmenü, und klicken Sie auf Governance und Administration.
-
Klicken Sie unter "Mandantenverwaltung" auf Tag-Namespaces.
-
Klicken Sie auf der Seite "Tag-Namespaces" auf Tag-Namespaces erstellen.
-
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.
-
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 Adressedefaultrecepientin der Funktionskonfiguration angegeben. Beispiel: demouser1@abc.com,demouser2@abc.com
Aufgabe 3: Secret in OCI Vault erstellen
-
Öffnen Sie das Navigationsmenü, klicken Sie auf Identität und Sicherheit, und klicken Sie dann auf Vault.
-
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.
-
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
-
Klicken Sie in der OCI-Konsole in der oberen Navigationsleiste auf Cloud Shell.
-
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 -
Verzeichnis in das neu erstellte Verzeichnis ändern.
-
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....."]' -
Kopieren Sie das folgende Skript, und fügen Sie es in die Datei
func.pyein, 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"}) -
Sie können companylogo.png durch Ihr Unternehmenslogo ersetzen und HTML-Text als E-Mail-Text im Skript aktualisieren. Der Standardwert ist Oracle-Logo.
-
Führen Sie den folgenden Befehl aus, um die Funktion bereitzustellen.
fn -v deploy --app <app-name> Example: fn -v deploy --app emaildeliveryapp -
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
-
Öffnen Sie das Navigationsmenü, und klicken Sie auf Observability and Management.
-
Klicken Sie unter Events-Serviceauf Regeln.
-
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.
-
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.

Aufgabe 6: E-Mail-Benachrichtigung validieren
-
Starten oder stoppen Sie die Compute-Instanz im Compartment, in dem eine Ereignisregel erstellt wurde, um das OCI-Ereignis auszulösen.
-
Sie erhalten eine E-Mail-freundliche Benachrichtigung sowie angehängtes Raw JSON.

Verwandte Links
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.
Set Up Email Notifications for Oracle Cloud Infrastructure Events in OCI Monitoring
F87596-01
October 2023
Copyright © 2023, Oracle and/or its affiliates.