Komponentenpackage in einem Service bereitstellen

Sie können das benutzerdefinierte Komponentenpaket in einem eingebetteten Container von Digital Assistant, in Oracle Cloud Infrastructure Functions, in Mobile Hub oder auf einem externen Node.js-Server hosten.

Bei eingebetteten Komponentenservices stellen Sie das Package bereit, wenn Sie den Service erstellen. Bei Oracle Cloud Infrastructure Functions-, externen Node.js-Server- und Mobile Hub-Services müssen Sie das Package zuerst wie hier beschrieben im Service bereitstellen, bevor Sie es einem Skill-as-a-Component Service hinzufügen.

Auf einem Node.js-Server bereitstellen

Um ein benutzerdefiniertes Komponentenpackage auf einem externen Node.js-Server zu hosten, verwenden Sie die CLI bots-node-sdk pack --service express, um die Komponentenpackageordner zu kopieren. Nehmen Sie einige für Express spezifische Änderungen vor, installieren Sie das Komponentenpackage, und starten Sie es auf dem Server.

  1. Geben Sie im Ordner der obersten Ebene des benutzerdefinierten Komponentenpackages (dem Ordner, der die Datei main.js enthält) den folgenden Befehl in einem Terminalfenster ein:

    bots-node-sdk pack --service express

    Der Befehl führt folgende Schritte aus:

    • Kopiert die Dateien und Unterordner in service-express-<Packageversion>.
    • Fügt einen index.js-Service-Wrapper hinzu.
    • Erstellt eine api.js-Datei, bei der es sich um einen Express-Wrapper für main.js handelt.
    • Ändert die Datei package.json, um die Hauptdatei auf index.js zu setzen und die Abhängigkeiten hinzuzufügen.

    In diesem Schritt wird der grundlegende CLI-Befehl angezeigt. Weitere Informationen finden Sie unter https://github.com/oracle/bots-node-sdk/blob/master/bin/CLI.md.

  2. Führen Sie diese Befehle aus:

    npm install
    
    npm start

In Oracle Cloud Infrastructure Functions bereitstellen

Sie können Ihre benutzerdefinierten Komponenten in Oracle Cloud Infrastructure Functions bereitstellen.

Derzeit kann Oracle Digital Assistant nicht auf Entity-Event-Handler in Packages zugreifen, die Sie in Oracle Cloud Infrastructure Functions bereitstellen.

Hierzu sind die folgenden grundlegenden Schritte erforderlich:

  1. Artefaktnamen und -berechtigungen für Oracle Cloud Infrastructure Functions-Deployment abrufen

  2. Benutzeraccount für Oracle Functions einrichten

  3. Lokalen Rechner für Oracle Functions einrichten

  4. Benutzerdefiniertes Komponentenpackage für Oracle Functions ändern

  5. Benutzerdefinierte Komponenten in Oracle Cloud Infrastructure Functions bereitstellen

Artefaktnamen und -berechtigungen für Oracle Cloud Infrastructure Functions-Deployment abrufen

Bevor Sie benutzerdefinierte Komponenten in Oracle Cloud Infrastructure Functions bereitstellen können, müssen Sie die Namen der Artefakte abrufen, die für das Deployment verwendet werden, und prüfen, ob Sie zu ihrer Verwendung berechtigt sind.

Um Ihre Instanz für das Oracle Cloud Infrastructure Functions-Deployment einzurichten, hat Ihr Mandantenadministrator die Schritte unter Setup und Policys für Oracle Functions ausgeführt. Im Rahmen des Prozesses wurden die folgenden Artefakte erstellt. Fragen Sie den Administrator nach den Namen der Artefakte. Sie benötigen diese, wenn Sie die Schritte unter Benutzeraccount für Oracle Functions einrichten ausführen:

  • Die Namen der Region und des Compartments für Ihre Funktionen.

  • Der Name des Compartments für das virtuelle Netzwerk (VCN) der Funktionsanwendung. Normalerweise entspricht dieses dem Compartment, das für Funktionen verwendet wird.

  • Der Name des VCN, das für die Funktionsanwendung verwendet werden soll.

Bitten Sie den Administrator außerdem, sicherzustellen, dass Sie zu einer Gruppe gehören, die über die erforderlichen Berechtigungen für Funktionsentwickler verfügt, einschließlich Zugriff auf diese Artefakte.

Benutzeraccount für Oracle Functions einrichten

Vor dem Deployment von benutzerdefinierten Komponentenpackages in Oracle Cloud Infrastructure Functions müssen Sie die folgenden Schritte in der Oracle Cloud Infrastructure-Konsole ausführen:

Hinweis

Sie müssen den Namen der zu verwendenden Compartments und des virtuellen Netzwerks (VCN) kennen. Sie müssen zu einer Gruppe gehören, die eine Funktionsentwicklung zulässt, wie unter Artefaktnamen und Berechtigungen für das Oracle Cloud Infrastructure Functions-Deployment abrufen beschrieben.
  1. Melden Sie sich bei der Konsole an, und wählen Sie in der oberen Leiste die Region aus, in der sich das Funktionsentwicklungs-Compartment befindet.

  2. Sie werden in Oracle Cloud Infrastructure Functions über Oracle Cloud Infrastructure Registry bereitgestellt. Wenn noch kein Registry Repository vorhanden ist, das Sie verwenden können, führen Sie die folgenden Schritte aus, um ein Repository zu erstellen.

    1. Klicken Sie oben links auf Symbol für Navigationsmenü, um das Navigationsmenü zu öffnen. Klicken Sie dann auf Entwicklerservices und Container Registry, und wählen Sie im Abschnitt Listengeltungsbereich das Compartment aus, das für die Funktionsentwicklung eingerichtet wurde.

    2. Klicken Sie auf Repository erstellen.

    3. Geben Sie dem Repository einen Namen, und klicken Sie auf Repository erstellen.

  3. Wenn keine Funktionsanwendung für die benutzerdefinierten Komponentenpackages vorhanden ist, müssen Sie eine erstellen. Klicken Sie auf der Seite Entwicklerservices auf Functions und dann auf Anwendung erstellen. Geben Sie einen Namen an, wählen Sie ein VCN aus, wählen Sie mindestens ein Subnetz aus, und klicken Sie auf Erstellen.

    Wenn keine VCNs zur Auswahl angezeigt werden, befinden Sie sich möglicherweise nicht in der richtigen Region.

    Die Anzahl der Anwendungen und Funktionen ist begrenzt. Die Standardlimits finden Sie unter Limits für Functions in der Oracle Cloud Infrastructure-Dokumentation.

  4. Klicken Sie auf der Seite "Anwendungen" auf die Anwendung, die Sie für das Funktions-Deployment verwenden, klicken Sie im Abschnitt Ressourcen auf Erste Schritte, und klicken Sie dann auf Lokales Setup.

    Wie im folgenden Screenshot dargestellt, werden auf der Seite mehrere Befehle angezeigt, mit denen Sie den lokalen Rechner einrichten und das benutzerdefinierte Komponentenpackage bereitstellen. Kopieren und speichern Sie die Befehle für die Schritte 3 bis 7.

    Sie verwenden diese später, nachdem Sie die erforderliche Software auf dem lokalen Rechner installiert haben und die benutzerdefinierten Komponenten bereitstellen können. Alternativ können Sie diese Seite mit einem Lesezeichen versehen, damit Sie zu ihr zurückkehren können, wenn Sie die Befehle verwenden müssen.

    Führen Sie diese Befehle jetzt nicht aus. Kopieren Sie sie einfach.


    Beschreibung von fn-local-setup-commands.png folgt
    Beschreibung von Abbildung fn-local-setup-commands.png

  5. Ändern Sie im kopierten Befehl, der in etwa wie folgt aussieht, [OCIR-REPO] in den Namen des Registry Repositorys.

    fn update context registry phx.ocir.io/devdigital/[OCIR-REPO]
  6. Klicken Sie in der oberen rechten Ecke auf das Symbol Profil und dann auf Benutzereinstellungen, um zur Seite Benutzerdetails zu gelangen.

  7. Im nächsten Schritt erstellen Sie eine PEM-Datei, die Sie in einem .oci-Ordner auf dem lokalen Rechner speichern müssen. Wenn der Home-Ordner auf dem lokalen Rechner dieses Verzeichnis nicht enthält, erstellen Sie ein Verzeichnis aus einem Terminalfenster.

    • Linux und Mac:

      cd ~
      mkdir .oci
    • Fenster:

      cd C:\Users\<your-user-name>
      mkdir .oci
  8. Sie benötigen eine öffentliche und eine private PEM-Datei für einen sicheren Zugriff. Wenn Sie noch keine Datei für Ihren Benutzeraccount eingerichtet haben, klicken Sie in der Konsole unter Benutzerdetails im Abschnitt Ressourcen auf API-Schlüssel und dann auf API-Schlüssel hinzufügen.

    Speichern Sie die Private-Key-Datei (die PEM-Datei) im .oci-Verzeichnis in Ihrem Home-Ordner.

  9. Notieren Sie sich den Fingerprint für den API-Schlüssel. Wenn mehrere API-Schlüssel vorhanden sind, müssen Sie wissen, welcher Fingerprint für jede private PEM-Datei verwendet werden soll.
  10. Wenn Sie noch keine config-Datei für den Fingerprint auf dem lokalen Rechner eingerichtet haben, führen Sie im Abschnitt API-Schlüssel die folgenden Schritte aus:

    1. Klicken Sie in der Zeile für den Fingerprint des API-Schlüssels auf Weitere Informationen und dann auf Konfigurationsdatei anzeigen.

    2. Kopieren Sie den Inhalt unter Vorschau von Konfigurationsdatei.

    3. Erstellen Sie im .oci-Ordner auf dem lokalen Rechner (dem Ordner, in dem Sie die Private-Key-Datei gespeichert haben), eine Datei namens config, und fügen Sie den kopierten Inhalt in die Datei ein.

  11. Ändern Sie in der config-Datei die Eigenschaft key_file so, dass sie auf den Speicherort Ihrer privaten PEM-Datei verweist. Beispiel: key_file=/home/joe/.oci/my-private.pem

  12. Wenn Sie kein Authentifizierungstoken besitzen, klicken Sie im Menü Ressourcen auf Authentifizierungstoken und dann auf Token generieren. Kopieren Sie das Authentifizierungstoken sofort in einen sicheren Speicherort, aus dem Sie es später abrufen können, da das Authentifizierungstoken nicht erneut in der Konsole angezeigt wird. Sie verwenden das Authentifizierungstoken als Kennwort, wenn Sie sich anmelden, um das benutzerdefinierte Komponentenpackage zum Deployment in die Oracle Infrastructure-Registry zu übertragen.

Lokalen Rechner für Oracle Functions einrichten

Sie müssen cURL, die OCI-Befehlszeilenschnittstelle (CLI), Fn und Docker auf dem lokalen Rechner installieren, um das Deployment in Oracle Cloud Infrastructure Functions zu aktivieren. Wenn der Rechner unter Windows ausgeführt wird, müssen Sie eine der folgenden Optionen für die Verwendung von Fn ausführen:

So richten Sie den lokalen Rechner ein:

  1. (nur Windows auf VM) Wenn Sie einen Linux-Gast in Oracle VM VirtualBox verwenden möchten, um Ihr benutzerdefiniertes Komponentenpackage in Oracle Cloud Infrastructure Functions bereitzustellen, gehen Sie folgendermaßen vor:

    1. Installieren Sie VirtualBox aus https://www.virtualbox.org/.

    2. Laden Sie eine Linux-ISO-Datei herunter. Beispiel: Um die ISO-Datei für Ubuntu-Mate abzurufen, gehen Sie zu https://ubuntu-mate.org/download/, und klicken Sie auf 64-bit PCs/Macs.

    3. Erstellen Sie in VirtualBox eine virtuelle Maschine aus der ISO-Datei. Anweisungen zum Erstellen einer Ubunto-Mate-VM finden Sie unter https://itsfoss.com/install-linux-in-virtualbox/. Das ist dann der Linux-Gast.

    4. Starten Sie den Linux-Gast.

    5. Führen Sie in einem Terminalfenster den folgenden Befehl aus:

      sudo apt-get update

      Dadurch werden die Packagelisten für neue Packages und Packages, die upgegradet werden müssen, aktualisiert.

      Tipp:

      Um ein Terminalfenster in Ubuntu zu öffnen, drücken Sie Strg-Alt-T.
    6. Um Aktionen wie Kopieren und Einfügen in einem Terminalfenster ausführen zu können, benötigen Sie die Gasterweiterungen. Laden Sie http://download.virtualbox.org/virtualbox/<release>/VBoxGuestAdditions_<release>.iso herunter, und installieren und konfigurieren Sie die Erweiterungen anhand der Anweisungen unter https://itsfoss.com/virtualbox-guest-additions-ubuntu/.

      Setzen Sie Devices > Drag and Drop auf bidirectional.

    7. Geben Sie diesen Befehl in ein Terminalfenster ein, um node.js und npm auf dem Gast zu installieren.

      sudo apt install npm
    8. Ziehen Sie den .oci-Ordner aus dem Home-Verzeichnis auf dem lokalen Rechner in den Home-Ordner auf dem Linux-Gast.

      Da es sich um eine verborgene Datei handelt, müssen Sie Strg-H drücken oder View > Show Hidden Files im Home-Ordner auswählen, um sie anzuzeigen.

    9. Öffnen Sie im .oci-Ordner des Linux-Gasts die config-Datei, und ändern Sie key_file, um auf den Speicherort der Datei im Linux-Gast zu verweisen. Beispiel: key_file=/home/joe/.oci/my-private.pem

    10. Führen Sie die restlichen Schritte in diesem Thema auf dem Linux-Gast aus.

  2. (Nur Mac) Falls noch nicht geschehen, installieren Sie Homebrew, damit Sie cURL, OCI-CLI und Fn installieren können. Siehe https://docs.brew.sh/Installation. Alternativ können Sie die entsprechenden MacPorts-Befehle verwenden.
  3. Wenn Sie über ein VPN auf das Internet zugreifen, müssen Sie unter Umständen Proxys einrichten. Beispiel:

    export http-proxy = http://<external_ip>:80
    export https-proxy = http://<external_ip>:80
    export no_proxy = localhost,127.0.0.1,<list>
    export noproxy = localhost,127.0.0.1,<list>
    export no_proxy = localhost,127.0.0.1,<list>
    # Example for apt
    nano /etc/apt/apt.conf
    Acquire::http::Proxy "http://<external_ip>:80";
    Acquire::https::Proxy "http://<external_ip>:80";
  4. Führen Sie den entsprechenden Befehl aus, um die Packages auf den neuesten Stand zu bringen.

    • Linux:

      sudo apt update && sudo apt upgrade
    • Mac:

      brew update && brew upgrade
  5. (Nur Linux) Sie installieren OCI und Fn mit cURL. Geben Sie diesen Befehl in einem Terminalfenster ein. Mit der letzten Anweisung wird geprüft, ob die Installation erfolgreich war.

    sudo apt install curl
    curl --version
  6. Fn verwendet die OCI-CLI, um die benutzerdefinierten Komponenten in Oracle Cloud Infrastructure Functions bereitzustellen. Führen Sie den entsprechenden Befehl aus, um die CLI zu installieren, und akzeptieren Sie alle Standardwerte.

    • Linux:

      bash -c "$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)"
    • Mac:

      brew update && brew install oci-cli
    • Windows (wenn ein Linux-Subsystem unter Windows verwendet wird): Befolgen Sie die Schritte für Windows unter Schnellstart in der Oracle Cloud Infrastructure-Dokumentation.
  7. Unter Benutzeraccount für Oracle Functions einrichten haben Sie eine config-Datei erstellt. Sie müssen die CLI jetzt für die Verwendung dieser Datei konfigurieren. Öffnen Sie ein neues Terminalfenster, führen Sie diesen Befehl aus, geben Sie den Speicherort der config-Datei an, und geben Sie dann n für die restlichen Fragen ein (die config-Datei verfügt bereits über die erforderlichen Einstellungen).

    oci setup config

    Beispiel:

    $ oci setup config
        This command provides a walkthrough of creating a valid CLI config file.
        ...
    
    Enter a location for your config [/home/joe/.oci/config]:
    Config file: /home/joe/.oci/config already exists. Do you want add a profile here? (If no, you will be prompted to overwrite the file) [Y/n]: n
    File: /home/joe/.oci/config already exists. Do you want to overwrite (Removes existing profiles!!!)? [y/N]: n
  8. Sie benötigen Docker 17.10.0-ce oder höher, um das benutzerdefinierte Komponentenpackage in die Registry zu übertragen.

    Informationen hierzu finden Sie unter https://docs.docker.com/engine/install/linux-postinstall/, wenn Sie dem Befehl docker nicht sudo voranstellen möchten.

  9. Wenn Sie ein VPN verwenden, befolgen Sie die Anweisungen unter https://docs.docker.com/network/proxy/.

    Wenn Sie ein Linux-Subsystem unter Windows verwenden, können Sie die Proxys auf der Seite Resources in den Einstellungen von Docker-Desktop festlegen.

  10. Stellen Sie sicher, dass Docker ausgeführt wird. Fn wird als Nächstes installiert. Sie können Fn nicht starten, wenn Docker nicht ausgeführt wird.

  11. Sie verwenden Fn, eine einfache Docker-basierte Plattform für serverlose Funktionen, um den Kontext zu konfigurieren und das Package bereitzustellen. Wenn Sie Fn noch nicht installiert haben, befolgen Sie die Anweisungen zum Installieren von Fn, Starten des Fn-Servers und Testen der Installation unter https://fnproject.io/tutorials/install/.

    Sie müssen zu diesem Zeitpunkt nicht den Kontext konfigurieren oder die Registry festlegen. Diese Aktionen führen Sie aus, wenn Sie die Schritte unter Benutzerdefinierte Komponenten in Oracle Cloud Infrastructure Functions bereitstellen abschließen.

Benutzerdefiniertes Komponentenpackage für Oracle Functions ändern

Bevor Sie ein benutzerdefiniertes Komponentenpackage in Oracle Cloud Infrastructure Functions bereitstellen können, müssen Sie die Dateien func.js und func.yaml hinzufügen, eine Entwicklerabhängigkeit für das fnproject-FDK hinzufügen und das FDK installieren.

Hinweis

(Nur Windows-VM) Wenn Sie einen Linux-Gast verwenden, führen Sie diese Schritte auf dem lokalen Rechner aus, und kopieren Sie das Komponentenpackage dann mit Drag & Drop in den Linux-Gast. Alternativ können Sie node.js und das Bots Node-SDK, wie unter Schritt 1: Software für das Erstellen benutzerdefinierter Komponenten installieren beschrieben, auf dem Linux-Gast installieren, bevor Sie die Schritte ausführen.
  1. Wenn Sie den Befehl bots-node-sdk init zum Erstellen des benutzerdefinierten Komponentenpackages verwendet haben, wurde möglicherweise eine Datei mit dem Namen Dockerfile im obersten Ordner erstellt. Wenn ja, müssen Sie sie löschen. Andernfalls verläuft Ihr Deployment nicht erfolgreich.

  2. Erstellen Sie im Hauptordner für das benutzerdefinierte Komponentenpackage (dem Ordner mit main.js) eine Datei mit dem Namen func.js, und fügen Sie dann den folgenden Code hinzu. Diese Datei wird von Oracle Cloud Infrastructure Functions aufgerufen.

    /***
     
      This function handles an invocation that sets the "Oracle-Bots-Fn-Path" header to determine which component to invoke or if metadata should be returned.
     
    ***/
     
    const fdk = require('@fnproject/fdk');
    const OracleBotLib = require('@oracle/bots-node-sdk/lib');
    const path = require("path");
     
    const BOTS_FN_PATH_HEADER = "Oracle-Bots-Fn-Path";
    const METADATA_PATH = "metadata";
    const COMPONENT_PREFIX = "components/";
     
    let shell;
    let componentsRegistry;
     
    const getComponentsRegistry = function (packagePath) {
        let registry = require(packagePath);
        if (registry.components) {
            return OracleBotLib.ComponentRegistry.create(registry.components, path.join(process.cwd(), packagePath));
        }
        return null;
    }
     
    componentsRegistry = getComponentsRegistry('.');
    if (componentsRegistry && componentsRegistry.getComponents().size > 0) {
        shell = OracleBotLib.ComponentShell({logger: console}, componentsRegistry);
        if (!shell) {
            throw new Error("Failed to initialize Bots Node SDK");
        }
    } else {
        throw new Error("Unable to process component registry because no components were found in package: " + packagePath);
    }
     
    const _handle = function (input, ctx) {
        let botsFnPath = ctx.getHeader(BOTS_FN_PATH_HEADER);
        if (!botsFnPath) {
            throw new Error("Missing required header " +  BOTS_FN_PATH_HEADER);
        } else if (botsFnPath === METADATA_PATH) {
            return shell.getAllComponentMetadata();
        } else if (botsFnPath.startsWith(COMPONENT_PREFIX)) {
            let componentName = botsFnPath.substring(COMPONENT_PREFIX.length);
            if (!componentName) {
                throw new Error("The component name is missing from the header " + BOTS_FN_PATH_HEADER + ": " + botsFnPath);
            }
            return new Promise((resolve) => {
                let callback = (err, data) => {
                    if (!err) {
                        resolve(data);
                    } else {
                        console.log("Component invocation failed", err.stack);
                        throw err;
                    }
                };
                shell.invokeComponentByName(componentName, input, {logger: () => console}, callback);
                });
        }
    };
     
    fdk.handle(function (input, ctx) {
        try {
            return _handle(input, ctx);
        } catch (err) {
            console.log("Function failed", err.stack);
            throw err;
        }
    });
  3. Erstellen Sie in demselben Ordner eine Datei mit dem Namen func.yaml, und fügen Sie dann den folgenden Inhalt hinzu:

    schema_version: 20180708
    name: <custom component package name>
    version: 0.0.1
    runtime: [node11|node14]
    build_image: [fnproject/node:11-dev|fnproject/node:14-dev]
    run_image: [fnproject/node:11|fnproject/node:14]
    entrypoint: node func.js
  4. Ändern Sie in der Eigenschaft name den <custom component package name> in den Namen des benutzerdefinierten Komponentenpackages, und speichern Sie die Änderungen. Der Name entspricht in der Regel dem Namen, den Sie in der Datei package.json angeben.

    Der Name darf nicht mehr als 255 Zeichen enthalten und darf nur Buchstaben, Zahlen, _ und - enthalten.

  5. Legen Sie die folgenden Eigenschaften fest:

    • runtime: Die Sprache und Version des Knotens. Geben Sie node11 oder node14 an.

    • build_image: Das Build-Time-Basisimage, das die sprachspezifischen Librarys und Tools zum Erstellen ausführbarer Funktionen enthält. Geben Sie fnproject/node:11-dev oder fnproject/node:14-dev an.

    • run_image: Das Laufzeitbasisimage, das die sprachspezifische Laufzeitumgebung zur Ausführung ausführbarer Funktionen bereitstellt. Geben Sie fnproject/node:11 oder fnproject/node:14 an.

  6. Wechseln Sie in einem Terminalfenster zum Hauptordner des Packages, und geben Sie diesen Befehl ein, um das FDK zu installieren und als Packageabhängigkeit in der Datei package.json hinzuzufügen:

    npm install --save-dev @fnproject/fdk
  7. (Optional - Nur Linux, Mac und Linux-Subsystem unter Windows) Führen Sie diesen Befehl aus, um Packageabhängigkeiten zu installieren:

    npm install

    Wenn der Ordner node_modules nicht vorhanden ist, ruft der Befehl fn deploy, den Sie später ausführen, npm install für Sie auf.

  8. (Nur Windows-VM) Führen Sie die folgenden Schritte aus, um den benutzerdefinierten Komponentencode zum Deployment in den Linux-Gast zu kopieren:

    1. Verschieben Sie den Ordner der obersten Ebene per Drag-and-Drop in den Linux-Gast.

    2. Wechseln Sie in einem Terminalfenster zum Ordner der obersten Ebene (dem Ordner, der main.js enthält), und geben Sie diesen Befehl ein, um Ausführungsberechtigungen für den Ordner hinzuzufügen.

      chmod 755 components
    3. Löschen Sie den Ordner node_modules, um sicherzustellen, dass keine plattformabhängigen Knotenmodule vorhanden sind.

    4. (Optional) Führen Sie diesen Befehl aus, um die Knotenmodulabhängigkeiten neu zu installieren.

      npm install

      Wenn der Ordner node_modules nicht vorhanden ist, ruft der Befehl fn deploy, den Sie später ausführen, npm install für Sie auf.

Sie können nun die Schritte unter Benutzerdefinierte Komponenten in Oracle Cloud Infrastructure Functions bereitstellen ausführen.

Benutzerdefinierte Komponenten in Oracle Cloud Infrastructure Functions bereitstellen

Nachdem Sie die Datei func.js erstellt, fnproject zu den Entwicklungsabhängigkeiten hinzugefügt und die Abhängigkeiten wie unter Benutzerdefiniertes Komponentenpaket für Oracle Functions ändern installiert haben, können Sie ein Docker-Image des Komponentenpackages in Oracle Cloud Infrastructure Functions bereitstellen.

Bei den Schritten unter Benutzeraccount für Oracle Functions einrichten haben Sie auf der Seite "Erste Schritte" Befehle aus Lokales Setup für die Schritte 3 bis 7 kopiert. Mit diesen kopierten Befehlen stellen Sie Ihre benutzerdefinierte Komponenten bereit.

Wenn Sie Cloud Shell verwenden, verwenden Sie stattdessen die ähnlichen Befehle, die in Cloud Shell-Setup angezeigt werden.

So stellen Sie die benutzerdefinierten Komponenten bereit:

  1. Stellen Sie sicher, dass Docker und der Fn-Server ausgeführt werden.

  2. Wechseln Sie in einem Terminalfenster zum obersten Verzeichnis für das benutzerdefinierte Komponentenpackage, und geben Sie die passenden kopierten Befehle ein, um den Kontext zu konfigurieren.

    fn create context <context> --provider oracle
    fn use context <context>
    fn update context oracle.compartment-id <compartment-ocid>
    fn update context api-url https://functions.<region-identifier>.oci.oraclecloud.com

    Sie müssen diese Befehle erst dann erneut ausführen, wenn Sie die Kontextkonfigurationen ändern müssen.

    Wenn beim Ändern des Kontextes der Fehler "Fn: error replace file with tempfile" angezeigt wird, bearbeiten Sie ~/.fn/config.yaml manuell, und ändern Sie den Kontext in dieser Datei.

  3. Wenn die Konfigurationsdatei mehrere Profile enthält, geben Sie diesen Befehl ein, um auf das Profil zu verweisen, das Sie unter Benutzeraccount für Oracle Functions einrichten erstellt haben.

    fn update context oracle.profile <profile-name>
  4. Um auf das Registry Repository zu verweisen, das Sie unter Benutzeraccount für Oracle Functions einrichten erstellt haben, geben Sie den kopierten Befehl ein, der dem folgenden Befehl entspricht: Falls noch nicht geschehen, ändern Sie [OCIR-REPO] in den Namen Ihres Repositorys.

    fn update context registry <region-key>.ocir.io/<tenancy-namespace>/[OCIR-REPO]

    Sie müssen diesen Befehl erst dann erneut ausführen, wenn Sie die Repository-Konfiguration ändern müssen.

  5. Wenn Sie sich in der aktuellen Session nicht bei Docker angemeldet haben, führen Sie den kopierten Befehl aus, der dem hier gezeigten Befehl entspricht.

    Wenn Sie zur Eingabe eines Kennworts aufgefordert werden, geben Sie das Authentifizierungstoken ein. Dabei handelt es sich um das Token, das Sie beim Ausführen der Schritte unter Benutzeraccount für Oracle Functions einrichten erhalten haben.

    docker login -u '<tenancy-namespace>/<user-name>' <region-key>.ocir.io
  6. Um die benutzerdefinierten Komponenten bereitzustellen, führen Sie den folgenden Befehl aus:

    fn deploy --app <application>

    Wenn die folgende Meldung angezeigt wird, öffnen Sie die .oci/config-Datei, und prüfen Sie, ob fingerprint den richtigen Fingerprint für die angegebene key_file anzeigt. Wenn nicht, gehen Sie zu den Benutzereinstellungen in der Konsole, klicken Sie auf API-Schlüssel, zeigen Sie die Konfigurationsdatei für den richtigen Fingerprint an, und ersetzen Sie dann den Inhalt der Konfigurationsdatei durch den angezeigten Inhalt.

    Fn: Service error:NotAuthenticated. The required information to complete
    authentication was not provided or was incorrect.. 
    http status code: 401.

Die benutzerdefinierten Komponenten können nun wie unter Oracle Functions-Service hinzufügen beschrieben in einem Skill verwendet werden.

In Mobile Hub bereitstellen

Um ein benutzerdefiniertes Komponentenpackage in Mobile Hub zu hosten, verwenden Sie die CLI bots-node-sdk pack --service mobile-api, um die Komponentenpackageordner zu kopieren und einige für Mobile Hub spezifische Änderungen vorzunehmen, einschließlich der RAML-Datei. Erstellen Sie dann die benutzerdefinierte API aus der RAML-Datei, und laden Sie eine ZIP-Datei des Komponentenpackages in die benutzerdefinierte API hoch.

  1. Geben Sie im Ordner der obersten Ebene des benutzerdefinierten Komponentenpackages (dem Ordner, der die Datei main.js enthält) den folgenden Befehl in einem Terminalfenster ein:

    bots-node-sdk pack --service mobile-api

    Der Befehl führt folgende Schritte aus:

    • Kopiert die Dateien und Unterordner in service-mobile-api-<Packageversion>.
    • Fügt eine component.service.raml-Datei hinzu, die die erforderlichen Endpunkte und Vorgänge enthält.
    • Erstellt eine api.js-Datei, bei der es sich um einen Mobile Hub-Wrapper für main.js handelt.
    • Ändert die Datei package.json, um die Hauptdatei auf api.js zu setzen, die Abhängigkeiten festzulegen und die Mobile Hub-Knotenkonfiguration hinzuzufügen.

    In diesem Schritt wird der grundlegende CLI-Befehl angezeigt. Weitere Informationen finden Sie unter https://github.com/oracle/bots-node-sdk/blob/master/bin/CLI.md.

  2. Prüfen Sie die Datei package.json, und stellen Sie sicher, dass der Packagename den folgenden Mobile Hub-Einschränkungen entspricht. Ändern Sie den Namen gegebenenfalls.
    • Der Name darf nur aus Buchstaben (A-Z, a-z), Zahlen (0-9) und Unterstrichen (_) bestehen.
    • Der Name muss mit einem Buchstaben beginnen.
    • Der Name darf maximal 100 Zeichen umfassen.
  3. Klicken Sie auf der API-Seite von Mobile Hub auf Neue API > API, und erstellen Sie die benutzerdefinierte API, indem Sie die Datei component.service.raml hochladen.

  4. Deaktivieren Sie auf der Registerkarte "Sicherheit" die Option Anmeldung erforderlich, und klicken Sie auf Speichern.

  5. Komprimieren Sie den Ordner service-mobile-api-<Packageversion>, und laden Sie die ZIP-Datei dann aus der Registerkarte "Implementierung" der benutzerdefinierten API hoch.

  6. Rufen Sie auf der Testseite die GET-Anforderung auf. Die Antwort sollte die Komponentenmetadaten anzeigen.

    Tipp:

    Wenn Sie den Status 500 erhalten und der Fehler darin liegt, dass keine übereinstimmende Routendefinition gefunden werden kann, prüfen Sie die Dateien auf eine fehlerhafte JavaScript-Syntax, da dies die häufigste Ursache ist.