Hinweis:

Dateien mit Oracle Functions in autonome Datenbank laden

Einführung

In diesem Tutorial erstellen Sie Object Storage-Buckets, Oracle-Funktion und Oracle Autonomous Data Warehouse und lösen die Funktion aus, wenn eine Datei in Object Storage hochgeladen wird. Die Funktion nimmt die Datei und schreibt sie in die Datenbank.

Ziele

Voraussetzungen für Funktionen

Compartment erstellen

Ignorieren Sie diesen Schritt, wenn Sie einen kostenlosen von Oracle bereitgestellten Mandanten verwenden.

Wenn Sie ein vorhandenes Compartment verwenden möchten, fahren Sie mit dem nächsten Schritt fort. Klicken Sie andernfalls auf Compartments und dann auf Compartment erstellen, um ein neues Compartment zu erstellen.

VCN und Netzwerke erstellen

Wenn noch kein geeignetes VCN vorhanden ist, in dem Netzwerkressourcen erstellt werden sollen, melden Sie sich als Mandantenadministrator bei der Konsole an, und gehen Sie unter "Core Infrastructure" zu Networking, und führen Sie dann folgende Schritte aus:

  1. Klicken Sie auf Virtuelle Cloud-Netzwerke, und wählen Sie im vorherigen Schritt ein Compartment aus.
  2. Klicken Sie auf VCN-Assistenten starten, VCN mit Internetverbindung und anschließend VCN-Assistenten starten.
  3. Geben Sie einen Namen für das neue VCN ein (Beispiel: fn-vcn), klicken Sie auf Weiter, und klicken Sie dann auf Erstellen, um das VCN zusammen mit den zugehörigen Netzwerkressourcen zu erstellen.

Policy für Oracle Functions erstellen

Melden Sie sich als Mandantenadministrator bei der Konsole an, gehen Sie unter "Governance und Administration" zu Identität, klicken Sie auf Policys, und führen Sie die folgenden Schritte aus:

  1. Wählen Sie das Root-Compartment des Mandanten aus.

  2. Klicken Sie auf Policy erstellen.

  3. Geben Sie als Namen faas-policy ein.

  4. Geben Sie zur Beschreibung Policy for Functions ein.

  5. Klicken Sie auf den Link Anpassen (erweitert), und fügen Sie die Policy-Anweisungen in das Feld "Policy Builder" ein:

    Allow group <group-name> to read metrics in tenancy
    Allow group <group-name> to read objectstorage-namespaces in tenancy
    Allow group <group-name> to use virtual-network-family in tenancy
    Allow group <group-name> to manage functions-family in tenancy
    Allow group <group-name> to use cloud-shell in tenancy
    
  6. Klicken Sie auf Erstellen.

    Policy erstellen

    Stellen Sie sicher, dass der Benutzer zu der Gruppe gehört, die in den obigen Policy-Anweisungen referenziert wird. Informationen zum Erstellen von Gruppen und Hinzufügen von Benutzern zu Gruppen finden Sie unter Gruppe erstellen.

Anwendung erstellen

In diesem Schritt erstellen Sie eine Anwendung und richten Fn-CLI auf Cloud Shell ein.

  1. Wählen Sie unter "Lösungen und Plattform" die Option Entwicklerservices aus, und klicken Sie auf Functions.

  2. Wählen Sie Ihr Entwicklungs-Compartment in der Liste Compartment aus.

  3. Klicken Sie auf Anwendung erstellen.

  4. Geben Sie als Namen etl-app ein.

  5. Wählen Sie den VNC aus, den Sie zuvor erstellt haben (e.g. fn-vcn).

  6. Wählen Sie das öffentliche Subnetz aus.

  7. Klicken Sie auf Erstellen.

  8. Klicken Sie auf die erstellte Anwendung, um die Anwendungsdetails zu öffnen.

  9. Klicken Sie auf den Link Erste Schritte, und befolgen Sie die Abschnitte Cloud Shell-Session starten und Fn-CLI auf Cloud Shell einrichten in Cloud Shell-Setup.

    Anwendung erstellen

    Dazu müssen Sie Cloud Shell starten, den Fn-Kontext aktualisieren, ein Authentifizierungstoken für die Registry generieren und sich bei Oracle Cloud Infrastructure Registry anmelden.

Dynamische Gruppe erstellen

Um andere OCI-Services verwenden zu können, muss Ihre Funktion Teil einer dynamischen Gruppe sein. Informationen zum Erstellen dynamischer Gruppen finden Sie in der Dokumentation.

Bevor Sie eine dynamische Gruppe erstellen, müssen Sie die OCID des Entwicklungs-Compartments abrufen. Sie verwenden die Compartment-OCID in der Übereinstimmungsregel für dynamische Gruppen.

  1. Öffnen Sie das Navigationsmenü, wählen Sie Identität, Compartments aus.
  2. Suchen Sie das Entwicklungs-Compartment in der Liste, bewegen Sie den Mauszeiger über die Zelle in der Spalte "OCID", und klicken Sie auf Kopieren, um die Compartment-OCID in die Zwischenablage zu kopieren.
  3. Speichern Sie die Compartment-OCID in Kürze.

Jetzt können Sie eine dynamische Gruppe erstellen.

  1. Um eine dynamische Gruppe zu erstellen, öffnen Sie das Navigationsmenü, wählen Sie Identität, Dynamische Gruppen aus.

  2. Klicken Sie auf Dynamische Gruppe erstellen.

  3. Geben Sie als Namen functions-dynamic-group ein.

  4. Geben Sie zur Beschreibung Group with all functions in a compartment ein.

  5. Um die Funktionen auszuwählen, die zur dynamischen Gruppe gehören, [Übereinstimmungsregeln schreiben] (https://docs.cloud.oracle.com/en-us/iaas/Content/Identity/Tasks/managingdynamicgroups.htm#Writing).) Schreiben Sie die folgende Übereinstimmungsregel, die alle Funktionen in einem Compartment enthält, in dem Sie die Anwendung erstellt haben:

    All {resource.type = 'fnfunc', resource.compartment.id = 'ocid1.compartment.oc1..example'}
    

    Hinweis: Stellen Sie sicher, dass Sie den obigen Wert durch die zuvor gespeicherte Compartment-OCID ersetzen.

Object Storage-Bucket erstellen

Sie benötigen einen input-bucket-Bucket in Object Storage. Mit input-bucket können Sie die CSV-Dateien ablegen. Die Funktion verarbeitet die Datei und importiert sie in Oracle Autonomous Data Warehouse.

Erstellen Sie zuerst input-bucket:

  1. Öffnen Sie das Navigationsmenü, wählen Sie Objektspeicher und dann Objektspeicher aus.

  2. Wählen Sie Ihr Entwicklungs-Compartment in der Liste Compartment aus.

  3. Klicken Sie auf Bucket erstellen.

  4. Benennen Sie den Bucket input-bucket.

  5. Wählen Sie die Standard-Storage Tier aus.

  6. Aktivieren Sie das Kontrollkästchen Objektereignisse ausgeben.

  7. Klicken Sie auf Bucket erstellen.

    Eingabe-Bucket erstellen

IAM-Policys erstellen

Erstellen Sie eine neue Policy, mit der die dynamische Gruppe (functions-dynamic-group) Objekte im Bucket verwalten kann.

  1. Öffnen Sie das Navigationsmenü, wählen Sie Identität, Policys aus.

  2. Klicken Sie auf Policy erstellen.

  3. Geben Sie als Namen functions-buckets-policy ein.

  4. Geben Sie zur Beschreibung Policy that allows functions dynamic group to manage objects in the bucket ein.

  5. Klicken Sie auf den Link Anpassen (erweitert), und fügen Sie die Policy-Anweisungen in das Feld "Policy Builder" ein:

    Allow dynamic-group functions-dynamic-group to manage objects in compartment [compartment-name] where target.bucket.name='input-bucket'
    

    Hinweis: Ersetzen Sie compartment-name durch den Namen des Entwicklungs-Compartments (das Compartment, in dem Sie das VCN und die Funktionsanwendung erstellt haben).

  6. Klicken Sie auf Erstellen.

    Functions-buckets-Policy erstellen

Autonomous Database erstellen

Die Funktion greift aus Gründen der Einfachheit mit SODA (Simple Oracle Document Access) auf die autonome Datenbank zu. Sie können den anderen Zugriffstyp verwenden, indem Sie die Funktion ändern.

  1. Öffnen Sie das Navigationsmenü, und wählen Sie Autonomous Data Warehouse aus.

  2. Klicken Sie auf Autonome Datenbank erstellen.

  3. Wählen Sie in der Liste Ihr Entwicklungs-Compartment aus.

  4. Geben Sie für den Anzeigenamen und den Datenbanknamen funcdb ein.

  5. Wählen Sie als Workload-Typ Transaktionsverarbeitung aus.

  6. Wählen Sie als Deployment-Typ Shared Infrastructure aus.

  7. Geben Sie das Admin-Kennwort ein.

  8. Klicken Sie auf Autonome Datenbank erstellen.

    Autonomous Database erstellen

Warten Sie, bis OCI die autonome Datenbank durch Provisioning bereitstellt, und klicken Sie dann auf die Schaltfläche Servicekonsole.

  1. Klicken Sie in der Randleiste auf Development.

  2. Klicken Sie unter RESTful Services und SODA auf URL kopieren.

  3. Erstellen Sie in Ihrem Terminal (oder Cloud Shell) die Collection mit dem Namen regionsnumbers, indem Sie den folgenden Befehl ausführen. Stellen Sie sicher, dass Sie <ORDS_BASE_URL> durch den Wert ersetzen, den Sie im vorherigen Schritt kopiert haben, und <DB-PASSWORD> durch das Admin-Kennwort, das Sie beim Erstellen der autonomen Datenbank festgelegt haben.

    export ORDS_BASE_URL=<ORDS_BASE_URL>
    curl -X PUT -u 'ADMIN:<DB-PASSWORD>' -H "Content-Type: application/json" $ORDS_BASE_URL/admin/soda/latest/regionsnumbers
    
  4. Um eine doppelte Prüfdatenerfassung zu erstellen, können Sie alle Sammlungen auflisten. Die Ausgabe sollte wie folgt aussehen:

    	bash
    $ curl -u 'ADMIN:<DB-password>' -H "Content-Type: application/json" $ORDS_BASE_URL/admin/soda/latest/
       
    {"items":[{"name":"regionsnumbers","properties":{"schemaName":"ADMIN","tableName":"REGIONSNUMBERS","keyColumn":{"name":"ID","sqlType":"VARCHAR2","maxLength":255,"assignmentMethod":"UUID"},"contentColumn":{"name":"JSON_DOCUMENT","sqlType":"BLOB","jsonFormat":"OSON"},"versionColumn":{"name":"VERSION","type":"String","method":"UUID"},"lastModifiedColumn":{"name":"LAST_MODIFIED"},"creationTimeColumn":{"name":"CREATED_ON"},"readOnly":false},"links":[{"rel":"canonical","href":"https://.../ords/admin/soda/latest/regionsnumbers"}]}],"hasMore":false}
    

Funktion bereitstellen

In diesem Schritt klonen Sie das Quellcode-Repository der Funktionen und verwenden den Befehl fn deploy, um das Docker-Image zu erstellen, das Image an OCIR zu übergeben und die Funktion in Oracle Functions in Ihrer Anwendung bereitzustellen.

  1. Öffnen Sie in der Konsolen-UI die Cloud Shell.

  2. Klonen Sie das Functions-Quellcode-Repository:

    git clone https://github.com/oracle/oracle-functions-samples.git
    
  3. Gehen Sie zum Ordner samples/oci-load-file-into-adw-python:

    cd oracle-functions-samples/samples/oci-load-file-into-adw-python
    
  4. Stellen Sie die Funktion in etl-app bereit:

    fn -v deploy --app etl-app
    

    Nachdem Sie die Funktion bereitgestellt haben, müssen Sie Funktionskonfigurationswerte festlegen, damit die Funktion weiß, wie eine Verbindung zu Autonomous Database hergestellt werden soll.

  5. Legen Sie mit der Fn-CLI die folgenden Konfigurationswerte fest. Stellen Sie sicher, dass Sie [ORDS_BASE_URL] und [DB_PASSWORD] durch Ihre Werte ersetzen:

    fn config function etl-app oci-load-file-into-adw-python ords-base-url [ORDS_BASE_URL]
    fn config function etl-app oci-load-file-into-adw-python db-schema admin
    fn config function etl-app oci-load-file-into-adw-python db-user admin
    fn config function etl-app oci-load-file-into-adw-python dbpwd-cipher [DB-PASSWORD]
    fn config function etl-app oci-load-file-into-adw-python input-bucket input-bucket
    fn config function etl-app oci-load-file-into-adw-python processed-bucket processed-bucket
    

Ereignisregel erstellen

In diesem Schritt konfigurieren Sie ein Cloud-Ereignis, um die Funktion auszulösen, wenn Sie die Dateien in input-bucket ablegen.

  1. Öffnen Sie in der Konsolen-UI die Navigation, wählen Sie Anwendungsintegration aus, und klicken Sie auf Events-Service.

  2. Wählen Sie Ihr Entwicklungs-Compartment in der Liste Compartment aus.

  3. Klicken Sie auf Regel erstellen.

  4. Geben Sie als Anzeigename load_CSV_into_ADW ein.

  5. Geben Sie zur Beschreibung Load CSV file into ADW ein.

  6. Erstellen Sie drei Regeln. Sie können auf Weitere Bedingung klicken, um weitere Bedingungen hinzuzufügen:

    Bedingung Service-/Attributname Ereignistyp/Attributwerte
    Ereignistyp Objektspeicher Objekt - Erstellen
    Attribut compartmentName
    Attribut bucketName Eingabe-Bucket
  7. Wählen Sie unter "Aktionen" die Option Funktionen aus:

    • Wählen Sie für das Funktions-Compartment Ihr Entwicklungs-Compartment aus.
    • Wählen Sie für die Funktionsanwendung etl-app aus.
    • Wählen Sie für die Funktion oci-load-file-into-adw-python aus.
  8. Klicken Sie auf Regel erstellen.

    Regel

Funktion testen

Um die Funktion zu testen, können Sie eine .csv-Datei in die Datei input-bucket hochladen. Dazu können Sie die Konsolen-UI oder Cloud Shell mit der OCI-CLI verwenden.

  1. Öffnen Sie Cloud Shell.

  2. Gehen Sie zum Funktionsordner:

    cd ~/oracle-functions-samples/samples/oci-load-file-into-adw-python
    
  3. Verwenden Sie die OCI-CLI, um file1.csv in input-bucket hochzuladen:

    $ oci os object put  --bucket-name input-bucket --file file1.csv
    Uploading object  [####################################]  100%
    {
      "etag": "607fd72d-a041-484c-9ee0-93b9f5488084",
      "last-modified": "Tue, 20 Oct 2020 18:03:50 GMT",
      "opc-content-md5": "O8mZv0X2gLagQGT5CutWsQ=="
    }
    

    So zeigen Sie die Daten in der Datenbank an:

    1. Navigieren Sie über die OCI-Konsole zu Autonomous Data Warehouse.

    2. Wählen Sie Ihr Entwicklungs-Compartment in der Liste Compartment aus.

    3. Wählen Sie Transaktionsverarbeitung aus der Liste Workload-Typ.

    4. Klicken Sie auf den Datenbanknamen (funcdb).

    5. Klicken Sie auf Servicekonsole.

    6. Klicken Sie in der Randleiste auf den Link Entwicklung.

    7. Klicken Sie auf "SQL Developer Web".

    8. Verwenden Sie ADMIN und das Admin-Kennwort für die Authentifizierung.

    9. Geben Sie im Arbeitsblatt die folgende Abfrage ein:

      select UTL_RAW.CAST_TO_VARCHAR2( DBMS_LOB.SUBSTR( JSON_DOCUMENT, 4000, 1 )) AS json from regionsnumbers
      
    10. Klicken Sie auf die grüne Schaltfläche "Wiedergeben", um die Abfrage auszuführen.

    11. Die Daten aus der CSV-Datei befinden sich auf der Registerkarte Abfrageergebnis.

Glückwunsch. Sie haben das Tutorial erfolgreich abgeschlossen.

Danksagungen

Weitere Lernressourcen

Sehen Sie sich weitere Übungen unter docs.oracle.com/learn an, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning-Kanal YouTube zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.

Die Produktdokumentation finden Sie im Oracle Help Center.