Szenario C: Jira-Tickets für Erinnerungen einreichen

Melden Sie automatisch ein Jira-Ticket an, wenn ein Wartungserinnerungsereignis eintritt. In diesem Szenario wird jedes Mal, wenn eine Erinnerung an die bevorstehende Datenbankwartung von Oracle Cloud Infrastructure stammt, ein Jira-Ticket für den Bereitschaftsdienstleister erstellt.

Dieses Szenario umfasst das Schreiben einer Funktion in die Datei von Jira-Tickets (und das Erstellen eines Secrets zum Speichern von Jira-Zugangsdaten), das Hinzufügen dieser Funktion und optionaler E-Mails als Abonnements zu einem Thema und das Erstellen einer Regel, die Nachrichten an dieses Thema sendet, wenn Wartungserinnerungsereignisse auftreten (siehe Ereignistypen für autonome Containerdatenbanken). Die Nachricht wird an die Abonnements des Themas weitergeleitet, die zusätzlich zur Funktion eine Gruppen-E-Mail-Adresse enthält. Die Funktion wird beim Empfang der Nachricht aufgerufen.

Alles außer der Funktion kann in der Konsole eingerichtet werden. Alternativ können Sie die Oracle Cloud Infrastructure-CLI oder -API verwenden, um die einzelnen Vorgänge selbst auszuführen.

Hinweis

Der Benachrichtigungsservice enthält keine Informationen zu einer Funktion, nachdem sie aufgerufen wurde. Weitere Informationen finden Sie in den Informationen zur Fehlerbehebung unter Funktion nicht aufgerufen oder ausgeführt.

Diese Abbildung zeigt Notifications im Kontext eines Szenarios, das Jira-Tickets mit einer Funktion archiviert, wenn Erinnerungsereignisse auftreten.

Weitere Informationen zu diesem Szenario finden Sie unter Automatisiertes Jira-Ticketing mit OCI-Ereignissen, -Benachrichtigungen und -Funktionen und dem zugehörigen GitHub-Repository.

Erforderliche IAM-Policy

Um Oracle Cloud Infrastructure verwenden zu können, muss ein Administrator Mitglied einer Gruppe sein, der von einem Mandantenadministrator Sicherheitszugriff in einer Policy erteilt wurde. Dieser Zugriff ist unabhängig davon erforderlich, ob Sie die Konsole oder die REST-API mit einem SDK, einer CLI oder einem anderen Tool verwenden. Wenn Sie eine Nachricht erhalten, dass Sie keine Berechtigung haben oder nicht autorisiert sind, fragen Sie den Mandantenadministrator, welcher Zugriffstyp Ihnen erteilt wurde und in welchem Compartment Ihr Zugriff funktioniert.

Wenn Sie Mitglied der Administratorengruppe sind, besitzen Sie bereits die erforderliche Zugriffsberechtigung zur Ausführung dieses Szenarios. Andernfalls benötigen Sie Zugriff auf die Services Events, Notifications und Functions. Sie benötigen die Berechtigung FN_INVOCATION für die Funktion, um die Funktion als Abonnement zu einem Thema hinzufügen zu können. Um auf Ihre Jira-Zugangsdaten zugreifen zu können, muss die Funktion zum Lesen von Secrets autorisiert sein. Dieses Szenario durchläuft Schritte zur Bereitstellung dieser Autorisierung.

Aufgabe 1: Zugangsdaten in einem Secret speichern

Weitere Informationen zum Erstellen von Secrets mit dem Vault-Service finden Sie unter Secret in einem Vault erstellen.

    1. Öffnen Sie das Navigationsmenü , wählen Sie Identität und Sicherheit aus, und wählen Sie Vault aus.
    2. Wählen Sie unter Listengeltungsbereich in der Liste Compartment den Namen des Compartment aus, in dem Sie ein Secret erstellen möchten.
    3. Führen Sie in der Liste der Vaults im Compartment einen der folgenden Schritte aus:

      • Wählen Sie den Namen des Vault aus, in dem Sie ein Secret erstellen möchten.

      • Erstellen Sie einen neuen Vault für das Secret, indem Sie die Anweisungen unter So erstellen Sie einen neuen Vault befolgen, und wählen Sie dann den Namen des Vaults aus.

    4. Wählen Sie Secrets, Secret erstellen aus.
    5. Wählen Sie im Bereich Secret erstellen ein Compartment in der Liste Erstellen in Compartment aus. (Secrets können sich außerhalb des Compartments befinden, in dem der Vault enthalten ist.)
    6. Geben Sie einen Namen ein, um das Secret zu identifizieren. Geben Sie keine vertraulichen Informationen ein.

      Beispielname: jira_auth_plain_text

    7. Geben Sie eine kurze Beschreibung des Secrets ein, um es leichter identifizieren zu können. Geben Sie keine vertraulichen Informationen ein.

      Beispielbeschreibung: jira_auth_plain_text

    8. Wählen Sie den Masterverschlüsselungsschlüssel aus, mit dem Sie die Secret-Inhalte verschlüsseln möchten, während sie in den Vault importiert werden. (Der Schlüssel muss zu demselben Vault gehören.)
    9. Wählen Sie unter Secret-Typvorlage die Option Nur Text aus.
    10. Geben Sie unter Secret-Inhalt Ihre Jira-Zugangsdaten im folgenden Format ein, wobei die Anmelde-E-Mail durch einen Doppelpunkt von Ihrem Authentifizierungstoken getrennt ist:

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

    11. Wählen Sie Secret erstellen aus.
    12. Beachten Sie die Secret-OCID zur Verwendung in Ihrem Funktionscode, um das Secret sicher abzurufen.
  • Hinweis

    Sie müssen einen symmetrischen Schlüssel angeben, um das Secret beim Import in den Vault zu verschlüsseln. Sie können Secrets nicht mit asymmetrischen Schlüsseln verschlüsseln. Außerdem muss der Schlüssel in dem von Ihnen angegebenen Vault vorhanden sein.

    Verwenden Sie den Befehl oci vault secret create-base64 und die erforderlichen Parameter, um ein Secret zu erstellen, in dem Ihre Jira-Zugangsdaten gespeichert sind:

    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>

    Eine vollständige Liste der Parameter und Werte für CLI-Befehle finden Sie in der CLI-Befehlsreferenz.

  • Führen Sie den Vorgang CreateSecret aus, um ein Secret zu erstellen.

    Beispiel:

    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"
        }
    }
    Hinweis

    Jede Region verfügt über einen eindeutigen Endpunkt für Erstellungs-, Aktualisierungs- und Listenvorgänge für Secrets. Dieser Endpunkt wird als Control-Plane-URL oder Secret-Managementendpunkt bezeichnet. Jede Region verfügt außerdem über einen eindeutigen Endpunkt für Vorgänge zum Abrufen von Secret-Inhalten. Dieser Endpunkt wird als Data-Plane-URL oder Secret-Abrufendpunkt bezeichnet. Informationen zu regionalen Endpunkten finden Sie in der API-Dokumentation.

    Informationen zur Verwendung der API und zu Signieranforderungen finden Sie unter REST-API-Dokumentation und Sicherheitszugangsdaten. Informationen zu SDKs finden Sie unter SDKs und die CLI.

Aufgabe 2: Funktion erstellen

In diesem Abschnitt finden Sie das Codebeispiel zum Erstellen Ihrer Funktion und die Schritte zum Autorisieren der Funktion für den Zugriff auf Ihre Jira-Zugangsdaten in dem Secret, das mit dem Vault-Service erstellt wurde.

Beispiel für Funktionscode

Das folgende Codebeispiel ist für eine Funktion zum Einreichen von Jira-Tickets.

Fügen Sie die Secret-OCID in der Zeile mit getSecretForOcid hinzu.

Anweisungen zum Erstellen und Bereitstellen von Funktionen finden Sie unter Funktionen erstellen und bereitstellen.

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;
}
Funktion zum Zugriff auf Secrets autorisieren

Verwenden Sie eine dynamische Gruppe , um Ihrer Funktion das Lesen von Secrets zu ermöglichen. Ihre Funktion muss über diese Autorisierung verfügen, um auf Ihre Jira-Zugangsdaten zugreifen zu können, die in dem zuvor erstellten Secret gespeichert sind.

So autorisieren Sie Ihre Funktion für den Zugriff auf Secrets (Konsole)
  1. Suchen und notieren Sie die OCID Ihrer Funktion (Format: ocid1.fnfunc.oc1.iad.exampleuniqueID).
  2. Fügen Sie Ihre Funktion in eine dynamische Gruppe ein: Geben Sie in der relevanten dynamischen Gruppe die folgende Regel an:
    resource.id = '<function-ocid>'

    Alternativ können Sie eine dynamische Gruppe erstellen, die alle Funktionen enthält:

    ALL{resource.type='fnfunc', resource.compartment.id='<compartment_OCID>'}
  3. Erteilen Sie der dynamischen Gruppe Zugriff auf Secrets: Fügen Sie die folgende Policy hinzu:
    allow dynamic-group <dynamic-group-name> to read secret-family in tenancy

Um Ihrer Funktion für den Zugriff auf andere Oracle Cloud Infrastructure-Ressourcen zu autorisieren, wie z.B. Compute-Instanzen, nehmen Sie die Funktion in eine dynamische Gruppe auf, und erstellen Sie eine Policy, um der dynamischen Gruppe Zugriff auf diese Ressourcen zu erteilen. Weitere Informationen finden Sie unter Auf andere Oracle Cloud Infrastructure-Ressourcen aus aktiven Funktionen zugreifen zugreifen.

Weitere Informationen zu dynamischen Gruppen finden Sie unter Dynamische Gruppen verwalten.

Aufgabe 3: Thema erstellen

Hilfe zur Fehlerbehebung finden Sie unter Fehlerbehebung für Notifications.

    1. Öffnen Sie den Bereich Thema erstellen: Wählen Sie auf der Listenseite Themen die Option Thema erstellen aus. Wenn Sie Hilfe bei der Suche nach der Listenseite benötigen, finden Sie weitere Informationen unter Themen auflisten.
    2. Geben Sie unter Name Folgendes ein: Wartungsthema
    3. Klicken Sie auf Erstellen.
  • Verwenden Sie den Befehl oci ons topic create und die erforderlichen Parameter, um ein Thema zu erstellen:

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

    Beispiel:

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

    Eine vollständige Liste der Parameter und Werte für CLI-Befehle finden Sie in der Befehlszeilenreferenz für Notifications.

  • Führen Sie den Vorgang CreateTopic aus, um ein Thema zu erstellen.

    Beispiel:

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

Aufgabe 4: Abonnements erstellen

Ihre Funktion muss vor dem Erstellen des Funktionsabonnements bereitgestellt sein.

Hilfe zur Fehlerbehebung finden Sie unter Fehlerbehebung für Notifications.

    1. Wählen Sie das zuvor erstellte Thema aus (Beispielname: Wartungsthema): Wählen Sie auf der Listenseite Themen das Thema aus, mit dem Sie arbeiten möchten. Wenn Sie Hilfe bei der Suche nach der Listenseite oder dem Thema benötigen, finden Sie weitere Informationen unter Themen auflisten.
    2. Erstellen Sie das Funktionsabonnement.
      1. Öffnen Sie den Bereich Abonnement erstellen: Wählen Sie auf der Detailseite für das Thema die Option Abonnement erstellen aus.
        Der Fensterbereich Abonnement erstellen wird geöffnet.
      2. Wählen Sie unter Protokoll die Option Funktion aus.
      3. Füllen Sie die restlichen Felder aus.
        Feld Beschreibung
        Funktions-Compartment Wählen Sie das Compartment aus, das die Funktion enthält.
        Funktionsanwendung Wählen Sie die Anwendung mit der Funktion.
        Funktion Wählen Sie die Funktion aus.
      4. Klicken Sie auf Erstellen.
        Für neue Funktionsabonnements ist keine Bestätigung erforderlich.
    3. Erstellen Sie das E-Mail-Abonnement.
      1. Öffnen Sie den Bereich Abonnement erstellen: Wählen Sie auf der Detailseite für das Thema die Option Abonnement erstellen aus.
        Der Fensterbereich Abonnement erstellen wird geöffnet.
      2. Wählen Sie unter Protokoll die Option E-Mail aus.
      3. Füllen Sie die restlichen Felder aus.
        Feld Beschreibung
        E-Mail Geben Sie eine E-Mail-Adresse ein.
      4. Klicken Sie auf Erstellen.
      5. Bestätigen Sie das neue E-Mail-Abonnement: Öffnen Sie die E-Mail, und navigieren Sie zur Bestätigungs-URL.
  • Hinweis

    Nachdem Sie das E-Mail-Abonnement erstellt haben, bestätigen Sie es.

    Verwenden Sie den Befehl oci ons subscription create und die erforderlichen Parameter, um jedes Abonnement zu erstellen:

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

    Beispiel für Funktionsabonnement:

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

    Beispiel für ein E-Mail-Abonnement:

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

    Eine vollständige Liste der Parameter und Werte für CLI-Befehle finden Sie in der Befehlszeilenreferenz für Notifications.

  • Hinweis

    Nachdem Sie das E-Mail-Abonnement erstellt haben, bestätigen Sie es.

    Führen Sie den Vorgang CreateSubscription aus, um jedes Abonnement zu erstellen.

    Beispiel für Funktionsabonnement:

    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>"
    }

    Beispiel für ein E-Mail-Abonnement:

    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"
    }

Aufgabe 5: Ereignisregel erstellen

  • In diesem Abschnitt wird beschrieben, wie Sie die Regel erstellen, die eine Nachricht an das Thema sendet, wenn der Datenbankservice ein Ereignis für eine Erinnerung zur Datenbankwartung ausgibt.

    1. Öffnen Sie das Navigationsmenü , und wählen Sie Observability and Management aus. Wählen Sie unter Events-Service die Option Regeln aus.
    2. Wählen Sie ein Compartment aus, für das Sie berechtigt sind, und wählen Sie Regel erstellen aus.

      Events vergleicht die Regeln, die Sie in diesem Compartment erstellen, mit Ereignisnachrichten, die aus Ressourcen in diesem Compartment und untergeordneten Compartments ausgegeben werden.

    3. Geben Sie Folgendes ein.
      • Anzeigename: Geben Sie einen benutzerfreundlichen Namen für die Regel an. Sie können diesen Namen später ändern. Geben Sie keine vertraulichen Informationen ein.

        Beispiel: Wartungserinnerung

      • Beschreibung: Geben Sie eine Beschreibung für die Funktion der Regel an. Sie können diese Beschreibung später ändern. Geben Sie keine vertraulichen Informationen ein.

        Beispiel: Sendet Nachrichten an das Wartungsthema

    4. Erstellen Sie unter Regelbedingungen einen Filter für Datenbankerinnerungsereignisse:
      • Wählen Sie unter Service-Name die Option Datenbank aus.
      • Wählen Sie unter Ereignistyp die Option Autonome Containerdatenbank - Wartungserinnerung aus.
    5. Wählen Sie unter Aktionen das zuvor erstellte Thema aus:
      1. Wählen Sie Benachrichtigungen aus.
      2. Wählen Sie das Benachrichtigungs-Compartment aus.
      3. Wählen Sie das Thema aus, das Sie zuvor erstellt haben.
    6. Wählen Sie Regel erstellen aus.
  • Erstellen Sie eine Regel, die von Wartungserinnerungen ausgelöst wird und dieses Thema als Ziel referenziert.

    1. Erstellen Sie eine Datei, action.json, die Folgendes enthält, und verweisen Sie auf das zuvor erstellte Thema.

      Beispiel:

      {
        "actions": [
            {
              "actionType": "ONS",
              "description": "string",
              "isEnabled": true,
              "topicId": "<topic_OCID>"
            }
        ]
      }
    2. Öffnen Sie einen Befehl, und führen Sie den Befehl oci events rule create aus.

      Beispiel:

      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

      Eine vollständige Liste der Parameter und Werte für CLI-Befehle finden Sie in der CLI-Befehlsreferenz.

      Weitere Informationen zum Erstellen von Regeln mit der CLI finden Sie in Ereignisregeln erstellen.

  • Führen Sie den Vorgang CreateRule aus, um eine Ereignisregel zu erstellen.

    Beispiel:

    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
          }
        ]
      }
    }