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.
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.
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.
- Aprire il menu di navigazione , selezionare Identità e sicurezza e quindi Vault.
- In Ambito elenco, nella lista Compartimento selezionare il nome del compartimento in cui si desidera creare un segreto.
-
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.
-
- Selezionare Secret, quindi selezionare Crea segreto.
- 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).
-
Immettere un nome per identificare il segreto. Evitare di inserire informazioni riservate.
Nome di esempio:
jira_auth_plain_text
- Immettere una breve descrizione del segreto per facilitare l'identificazione. Evitare di inserire informazioni riservate.
Descrizione di esempio:
jira_auth_plain_text
- 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).
- Per Modello tipo segreto, selezionare Testo normale.
- 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>
- Selezionare Crea segreto.
- 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.
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;
}
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.
- Trovare e annotare la funzione OCID (il formato è
ocid1.fnfunc.oc1.iad.exampleuniqueID
). - 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>'}
- 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.
- 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.
- Per Nome, digitare quanto segue: Argomento di manutenzione
- 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.
- 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.
-
Creare la sottoscrizione alla funzione.
-
Creare la sottoscrizione e-mail.
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.
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.
- Aprire il menu di navigazione e selezionare Osservabilità e gestione. In Servizio eventi, selezionare Regole.
- 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.
- 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
-
- 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.
- In Azioni selezionare l'argomento creato in precedenza:
- Selezionare Notifiche.
- Selezionare il compartimento notifiche.
- Selezionare l'argomento creato in precedenza.
- Selezionare Crea regola.
Creare una regola attivata dai promemoria di manutenzione e che faccia riferimento a questo argomento come destinazione.
-
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>" } ] }
-
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 } ] } }