Nota
- Questa esercitazione richiede l'accesso a Oracle Cloud. Per iscriverti a un account gratuito, consulta Inizia a utilizzare Oracle Cloud Infrastructure Free Tier.
- Utilizza valori di esempio per le credenziali, la tenancy e i compartimenti di Oracle Cloud Infrastructure. Al termine del laboratorio, sostituisci questi valori con quelli specifici del tuo ambiente cloud.
Imposta notifiche e-mail automatiche basate su eventi per report analisi costi mediante Oracle Cloud Native Framework
Introduzione
Ogni organizzazione che esegue i propri carichi di lavoro sul cloud è molto attenta a comprendere la spesa in termini di costi sul cloud e desidera segnalarla in modo significativo. Per questo, Oracle Cloud Infrastructure (OCI) fornisce una funzionalità che consente di creare report automatizzati in base ai costi e quindi di ottenere tali report in OCI Object Storage.
Per questi report sui costi, i team desiderano anche impostare l'automazione in modo che il team corrispondente riceva la notifica non appena il report viene generato. In questo modo, vorrebbero anche avere il collegamento alle relazioni nell'ambito della notifica. Puoi impostare tutta questa automazione utilizzando Oracle Cloud Native Framework.
Obiettivi
-
Imposta la generazione di report per i costi OCI e genera eventi in base alla generazione di report.
-
Configura tutta l'automazione utilizzando i servizi gestiti cloud nativi su OCI.
Prerequisiti
-
Autorizzazioni necessarie in Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) per creare gruppo dinamico, criteri, bucket, funzioni, impostare eventi e servizio di notifica.
-
Accedi a tutti i componenti necessari per visualizzare gli identificativi Oracle Cloud (OCID) e altre informazioni.
-
Accedere a OCI Cloud Shell per creare, distribuire e richiamare le funzioni.
Task 1: impostare i criteri e i gruppi dinamici IAM OCI richiesti
-
Eseguire il login a OCI Console, andare a Gruppo dinamico e creare un nuovo gruppo dinamico.
-
Immettere l'OCID compartimento nella regola 1. Le funzioni OCI devono esistere nello stesso compartimento.
-
Andare ai criteri IAM OCI e creare un criterio con la seguente istruzione.
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:
-
Utilizzare criteri IAM più specifici in base al caso d'uso. Fare riferimento all'esempio riportato di seguito.
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'}
-
Task 2: impostare un bucket di storage degli oggetti OCI e creare un report pianificato
-
Creare un bucket utilizzando OCI Console. Utilizzeremo questo bucket per inviare i nostri report. Assicurarsi che il bucket creato sia privato in quanto ciò garantirà che il contenuto sia sicuro dall'accesso pubblico e che l'opzione Emetti eventi oggetto sia abilitata in questo bucket, in quanto ciò consentirà agli eventi di emettere quando viene eseguito il push di un nuovo oggetto.
-
Andare a Gestione costi, Report schedulati e creare un report schedulato. Immettere Nome, Descrizione, Data inizio e Ricorrenza.
Selezionare il bucket in cui si desidera pubblicare i report. Per selezionare il bucket dal menu a discesa, è necessario aggiungere il criterio come mostrato nell'immagine riportata di seguito in modo che il servizio di misurazione abbia accesso al bucket creato.
-
Dopo aver creato il bucket e il report pianificato, puoi controllare la cronologia dei report eseguiti e vedrai anche che i report vengono pubblicati nel bucket di storage degli oggetti OCI selezionato.
Task 3: Creare un argomento di notifiche OCI e aggiungere una sottoscrizione
-
Creare un argomento OCI Notifications necessario per inviare la notifica di posta elettronica. Andare a Notifiche, Argomento e creare un argomento.
-
Creare una sottoscrizione nello stesso argomento e aggiungere un'e-mail a cui verrà inviata la notifica.
Ora l'argomento Notifiche OCI è configurato.
Task 4: Creare e distribuire il codice funzione
Passare a funzioni/applicazioni e creare una funzione. Questa funzione utilizzerà il gruppo dinamico e il criterio IAM OCI per accedere al bucket di storage degli oggetti OCI ed eseguire l'operazione richiesta (creare l'URL PAR per il file di report pianificato e inviarvi notifiche) quando la funzione viene attivata dall'evento emesso.
Esistono una vasta gamma di approcci che possono essere utilizzati per sviluppare OCI Functions, con guide di avvio rapido che ti guideranno durante l'impostazione di un ambiente di sviluppo utilizzando OCI Cloud Shell, una virtual machine OCI o in esecuzione localmente. Le immagini riportate nel resto di questa guida mostreranno OCI Cloud Shell, ma uno di questi approcci è valido. Abbiamo usato Python per codificare la logica richiesta, ma è possibile utilizzare un altro linguaggio e modificare la logica in base alle esigenze.
-
Per scrivere il codice, aprire i file
requirement.txt
efunc.py
in OCI Cloud Shell. -
Di seguito è riportato il codice funzione che utilizza i principal delle risorse OCI in modo da non dover conservare le credenziali OCI. Ricordarsi di sostituire le variabili per le creazioni, ad esempio nome bucket, OCID argomento e così via.
-
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...")
-
-
Aggiornare la funzione nel registro e distribuire il codice più recente utilizzando il comando seguente in OCI Cloud Shell.
fn -v deploy — app reportsauto
-
Una volta distribuita, la funzione è pronta per essere richiamata. È possibile provare a eseguire il test utilizzando il comando di richiamo della funzione e assicurarsi che la funzione funzioni come richiesto.
DEBUG=1 fn invoke reportsauto your_app_name
Nota:
-
OCI supporta i principali risorsa/istanza per evitare di fornire informazioni relative agli utenti durante l'esecuzione della funzione. Questo task è quindi necessario per assicurarsi che la funzione disponga del set di autorizzazioni corretto per chiamare le API, in caso contrario la funzione non funzionerà correttamente.
-
(Facoltativo) È inoltre possibile controllare la modalità Debug per la risoluzione dei problemi. Ad esempio, eseguire il comando seguente da OCI Cloud Shell per richiamare e testare la funzione se funziona come previsto.
DEBUG=1 fn invoke e2e-function-demo e2e-fn-streaming
-
Task 5: Impostazione delle regole degli eventi OCI
-
Andare a OCI Console, fare clic su Integrazione applicazioni, Servizio eventi, Regole e Crea regola evento. Immettere una condizione regola e aggiungere una funzione creata nel task 4 come azione trigger.
-
Immettere Nome visualizzato e Descrizione.
-
Nella sezione Condizione regola selezionare la prima condizione come Tipo di evento, Storage degli oggetti, Oggetto - Crea e un'altra condizione come Attributo, bucketName, demoBucket.
-
Connettere l'evento alla funzione tramite la sezione Azioni. Selezionare Compartimento funzione, Applicazione funzione e la funzione distribuita nel task 4.
-
Fare clic su Salva modifiche per salvare la regola evento. Questa operazione richiamerà la funzione quando la condizione corrisponde all'evento emesso dal bucket di storage degli oggetti OCI.
Collegamenti correlati
Conferma
- Autori - Lovelesh Saxena (Principal Software Engineering Architect), Mike Fung (Master Principal Cloud Architect), Tim Lee (Staff Cloud Engineer)
Altre risorse di apprendimento
Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti gratuiti sulla formazione su Oracle Learning YouTube channel. Inoltre, visita education.oracle.com/learning-explorer per diventare Oracle Learning Explorer.
Per la documentazione del prodotto, visitare Oracle Help Center.
Set Up Events Based Automated Email Notifications for Cost Analysis Reports Using Oracle Cloud Native Framework
F99117-01
May 2024