Remarques :
- Ce tutoriel nécessite un accès à Oracle Cloud. Pour vous inscrire à un compte gratuit, reportez-vous à Introduction au niveau gratuit d'Oracle Cloud Infrastructure.
- Il utilise des exemples de valeur pour les informations d'identification Oracle Cloud Infrastructure, la location et les compartiments. A la fin de votre atelier, remplacez ces valeurs par celles propres à votre environnement cloud.
Configuration des notifications par courriel pour Oracle Cloud Infrastructure Events dans OCI Monitoring
Introduction
Les services Oracle Cloud Infrastructure (OCI) émettent des événements, qui sont des messages structurés indiquant des modifications dans les ressources. Il est nécessaire de créer des règles pour utiliser les événements et de spécifier une action à déclencher lorsqu'il trouve un événement correspondant.
Les actions de notification par e-mail sont une réponse que vous définissez pour les correspondances d'événements. Le service de remise de courriels OCI fournit une solution gérée rapide et fiable pour l'envoi de notifications par courriel sécurisées, en grand nombre et transactionnelles.
Objectifs
- Envoyez des notifications d'événement OCI conviviales par courriel à l'aide d'OCI Email Delivery.
Prérequis
L'administrateur Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) doit créer les éléments suivants :
-
Groupe dynamique et stratégies pour la fonction OCI permettant d'appeler et d'envoyer des notifications par courriel.
-
Groupe dynamique
Créez un groupe dynamique pour le compartiment de fonction.
# 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...'}
-
Stratégies
Créez des stratégies pour affecter un groupe dynamique à la fonction.
# 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>
-
-
Compte de service SMTP (Simple Mail Transfer Protocol) avec une capacité utilisateur limitée à
SMTP credentials
uniquement. Générez et partagez les informations d'identification SMTP avec le développeur. -
Compartiment, groupe et stratégies permettant au développeur de créer des clés secrètes et de déployer la fonction.
# 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
Pour plus d'informations sur la région d'envoi de courriels avec abonnement et préféré, reportez-vous à Configuration de l'adresse de connexion SMTP.
Tâche 1 : configurer l'expéditeur approuvé dans la livraison par courriel
Un expéditeur approuvé doit être configuré pour toutes les adresses d'origine qui envoient des courriels via OCI. Il est associé à un compartiment et existe uniquement dans la région dans laquelle l'expéditeur approuvé a été configuré.
Vous pouvez utiliser votre nom de domaine ou la notification oracle par défaut pour l'expéditeur approuvé comme indiqué ci-dessous.
-
Ouvrez le menu de navigation de la console OCI et cliquez sur Services de développeur.
-
Sous Application Integration, cliquez sur Email Delivery.
-
Sous Email Delivery, cliquez sur Expéditeurs approuvés.
-
Cliquez sur Créer un expéditeur approuvé et entrez l'adresse électronique à répertorier en tant qu'expéditeur approuvé.
Remarque : si l'adresse de connexion SMTP de remise de courriels OCI est
smtp.email.ap-mumbai-1.oci.oraclecloud.com
, ajouteznoreply@notification
à la région et entrez l'adresse électronique de l'expéditeur approuvée. Par exemple,noreply@notification.ap-mumbai-1.oci.oraclecloud.com
. -
Cliquez sur Ajouter pour ajouter une adresse électronique à la liste des expéditeurs approuvés.
Tâche 2 : création d'un espace de noms et d'une définition de clé de balise
-
Ouvrez le menu de navigation et cliquez sur Gouvernance et administration.
-
Sous Gestion de location, cliquez sur Espaces de noms de balise.
-
Sur la page Espaces de noms de balise, cliquez sur Créer des espaces de noms de balise.
-
Dans le panneau Créer un espace de noms de balise, sélectionnez le compartiment approprié et saisissez custom dans le nom de l'espace de noms et fournissez la description.
-
Dans l'espace de noms custom, cliquez sur Créer des définitions de clé de balise et saisissez recipient dans la clé de balise et créez-la.
Remarque : vous pouvez ajouter les adresses électroniques de destinataire à la balise définie dans chaque ressource OCI, lorsque la notification est requise. La solution utilise
recipient addresses
pour notifier, si elle est disponible dans un événement cloud, sinon l'adressedefaultrecepient
sera utilisée dans la configuration de fonction. Par exemple, demouser1@abc.com,demouser2@abc.com
Tâche 3 : création d'une clé secrète dans le coffre OCI
-
Ouvrez le menu de navigation, cliquez sur Identity & Security, puis cliquez sur Vault.
-
Sous Portée de la liste, sélectionnez un compartiment contenant le coffre.
Remarque : si vous devez créer un coffre et une clé de cryptage maître, suivez les instructions fournies dans Create Vault et Master Encryption Key.
-
Sous Ressources, cliquez sur Créer une clé secrète et sélectionnez la clé de cryptage maître appropriée.
-
Entrez smptppass dans le champ de nom et la description Mot de passe SMTP pour l'authentification de remise de courriels OCI.
-
Sélectionnez le format plain-text pour le modèle de type de clé secrète et saisissez smtp password pour le contenu de la clé secrète.
Remarque : utilisez le mot de passe SMTP partagé par l'administrateur OCI IAM.
-
Tâche 4 : création et déploiement de la fonction OCI
-
Sur la console OCI, cliquez sur Cloud Shell dans la navigation supérieure.
-
Créer une fonction à l'aide de l'interface de ligne de commande du projet Fn à partir de cloud shell.
fn init --runtime python <function-name> Example: fn init --runtime python emaildelivery-func
-
Passez au répertoire que vous avez créé.
-
Créez une application pour déployer la fonction.
# 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....."]'
-
Copiez et collez le script ci-dessous dans le fichier
func.py
en écrasant le contenu existant.# 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"})
-
Vous pouvez remplacer companylogo.png par le logo de votre société et mettre à jour le texte HTML en tant que corps du courriel dans le script. La valeur par défaut est le logo Oracle.
-
Exécutez la commande ci-dessous pour déployer la fonction.
fn -v deploy --app <app-name> Example: fn -v deploy --app emaildeliveryapp
-
Exécutez ci-dessous pour ajouter une configuration de fonction pour chaque clé et valeur de configuration.
-
expéditeur : utilisez l'expéditeur approuvé configuré dans la tâche 1.
-
smtpuser : utilisateur SMTP partagé par l'administrateur OCI IAM.
-
smtppass : utilisez l'OCID de la clé secrète du coffre de mots de passe SMTP et mettez à jour la valeur de configuration smtppass.
-
host : utilisez l'adresse de connexion SMTP selon le prérequis.
-
defaultrecipient : indiquez l'adresse électronique comme destinataire par défaut. La solution utilise
_recipient addresses_
pour notifier, si elle est disponible dans un événement cloud, sinon l'adresse_defaultrecepient_
sera utilisée dans la configuration de fonction.
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
-
Tâche 5 : créer une règle d'événement
-
Ouvrez le menu de navigation et cliquez sur Observation & gestion.
-
Sous Service d'événements, cliquez sur Règles.
-
Cliquez sur Créer une règle et, dans le panneau Créer une règle, indiquez un nom convivial pour la règle et une description de son rôle.
-
Dans la zone Conditions de règle, indiquez le type d'événement et l'action pour déclencher la fonction. Vous pouvez définir des filtres en fonction des types d'événement, des attributs et des balises afin de limiter les événements qui déclenchent des actions. Voici un exemple de déclenchement d'un événement de démarrage ou d'arrêt d'instance de calcul.
Tâche 6 : Valider la notification par courriel
-
Démarrez ou arrêtez l'instance de calcul dans le compartiment où la règle d'événement a été créée pour déclencher l'événement OCI.
-
Vous recevrez une notification conviviale par courriel, ainsi qu'un fichier JSON brut qui lui est attaché.
Liens connexes
Remerciements
Auteur - Dipesh Kumar Rathod (architecte cloud principal maître, infrastructure)
Ressources de formation supplémentaires
Explorez d'autres ateliers sur docs.oracle.com/learn ou accédez à davantage de contenu de formation gratuit sur le canal Oracle Learning YouTube. En outre, accédez à education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.
Pour consulter la documentation produit, consultez 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.