Scenario C: archiviazione dei biglietti Jira per i promemoria

Archivia automaticamente un ticket Jira ogni volta che si verifica un evento di promemoria di manutenzione. In questo scenario, ogni volta che un promemoria per l'imminente manutenzione del database proviene da Oracle Cloud Infrastructure, viene creato un ticket Jira per il tecnico che effettua la chiamata.

Questo scenario prevede la scrittura di una funzione nel file dei ticket Jira (e la creazione di un segreto per memorizzare le credenziali Jira), l'aggiunta di tale funzione e di un messaggio di posta elettronica facoltativo come sottoscrizioni a un argomento e la creazione di una regola che invia messaggi a tale argomento quando si verificano eventi di promemoria di manutenzione (vedere Tipi di eventi di Autonomous Container Database). Il messaggio viene inviato alle sottoscrizioni dell'argomento, che include un indirizzo e-mail di gruppo oltre alla funzione. La funzione viene richiamata alla ricezione del messaggio.

Tutto tranne la funzione può essere impostato nella console. In alternativa, puoi utilizzare l'interfaccia CLI o l'API di Oracle Cloud Infrastructure, che ti consente di eseguire autonomamente le singole operazioni.

Nota

Il servizio Notifiche non contiene informazioni su una funzione dopo che è stata richiamata. Per ulteriori informazioni, vedere le informazioni sulla risoluzione dei problemi in Funzione non richiamata o non eseguita.

Questa immagine mostra le notifiche nel contesto di uno scenario che utilizza una funzione per archiviare i ticket Jira quando si verificano eventi di promemoria.

Per ulteriori informazioni su questo scenario, vedere Automated Jira Ticketing using OCI Events, Notifications, and Functions e il repository GitHub associato.

Criteri IAM necessari

Per utilizzare Oracle Cloud Infrastructure, un amministratore deve essere un membro di un gruppo a cui è stato concesso l'accesso di sicurezza in un criterio da un amministratore della tenancy. Questo accesso è necessario se si utilizza la console o l'API REST con un SDK, un'interfaccia CLI o un altro strumento. Se viene visualizzato un messaggio che informa che non si dispone dell'autorizzazione o che non si è autorizzati, verificare con l'amministratore della tenancy il tipo di accesso di cui si dispone e il compartimento in cui funziona l'accesso.

Se si è membri del gruppo Administrators, si dispone già dell'accesso necessario per eseguire questo scenario. In caso contrario, è necessario accedere a Eventi, Notifiche e Funzioni. Per poter aggiungere la funzione come sottoscrizione a un argomento, è necessario disporre dell'autorizzazione FN_INVOCATION per la funzione. Per accedere alle credenziali Jira, è necessario che la funzione sia autorizzata a leggere i segreti. Questo scenario analizza i passaggi per fornire questa autorizzazione.

Task 1: Memorizza credenziali in un segreto

Per ulteriori informazioni sulla creazione di segreti mediante il servizio Vault, vedere Creazione di un segreto in un vault.

    1. Aprire il menu di navigazione , selezionare Identità e sicurezza e quindi Vault.
    2. In Ambito elenco, nella lista Compartimento selezionare il nome del compartimento in cui si desidera creare un segreto.
    3. Dalla lista dei vault nel compartimento, effettuare una delle operazioni riportate di seguito.

      • Selezionare il nome del vault in cui si desidera creare un segreto.

      • Creare un nuovo vault per il segreto seguendo le istruzioni riportate in Per creare un nuovo vault, quindi selezionare il nome del vault.

    4. Selezionare Secret, quindi selezionare Crea segreto.
    5. Nel pannello Crea segreto, scegliere un compartimento dalla lista Crea nel compartimento. (I segreti possono esistere al di fuori del compartimento in cui si trova il vault).
    6. Immettere un nome per identificare il segreto. Evitare di inserire informazioni riservate.

      Nome di esempio: jira_auth_plain_text

    7. Immettere una breve descrizione del segreto per facilitare l'identificazione. Evitare di inserire informazioni riservate.

      Descrizione di esempio: jira_auth_plain_text

    8. Scegliere la chiave di cifratura master che si desidera utilizzare per cifrare i contenuti segreti durante l'importazione nel vault. (La chiave deve appartenere allo stesso vault).
    9. Per Modello tipo segreto, selezionare Testo normale.
    10. Per Sommario segreto, immettere le credenziali Jira nel seguente formato, con i due punti che separano il messaggio di posta elettronica di login dal token di autenticazione:

      <your-jira-cloud-login-email>:<your-jira-cloud-auth-token>

    11. Selezionare Crea segreto.
    12. Prendere nota del segreto OCID da utilizzare nel codice funzione per recuperare il segreto in modo sicuro.
  • Nota

    È necessario specificare una chiave simmetrica per cifrare il segreto durante l'importazione nel vault. Non è possibile cifrare i segreti con chiavi asimmetriche. Inoltre, la chiave deve esistere nel vault specificato.

    Utilizzare il comando oci vault secret create-base64 e i parametri richiesti per creare un segreto che memorizzi le credenziali Jira:

    oci vault secret create-base64 --compartment-id <target_compartment_id> --secret-name <secret_name> --vault-id <target_vault_id> --description <secret_description_text> --key-id <encryption_key_id> --secret-content-content <base64_encoded_secret_content> --secret-content-name <unique_content_name> --secret-content-stage <secret_version_rotation_state>

    Per un elenco completo dei parametri e dei valori per i comandi della CLI, vedere il manuale CLI Command Reference.

  • Eseguire l'operazione CreateSecret per creare un segreto.

    Ad esempio:

    POST /20180608/secrets
    Host: <managementEndpoint>
    <authorization and other headers>
    {
      "vaultId": "<vault_OCID>",
      "compartmentId": "<compartment_OCID>",
      "secretName": "jira_auth_plain_text",
      "description": "jira_auth_plain_text",
      "keyId": "<key_OCID>",
      "secretContent": 
        {
          "content": "<base64_encoded_secret_contents>",
          "contentType": "BASE64"
        }
    }
    Nota

    Ogni area dispone di un endpoint univoco per le operazioni di creazione, aggiornamento ed elenco dei segreti. Questo endpoint viene definito come URL del piano di controllo o endpoint di gestione segreto. Ogni area dispone inoltre di un endpoint univoco per le operazioni correlate al recupero dei contenuti segreti. Questo endpoint è noto come URL del piano dati o endpoint di recupero segreto. Per gli endpoint regionali, consulta la documentazione sulle API.

    Per informazioni sull'uso dell'API e delle richieste di firma, consulta la documentazione dell'API REST e le credenziali di sicurezza. Per informazioni sugli SDK, vedere SDK e l'interfaccia CLI.

Task 2: Creare la funzione

Questa sezione fornisce l'esempio di codice per la creazione della funzione e descrive i passi per autorizzare la funzione ad accedere alle credenziali Jira nel segreto creato utilizzando il servizio Vault.

Esempio di codice funzione

Il seguente esempio di codice è per una funzione per archiviare i ticket Jira.

Aggiungere l'OCID segreto nella riga che include getSecretForOcid.

Per istruzioni sulla creazione e la distribuzione di funzioni, vedere Creazione e distribuzione di funzioni.

public String handleRequest(CloudEvent cloudEvent) {
 
    // Json body of Cloud event from Oracle Event Service in serialized into cloudEvent object by Fn SDK implicitly
    System.err.println("Inside Java jira function with input as " + cloudEvent.getEventType() + "  " + cloudEvent.getData().getResourceName());
 
    String response = jiraCreateTicket(cloudEvent);
 
    if (response != null) return response;
 
    return null;
}
 
private String jiraCreateTicket(CloudEvent cloudEvent) {
 
    try {
        //create jira ticket body as per CloudEvent
        String jsonBodyJira = getJiraApiBody(cloudEvent);
 
        String jiraCloudEndpoint = System.getenv().get("JIRA_CLOUD_URL");
        String ocidForSecretForJiraAuthToken = System.getenv().get("JIRA_CLOUD_SECRET_OCID");
        String jiraAuthToken= getSecretForOcid(ocidForSecretForJiraAuthToken); // base64 encoded form of <YourJiraUsername:YourJiraAuthToken>
 
        // actual REST call to JIRA cloud
        OkHttpClient client = new OkHttpClient().newBuilder()
                .build();
        MediaType mediaType = MediaType.parse("application/json");
        RequestBody body = RequestBody.create(mediaType, jsonBodyJira);
        Request request = new Request.Builder()
                .url(jiraCloudEndpoint)
                .method("POST", body)
                .addHeader("Accept", "application/json")
                .addHeader("Content-Type", "application/json")
                .addHeader("Authorization", "Basic "+ jiraAuthToken)
                .build();
        Response response = client.newCall(request).execute();
        return response.body().string();
 
    } catch (JsonProcessingException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}
Autorizza la funzione ad accedere ai segreti

Utilizzare un gruppo dinamico per concedere alla funzione la possibilità di leggere i segreti. La funzione deve disporre di questa autorizzazione per accedere alle credenziali Jira, memorizzate nel segreto creato in precedenza.

Per autorizzare la funzione ad accedere ai segreti (console)
  1. Trovare e annotare la funzione OCID (il formato è ocid1.fnfunc.oc1.iad.exampleuniqueID).
  2. Includere la funzione in un gruppo dinamico: nel gruppo dinamico rilevante, specificare la regola seguente:
    resource.id = '<function-ocid>'

    In alternativa, è possibile creare un gruppo dinamico che includa tutte le funzioni riportate di seguito.

    ALL{resource.type='fnfunc', resource.compartment.id='<compartment_OCID>'}
  3. Concedere al gruppo dinamico l'accesso ai segreti: aggiungere il criterio seguente:
    allow dynamic-group <dynamic-group-name> to read secret-family in tenancy

Per autorizzare la funzione per l'accesso ad altre risorse di Oracle Cloud Infrastructure, ad esempio le istanze di computazione, includere la funzione in un gruppo dinamico e creare un criterio per concedere al gruppo dinamico l'accesso a tali risorse. Per ulteriori informazioni, vedere Accesso ad altre risorse di Oracle Cloud Infrastructure dall'esecuzione di funzioni.

Per ulteriori informazioni sui gruppi dinamici, vedere Gestione dei gruppi dinamici.

Task 3: Creare l'argomento

Per informazioni sulla risoluzione dei problemi, vedere Risoluzione dei problemi delle notifiche.

    1. Aprire il pannello Crea argomento: nella pagina di elenco Argomenti, selezionare Crea argomento. Per informazioni su come trovare la pagina dell'elenco, vedere Elenco di argomenti.
    2. Per Nome, digitare quanto segue: Argomento di manutenzione
    3. Selezionare Crea.
  • Per creare un argomento, utilizzare il comando oci ons topic create e i parametri necessari:

    oci ons topic create --name <name> --compartment-id <compartment_OCID>

    Ad esempio:

    oci ons topic create --name "Maintenance Topic" --compartment-id "<compartment-ocid>"

    Per un elenco completo dei parametri e dei valori per i comandi CLI, vedere Command Line Reference for Notifications.

  • Eseguire l'operazione CreateTopic per creare un argomento.

    Ad esempio:

    POST /20181201/topics
    Host: notification.us-phoenix-1.oraclecloud.com
    <authorization and other headers>
    {
      "name": "Maintenance Topic",
      "compartmentId": "<compartment_OCID>"
    }

Task 4: Creare le sottoscrizioni

La funzione deve essere distribuita prima di creare la sottoscrizione alla funzione.

Per informazioni sulla risoluzione dei problemi, vedere Risoluzione dei problemi delle notifiche.

    1. Selezionare l'argomento creato in precedenza (il nome di esempio era Argomento di manutenzione): nella pagina di elenco Argomenti selezionare l'argomento da utilizzare. Per informazioni su come trovare la pagina dell'elenco o l'argomento, vedere Elenco di argomenti.
    2. Creare la sottoscrizione alla funzione.
      1. Aprire il pannello Crea sottoscrizione: nella pagina dei dettagli dell'argomento, selezionare Crea sottoscrizione.
        Viene visualizzato il pannello Crea sottoscrizione.
      2. Per Protocollo, selezionare Funzione.
      3. Completare gli altri campi.
        Campo descrizione;
        Compartimento funzione Selezionare il compartimento che contiene la funzione.
        Applicazione funzione Selezionare l'applicazione che contiene la funzione.
        Funzione Selezionare la funzione.
      4. Selezionare Crea.
        Non è necessaria alcuna conferma per le nuove sottoscrizioni alle funzioni.
    3. Creare la sottoscrizione e-mail.
      1. Aprire il pannello Crea sottoscrizione: nella pagina dei dettagli dell'argomento, selezionare Crea sottoscrizione.
        Viene visualizzato il pannello Crea sottoscrizione.
      2. Per Protocollo, selezionare E-mail.
      3. Completare gli altri campi.
        Campo descrizione;
        Posta elettronica Digitare un indirizzo di posta elettronica.
      4. Selezionare Crea.
      5. Conferma la nuova sottoscrizione e-mail: aprire il messaggio e-mail e passare all'URL di conferma.
  • Nota

    Dopo aver creato la sottoscrizione e-mail, confermarla.

    Per creare ogni sottoscrizione, utilizzare il comando oci ons subscription create e i parametri necessari.

    oci ons subscription create --protocol <subscription_type> --subscription-endpoint <endpoint> --compartment-id <compartment_OCID> --topic-id <topic_OCID>

    Esempio di sottoscrizione alla funzione:

    oci ons subscription create --protocol "ORACLE_FUNCTIONS" --subscription-endpoint "<function-ocid>" --compartment-id "<compartment_OCID>" --topic-id "<topic_OCID>"

    Esempio di sottoscrizione e-mail:

    oci ons subscription create --protocol "EMAIL" --subscription-endpoint "maintenance.team@example.com" --compartment-id "<compartment_OCID>" --topic-id "<topic_OCID>"

    Per un elenco completo dei parametri e dei valori per i comandi CLI, vedere Command Line Reference for Notifications.

  • Nota

    Dopo aver creato la sottoscrizione e-mail, confermarla.

    Eseguire l'operazione CreateSubscription per creare ogni sottoscrizione.

    Esempio di sottoscrizione alla funzione:

    POST /20181201/subscriptions
    Host: notification.us-phoenix-1.oraclecloud.com
    <authorization and other headers>
    {
      "topicId": "<topic_OCID>",
      "compartmentId": "<compartment_OCID>",
      "protocol": "ORACLE_FUNCTIONS",
      "endpoint": "<function_OCID>"
    }

    Esempio di sottoscrizione e-mail:

    POST /20181201/subscriptions
    Host: notification.us-phoenix-1.oraclecloud.com
    <authorization and other headers>
    {
      "topicId": "<topic_OCID>",
      "compartmentId": "<compartment_OCID>",
      "protocol": "EMAIL",
      "endpoint": "maintenance.team@example.com"
    }

Task 5: creare la regola evento

  • In questa sezione viene descritto come creare la regola che invia un messaggio all'argomento ogni volta che il servizio di database emette un evento per un promemoria di manutenzione del database.

    1. Aprire il menu di navigazione e selezionare Osservabilità e gestione. In Servizio eventi, selezionare Regole.
    2. Scegliere un compartimento in cui si dispone dell'autorizzazione per lavorare, quindi selezionare Crea regola.

      Gli eventi confrontano le regole create in questo compartimento con i messaggi degli eventi emessi dalle risorse in questo compartimento e in qualsiasi compartimento figlio.

    3. Immettere:
      • Nome visualizzato: specificare un nome descrittivo per la regola. In seguito potrà essere modificato. Evitare di inserire informazioni riservate.

        Esempio: promemoria manutenzione

      • Descrizione: specificare una descrizione del funzionamento della regola. In seguito sarà possibile modificare questa descrizione. Evitare di inserire informazioni riservate.

        Esempio: invia messaggi all'argomento di manutenzione

    4. In Condizioni regole, creare un filtro per gli eventi promemoria del database: 
      • Per Nome servizio, selezionare Database.
      • In Tipo di evento, selezionare Autonomous Container Database - Promemoria manutenzione.
    5. In Azioni selezionare l'argomento creato in precedenza:
      1. Selezionare Notifiche.
      2. Selezionare il compartimento notifiche.
      3. Selezionare l'argomento creato in precedenza.
    6. Selezionare Crea regola.
  • Creare una regola attivata dai promemoria di manutenzione e che faccia riferimento a questo argomento come destinazione.

    1. Creare un file, action.json, che contenga quanto segue, facendo riferimento all'argomento creato in precedenza.

      Ad esempio:

      {
        "actions": [
            {
              "actionType": "ONS",
              "description": "string",
              "isEnabled": true,
              "topicId": "<topic_OCID>"
            }
        ]
      }
    2. Aprire un prompt dei comandi ed eseguire il comando oci events rule create.

      Ad esempio:

      oci events rule create --display-name <friendly_name> --is-enabled true --condition "{\"eventType\":[\"com.oraclecloud.databaseservice.autonomous.container.database.maintenance.reminder\"]}" --compartment-id <compartment_OCID> --actions file://action.json

      Per un elenco completo dei parametri e dei valori per i comandi della CLI, consultare il manuale CLI Command Reference.

      Per ulteriori informazioni sulla creazione di regole mediante l'interfaccia CLI, vedere Creazione di una regola di eventi.

  • Eseguire l'operazione CreateRule per creare una regola evento.

    Ad esempio:

    POST /20181201/rules
    Host: events.us-phoenix-1.oraclecloud.com
    <authorization and other headers>
    
    {
      "displayName": "Maintenance Reminder",
      "condition": "{
        \"eventType\": \"com.oraclecloud.databaseservice.autonomous.container.database.maintenance.reminder\"
        }",
      "compartmentId": "<compartment_OCID>",
      "isEnabled": true,
      "actions": {
        "actions": [
          {
            "actionType": "ONS",
            "topicId": "<topic_OCID>",
            "isEnabled": true
          }
        ]
      }
    }