Note:
- Este tutorial requiere acceso a Oracle Cloud. Para registrarse en una cuenta gratuita, consulte Introducción a Oracle Cloud Infrastructure Free Tier.
- Utiliza valores de ejemplo para credenciales, arrendamiento y compartimentos de Oracle Cloud Infrastructure. Al finalizar el laboratorio, sustituya estos valores por otros específicos del entorno en la nube.
Configurar notificaciones por correo electrónico automatizadas basadas en eventos para informes de análisis de costos mediante Oracle Cloud Native Framework
Introducción
Todas las organizaciones que ejecutan sus cargas de trabajo en la nube están muy interesadas en comprender su gasto en costos en la nube y quieren informarlo de una manera significativa. Para ello, Oracle Cloud Infrastructure (OCI) proporciona una funcionalidad mediante la cual puede crear informes automatizados en función del costo y, a continuación, obtener esos informes en OCI Object Storage.
Para estos informes de costos, los equipos también desean configurar la automatización de manera que el equipo correspondiente reciba la notificación tan pronto como se genere el informe. Con esto, también les gustaría tener el enlace a los informes como parte de la notificación. Puede configurar toda esta automatización mediante Oracle Cloud Native Framework.
Objetivos
-
Configure la generación de informes para los costos de OCI y genere eventos basados en la generación de informes.
-
Configure toda la automatización mediante servicios gestionados nativos en la nube en OCI.
Requisitos
-
Permisos necesarios en Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) para crear un grupo dinámico, una política, cubos, funciones, configurar eventos y un servicio de notificación.
-
Acceda a todos los componentes necesarios para ver sus identificadores de Oracle Cloud (OCID) y otra información.
-
Acceso a OCI Cloud Shell para crear, desplegar y llamar a funciones.
Tarea 1: Configuración de las políticas y los grupos dinámicos de OCI IAM necesarios
-
Conéctese a la consola de OCI, vaya a Grupo dinámico y cree un nuevo grupo dinámico.
-
Introduzca el OCID del compartimento en la regla 1. Sus funciones de OCI deben existir en el mismo compartimento.
-
Vaya a las políticas de OCI IAM y cree una política con la siguiente sentencia.
allow dynamic-group dynamic_group_name to manage ons-family in compartment compartment_name allow dynamic-group dynamic_group_name to manage object-family in compartment compartment_name
Nota:
-
Utilice una política de IAM más específica según su caso de uso. Consulte el ejemplo siguiente:
allow dynamic-group dynamic_group_name to use ons-topics in compartment compartment_name where request.operation = 'PublishMessage'
allow dynamic-group dynamic_group_name to manage buckets in compartment compartment_name where all {request.operation = 'CreatePreauthenticatedRequest', target.bucket.name = 'bucket_name'}
-
Tarea 2: Configuración de un cubo de OCI Object Storage y creación de un informe programado
-
Crear un cubo con la consola de OCI. Utilizaremos este cubo para enviar nuestros informes. Asegúrese de que el cubo que ha creado es privado, ya que esto garantizará que el contenido esté protegido del acceso público, así como que Emit Object Events esté activado en este cubo, ya que permitirá que los eventos emitan cuando se transfiera un nuevo objeto.
-
Vaya a Gestión de costos, Informes programados y cree un informe programado. Introduzca Nombre, Descripción, Fecha de inicio y Repetición.
Seleccione el cubo en el que desea publicar los informes. Para seleccionar el cubo en el menú desplegable, debe agregar la política como se muestra en la siguiente imagen para que el servicio de medición tenga acceso al cubo creado.
-
Después de crear el cubo y el informe programado, puede comprobar el historial de informes ejecutados y también verá que los informes se publican en el cubo de OCI Object Storage seleccionado.
Tarea 3: Creación de un tema de OCI Notifications y adición de una suscripción
-
Cree un tema de OCI Notifications que sea necesario para enviar la notificación por correo electrónico. Vaya a Notifications, Tema y cree un tema.
-
Cree una suscripción en el mismo tema y agregue un correo electrónico al que se enviará la notificación.
Ahora, el tema OCI Notifications está configurado.
Tarea 4: Creación y despliegue del código de función
Vaya a functions/applications y cree una función. Esta función utilizará el grupo dinámico y la política de OCI IAM para acceder al cubo de OCI Object Storage y realizar la operación necesaria (crear URL de PAR para el archivo de informe programado y enviar notificaciones con él) cuando el evento emitido dispare la función.
Hay una amplia gama de enfoques que se pueden utilizar para desarrollar OCI Functions, con guías de inicio rápido que le guiarán a través de la configuración de un entorno de desarrollo mediante OCI Cloud Shell, una máquina virtual de OCI o una ejecución local. Las imágenes del resto de esta guía mostrarán OCI Cloud Shell, pero cualquiera de estos enfoques es válido. Hemos utilizado Python para codificar la lógica necesaria, pero puede utilizar otro lenguaje y cambiar la lógica según sea necesario.
-
Para escribir el código, abra el archivo
requirement.txt
yfunc.py
en OCI Cloud Shell. -
A continuación se muestra el código de función, utiliza los principales de recursos de OCI para que no tenga que conservar sus credenciales de OCI. Recuerde sustituir las variables de las creaciones, como el nombre del cubo, el OCID del tema, etc.
-
requirements.txt
.fdk>=0.1.71 oci>=2.112.0
-
func.yaml
.schema_version: 20180708 name: reportsauto version: 0.0.6 runtime: python build_image: fnproject/python:3.11-dev run_image: fnproject/python:3.11 entrypoint: /python/bin/fdk /function/func.py handler memory: 256
-
func.py
.import io import json import logging import oci from datetime import datetime from fdk import response def handler(ctx, data: io.BytesIO = None): try: body = json.loads(data.getvalue()) logging.getLogger().info(body.get("eventType")) logging.getLogger().info(body.get("data").get("resourceName")) except (Exception, ValueError) as ex: logging.getLogger().info('error parsing json payload: ' + str(ex)) logging.getLogger().info("Inside Python Hello World function") initiateFn(body.get("data").get("resourceName")) return response.Response( ctx, response_data=json.dumps( {"message": "Function Executed!"}), headers={"Content-Type": "application/json"} ) def initiateFn(uploaded_file): logging.getLogger().info("Reached initiate function...") signer = oci.auth.signers.get_resource_principals_signer() object_storage_client = oci.object_storage.ObjectStorageClient(config={}, signer=signer) namespace_name="orasenatdplt01" bucket_name="demobucket" now = datetime.now() par_name = "PAR_Request_" + str(now).split('.')[0].replace(" ", "_").replace(":", "_").replace("-", "_") create_preauthenticated_request_response = object_storage_client.create_preauthenticated_request( namespace_name=namespace_name, bucket_name=bucket_name, create_preauthenticated_request_details=oci.object_storage.models.CreatePreauthenticatedRequestDetails( name=par_name, access_type="ObjectRead", time_expires=datetime.strptime( "2037-06-05T04:25:22.344Z", "%Y-%m-%dT%H:%M:%S.%fZ"), object_name=uploaded_file)) callNotificationAPI(create_preauthenticated_request_response.data) # Function to call Notification API as soon as an object push is detected def callNotificationAPI(parData): logging.getLogger().info("Trigger notification as object push is detected...") topicOcid = "ocid1.onstopic.oc1.iad.amaaaaxxxxxxxxxamn4" signer = oci.auth.signers.get_resource_principals_signer() ons_client = oci.ons.NotificationDataPlaneClient(config={}, signer=signer) publish_message_response = ons_client.publish_message( topic_id=topicOcid, message_details=oci.ons.models.MessageDetails( body="OCI Notification Service - Cost Report File is created: " + str(parData.full_path), title="OCI Notification Service - Cost Report File is created"), message_type="RAW_TEXT") logging.getLogger().info("Triggered notification as object push is detected...")
-
-
Actualice la función del registro y despliegue el código más reciente mediante el siguiente comando en OCI Cloud Shell.
fn -v deploy — app reportsauto
-
Una vez desplegada, la función está lista para ser llamada. Puede intentar probar mediante el comando function invoke y asegurarse de que la función funciona según sea necesario.
DEBUG=1 fn invoke reportsauto your_app_name
Nota:
-
OCI soporta principales de instancia/recurso para evitar proporcionar información relacionada con el usuario al ejecutar la función. Por lo tanto, esta tarea es necesaria para asegurarse de que la función tiene el juego de permisos correcto para llamar a las API, con un fallo que la función no funcionará correctamente.
-
(Opcional ) También puede comprobar el modo Depurar para la resolución de problemas. Por ejemplo: ejecute el siguiente comando desde OCI Cloud Shell para llamar y probar la función si funciona como se esperaba.
DEBUG=1 fn invoke e2e-function-demo e2e-fn-streaming
-
Tarea 5: Configuración de reglas de OCI Events
-
Vaya a la consola de OCI, haga clic en Application Integration, Events Service, Rules y Create event rule. Introduzca una condición de regla y agregue una función creada en la tarea 4 como acción de disparador.
-
Introduzca Nombre mostrado y Descripción.
-
En la sección Condición de regla, seleccione la primera condición como Tipo de evento, Object Storage, Object - Create y otra condición como Attribute, bucketName, demoBucket.
-
Conecte el evento con la función mediante la sección Acciones. Seleccione Compartimento de función, Aplicación de función y la función desplegada en la tarea 4.
-
Haga clic en Guardar cambios para guardar la regla de evento. Esto llamará a la función cuando la condición coincida para el evento emitido desde el cubo de OCI Object Storage.
Enlaces relacionados
Agradecimientos
- Autoras: Lovelesh Saxena (Arquitecto principal de ingeniería de software), Mike Fung (Arquitecto principal principal de la nube), Tim Lee (Ingeniero de la nube del personal)
Más recursos de aprendizaje
Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en Oracle Learning Explorer.
Para obtener documentación sobre el producto, visite Oracle Help Center.
Set Up Events Based Automated Email Notifications for Cost Analysis Reports Using Oracle Cloud Native Framework
F99114-01
May 2024