サービスへのコンポーネント・パッケージのデプロイ

カスタム・コンポーネント・パッケージは、デジタル・アシスタントの埋込みコンテナ、Oracle Cloud Infrastructure Functions、モバイル・ハブまたは外部Node.jsサーバーからホストできます。

埋込みコンポーネント・サービスの場合、サービスの作成時にパッケージをデプロイします。Oracle Cloud Infrastructure Functions、外部Node.jsサーバーおよびモバイル・ハブ・サービスの場合、パッケージをコンポーネント・サービスとしてスキルに追加する前に、ここで説明するようにまずパッケージをサービスにデプロイする必要があります。

Node.jsサーバーへのデプロイ

外部Node.jsサーバーでカスタム・コンポーネント・パッケージをホストするには、bots-node-sdk pack --service express CLIを使用してコンポーネント・パッケージ・フォルダをコピーし、Expressに固有の変更をいくつか行った後、コンポーネント・パッケージをインストールしてサーバーで起動します。

  1. カスタム・コンポーネント・パッケージの最上位フォルダ(main.jsファイルが含まれているもの)から、ターミナル・ウィンドウで次のコマンドを入力します:

    bots-node-sdk pack --service express

    このコマンドは次のことを行います:

    • ファイルとサブフォルダをservice-express-<package version>にコピーします。
    • index.jsサービス・ラッパーを追加します。
    • main.jsのExpressラッパーであるapi.jsファイルを作成します。
    • package.jsonファイルを変更してメイン・ファイルをindex.jsに設定し、依存関係を追加します。

    このステップでは、基本的なCLIコマンドを示しています。詳細は、https://github.com/oracle/bots-node-sdk/blob/master/bin/CLI.mdを参照してください。

  2. 次のコマンドを実行します:

    npm install
    
    npm start

Oracle Cloud Infrastructure Functionsへのデプロイ

カスタム・コンポーネントをOracle Cloud Infrastructure Functionsにデプロイできます。

現在、Oracle Digital Assistantは、Oracle Cloud Infrastructure Functionsにデプロイするパッケージのエンティティ・イベント・ハンドラにアクセスできません。

主なステップは次のとおりです:

  1. Oracle Cloud Infrastructure Functionsデプロイメントのためのアーティファクト名および権限の取得

  2. Oracle Functionsのためのユーザー・アカウントの設定

  3. Oracle Functionsのためのローカル・マシンの設定

  4. Oracle Functionsのためのカスタム・コンポーネント・パッケージの変更

  5. Oracle Cloud Infrastructure Functionsへのカスタム・コンポーネントのデプロイ

Oracle Cloud Infrastructure Functionsデプロイメントのためのアーティファクト名および権限の取得

カスタム・コンポーネントをOracle Cloud Infrastructure Functionsにデプロイする前に、デプロイメントで使用されるアーティファクトの名前を取得し、それらを使用する権限があることを確認する必要があります。

Oracle Cloud Infrastructure Functionsデプロイメント用にインスタンスを設定するために、テナンシ管理者がOracle Functionsの設定およびポリシーのステップを完了しています。このプロセスの一部として、次のアーティファクトが作成されました。それらの名前を管理者に問い合せてください。Oracle Functionsのためのユーザー・アカウントの設定のステップを完了する際に必要になります。

  • ファンクションに使用するリージョンおよびコンパートメントの名前。

  • ファンクション・アプリケーションの仮想ネットワーク(VCN)のコンパートメントの名前。通常、これはファンクションに使用されるコンパートメントと同じです。

  • ファンクション・アプリケーションに使用するVCNの名前。

また、管理者に依頼して、ファンクション開発者にとって必要な権限(これらのアーティファクトへのアクセス権を含む)を持つグループに自身が属していることを確認してください。

Oracle Functionsのためのユーザー・アカウントの設定

カスタム・コンポーネント・パッケージをOracle Cloud Infrastructure Functionsにデプロイする前に、Oracle Cloud Infrastructure Consoleで次のステップを完了する必要があります:

ノート

Oracle Cloud Infrastructure Functionsデプロイメントのためのアーティファクト名および権限の取得の説明に従って、使用するコンパートメントと仮想ネットワーク(VCN)の名前を知っている必要があります。また、ファンクション開発を許可するグループに属する必要があります。
  1. コンソールにサインインし、上部のバーで、ファンクション開発コンパートメントがあるリージョンを選択します。

  2. Oracle Cloud Infrastructure Registryを介してOracle Cloud Infrastructure Functionsにデプロイします。使用できるレジストリ・リポジトリがまだない場合は、次の手順を実行して作成します。

    1. 左上のナビゲーション・メニュー・アイコンをクリックしてナビゲーション・メニューを開き、「開発者サービス」「コンテナ・レジストリ」の順にクリックしてから、「リスト範囲」セクションでファンクション開発用に設定されたコンパートメントを選択します。

    2. 「リポジトリの作成」をクリックします。

    3. リポジトリに名前を付け、「リポジトリの作成」をクリックします。

  3. カスタム・コンポーネント・パッケージ用のファンクション・アプリケーションがない場合は、作成する必要があります。「開発者サービス」ページで「ファンクション」「アプリケーションの作成」を順にクリックします。名前を指定し、VCNを選択し、少なくとも1つのサブネットを選択し、「作成」をクリックします。

    選択するVCNがまったく表示されない場合は、リージョンが正しくない可能性があります。

    アプリケーションとファンクションの数には制限があります。デフォルトの制限については、Oracle Cloud Infrastructureドキュメントファンクションの制限を参照してください。

  4. 「アプリケーション」ページで、ファンクションのデプロイに使用するアプリケーションをクリックし、「リソース」セクションの「開始」をクリックして、「ローカル設定」をクリックします。

    次のスクリーンショットに示すように、このページには、ローカル・コンピュータの設定およびカスタム・コンポーネント・パッケージのデプロイに使用する必要があるいくつかのコマンドが表示されます。ステップ3から7までのコマンドをコピーして保存します。

    これらは後で、必要なソフトウェアをローカル・マシンにインストールし、カスタム・コンポーネントをデプロイする準備ができてから使用します。または、このページをブックマークして、コマンドを使用する必要があるときに戻ることができるようにします。

    ここではこれらのコマンドを実行しないでください。ただコピーしてください。


    fn-local-setup-commands.pngの説明が続きます
    図fn-local-setup-commands.pngの説明

  5. 次のようなコピーしたコマンドで、[OCIR-REPO]を自らのレジストリ・リポジトリの名前に変更します。

    fn update context registry phx.ocir.io/devdigital/[OCIR-REPO]
  6. 右上隅の「プロファイル」アイコンをクリックし、「ユーザー設定」をクリックして「ユーザーの詳細」ページに移動します。

  7. 次のステップでは、ローカル・マシンの.ociフォルダに格納する必要があるPEMファイルを作成します。ローカル・マシンのホーム・フォルダにこのディレクトリがない場合は、ターミナル・ウィンドウで作成します。

    • LinuxおよびMac:

      cd ~
      mkdir .oci
    • Windows:

      cd C:\Users\<your-user-name>
      mkdir .oci
  8. セキュアなアクセスのために、公開および秘密のPEMファイルが必要です。ユーザー・アカウント用にまだ設定していない場合は、コンソールの「ユーザーの詳細」で、「リソース」セクションの「APIキー」をクリックし、「APIキーの追加」をクリックします。

    秘密キー・ファイル(PEMファイル)をホーム・フォルダの.ociディレクトリに保存します。

  9. APIキーに関連付けられているフィンガープリントを書き留めます。複数のAPIキーがある場合は、各秘密PEMファイルに使用するフィンガープリントを把握する必要があります。
  10. ローカル・マシンでフィンガープリントのconfigファイルをまだ設定していない場合は、「APIキー」セクションで次のステップを実行します:

    1. APIキーのフィンガープリントの行で追加をクリックし、「構成ファイルの表示」をクリックします。

    2. 「構成ファイルのプレビュー」の内容をコピーします。

    3. ローカル・マシンの.ociフォルダ(秘密キー・ファイルを保存したのと同じフォルダ)に、configという名前のファイルを作成し、コピーした内容をそのファイルに貼り付けます。

  11. configファイルで、秘密PEMファイルの場所を指すようにkey_fileプロパティを変更します。例: key_file=/home/joe/.oci/my-private.pem

  12. 認証トークンがない場合は、「リソース」メニューの「認証トークン」をクリックし、「トークンの生成」をクリックします。認証トークンを保護された場所にただちにコピーして、後で取得できるようにしてください。これは、コンソールに認証トークンが再度表示されないようにするためです。認証トークンは、デプロイメントのためにカスタム・コンポーネント・パッケージをOracle Infrastructureレジストリにプッシュする際にパスワードとして使用します。

Oracle Functionsのためのローカル・マシンの設定

cURL、OCIコマンドライン・インタフェース(CLI)、Fn、およびDockerをローカル・マシンにインストールして、Oracle Cloud Infrastructure Functionsへのデプロイメントを有効にする必要があります。マシンがWindows上で実行されている場合は、Fnを使用するために次のオプションのいずれかを行う必要があります:

  • このトピックのステップに従って、Oracle VM VirtualBoxのLinuxにFnおよびDockerをインストールします。

  • 方法: WindowsでのFnクライアントの実行とリモートFnサーバーへの接続の説明に従って、DockerおよびFnをWindowsにインストールしてから、Windows用のLinuxサブシステムをインストールします。

  • クラウド・シェルからカスタム・コンポーネントをデプロイします。Oracle Cloud Infrastructureドキュメントクラウド・シェルを参照してください。

ローカル・マシンを設定するには:

  1. (VM上のWindowsのみ) Oracle VM VirtualBox上のLinuxゲストを使用してカスタム・コンポーネント・パッケージをOracle Cloud Infrastructure Functionsにデプロイする場合は、次のステップに従います:

    1. https://www.virtualbox.org/からVirtualBoxをインストールします。

    2. Linux ISOをダウンロードします。たとえば、Ubuntu-MateのISOを取得するには、https://ubuntu-mate.org/download/に移動し、「64-bit PCs/Macs」をクリックします。

    3. VirtualBoxで、ISOから仮想マシンを作成します。Ubunto-Mate仮想マシンの作成手順は、https://itsfoss.com/install-linux-in-virtualbox/を参照してください。これがLinuxゲストになります。

    4. Linuxゲストを起動します。

    5. ターミナル・ウィンドウで、次のコマンドを実行します:

      sudo apt-get update

      これにより、新しいパッケージおよびアップグレードが必要なパッケージのパッケージ・リストが更新されます。

      ヒント:

      Ubuntuでターミナル・ウィンドウを開くには、[Ctrl]+[Alt]+[T]を押します。
    6. ターミナル・ウィンドウでコピーや貼り付けなどの操作を行うためには、ゲストの追加が必要です。http://download.virtualbox.org/virtualbox/<release>/VBoxGuestAdditions_<release>.isoをダウンロードし、https://itsfoss.com/virtualbox-guest-additions-ubuntu/の指示を使用して、追加をインストールおよび構成します

      必ず、「Devices」→「Drag and Drop」「bidirectional」に構成してください。

    7. このコマンドをターミナル・ウィンドウに入力して、node.jsおよびnpmをゲストにインストールします。

      sudo apt install npm
    8. ローカル・マシンのホーム・ディレクトリにある.ociフォルダをLinuxゲストのホーム・フォルダにドラッグします。

      これは非表示のファイルであるため、表示するには、ホーム・フォルダで、[Ctrl]+[H]を押すか「View」→「Show Hidden Files」を選択する必要があります。

    9. Linuxゲスト上の.ociフォルダでconfigファイルを開き、Linuxゲスト上のファイルの場所を指すようにkey_fileを変更します。例: key_file=/home/joe/.oci/my-private.pem

    10. このトピックの残りのステップは、Linuxゲストで完了します。

  2. (Macのみ) まだインストールしていない場合は、Homebrewをインストールして、cURL、OCI CLIおよびFnをインストールできるようにします。https://docs.brew.sh/Installationを参照してください。かわりに、同等のMacPortsコマンドを使用できます。
  3. インターネットにVPN経由でアクセスする場合は、プロキシの設定が必要になることがあります。例:

    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. 適切なコマンドを実行して、パッケージを最新の状態にします。

    • Linux:

      sudo apt update && sudo apt upgrade
    • Mac:

      brew update && brew upgrade
  5. (Linuxのみ) cURLを使用してOCIおよびFnをインストールします。このコマンドをターミナル・ウィンドウに入力します。最後の文によって、正常にインストールされたことを確認します。

    sudo apt install curl
    curl --version
  6. Fnは、OCI CLIを使用してカスタム・コンポーネントをOracle Cloud Infrastructure Functionsにデプロイします。適切なコマンドを実行してCLIをインストールします(すべてのデフォルトを受け入れます)。

    • 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 (Windows上のLinuxサブシステムを使用している場合): Oracle Cloud InfrastructureドキュメントクイックスタートでWindows用のステップに従います。
  7. Oracle Functionsのためのユーザー・アカウントの設定で、configファイルを作成しました。ここでは、そのファイルを使用するようにCLIを構成する必要があります。新しいターミナル・ウィンドウを開き、このコマンドを実行してconfigファイルの場所を指定します。その他の質問に対してはnと入力します(configファイルにはすでに必要な設定が含まれています)。

    oci setup config

    例:

    $ 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. カスタム・コンポーネント・パッケージをレジストリにプッシュするには、Docker 17.10.0-ce以上が必要です。

    dockerコマンドの前にsudoを付けない場合は、https://docs.docker.com/engine/install/linux-postinstall/を参照してください。

  9. VPNを使用する場合は、https://docs.docker.com/network/proxy/の手順に従います

    Windows上のLinuxサブシステムを使用している場合は、Docker Desktopの「Settings」「Resources」ページでプロキシを設定できます。

  10. Dockerが実行されていることを確認してください。Dockerが実行されていない場合は、次にインストールするFnを起動できません。

  11. Fn (Dockerベースの軽量サーバーレスファンクション・プラットフォーム)を使用して、コンテキストを構成し、パッケージをデプロイします。まだインストールしていない場合は、https://fnproject.io/tutorials/install/を参照して、Fnのインストール、Fnサーバーの起動、およびインストールのテストの手順に従います

    この時点では、コンテキストを構成したりレジストリを設定したりする必要はありません。これを行うには、Oracle Cloud Infrastructure Functionsへのカスタム・コンポーネントのデプロイのステップを完了します。

Oracle Functionsのためのカスタム・コンポーネント・パッケージの変更

カスタム・コンポーネント・パッケージをOracle Cloud Infrastructure Functionsにデプロイする前に、func.jsおよびfunc.yamlファイルを追加し、fnproject FDKの開発者依存関係を追加し、FDKをインストールする必要があります。

ノート

(Windows VMのみ) Linuxゲストを使用している場合は、ローカル・マシンで次のステップを実行します。次に、ドラッグ・アンド・ドロップを使用してコンポーネント・パッケージをLinuxゲストにコピーします。あるいは、ステップ1: カスタム・コンポーネントをビルドするためのソフトウェアのインストールの説明に従ってLinuxゲストにnode.jsおよびBots Node SDKをインストールしてから、これらのステップを実行します。
  1. bots-node-sdk initコマンドを使用してカスタム・コンポーネント・パッケージを作成した場合は、最上位フォルダにDockerfileという名前のファイルが作成されている可能性があります。この場合、削除する必要があります。そうしないと、デプロイメントは失敗します。

  2. カスタム・コンポーネント・パッケージの最上位フォルダ(main.jsを含むフォルダ)に、func.jsという名前のファイルを作成し、次のコードを追加します。これはOracle Cloud Infrastructure Functionsによって呼び出されるファイルです。

    /***
     
      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. 同じフォルダにfunc.yamlという名前のファイルを作成し、次の内容を追加します:

    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. nameプロパティで、<custom component package name>をカスタム・コンポーネント・パッケージの名前に変更して、変更内容を保存します。通常、この名前はpackage.jsonファイルで指定した名前と同じです。

    名前は255文字以内にする必要があり、文字、数字、_および-のみを使用できます。

  5. 次のプロパティを設定します:

    • runtime: ノードの言語およびバージョン。node11またはnode14を指定します。

    • build_image: 実行可能関数を構築するための言語固有のライブラリおよびツールを含むビルド時ベース・イメージ。fnproject/node:11-devまたはfnproject/node:14-devを指定します。

    • run_image: 実行可能関数を実行する言語固有の実行時環境を提供するランタイム・ベース・イメージ。fnproject/node:11またはfnproject/node:14を指定します。

  6. ターミナル・ウィンドウで、パッケージの最上位フォルダに移動し、次のコマンドを入力してFDKをインストールし、パッケージの依存関係としてpackage.jsonファイルに追加します:

    npm install --save-dev @fnproject/fdk
  7. (オプション – Linux、Mac、およびWindows上のLinuxサブシステムのみ) 次のコマンドを実行して、パッケージの依存関係をインストールします:

    npm install

    node_modulesフォルダが存在しない場合、後で実行するfn deployコマンドによってnpm installが起動されることに注意してください。

  8. (Windows VMのみ) 次のステップを実行して、デプロイメント用にカスタム・コンポーネント・コードをLinuxゲストにコピーします:

    1. 最上位フォルダをLinuxゲストにドラッグ・アンド・ドロップします。

    2. ターミナル・ウィンドウで、最上位フォルダ(main.jsを含むフォルダ)に移動し、次のコマンドを入力してフォルダの実行権限を追加します。

      chmod 755 components
    3. node_modulesフォルダを削除して、プラットフォームに依存するノード・モジュールがないことを確認します。

    4. (オプション)次のコマンドを実行して、ノード・モジュールの依存関係を再インストールします。

      npm install

      node_modulesフォルダが存在しない場合、後で実行するfn deployコマンドによってnpm installが起動されることに注意してください。

これで、Oracle Cloud Infrastructure Functionsへのカスタム・コンポーネントのデプロイのステップを完了する準備ができました。

Oracle Cloud Infrastructure Functionsへのカスタム・コンポーネントのデプロイ

Oracle Functionsのためのカスタム・コンポーネント・パッケージの変更の説明に従って、func.jsファイルを作成し、fnprojectを開発依存関係に追加し、依存関係をインストールした後で、コンポーネント・パッケージのDockerイメージをOracle Cloud Infrastructure Functionsにデプロイできるようになります。

Oracle Functionsのためのユーザー・アカウントの設定のステップを完了したときに、「開始」ページの「ローカル設定」で、ステップ3から7までのコマンドをコピーしました。コピーしたこれらのコマンドを使用して、カスタム・コンポーネントをデプロイします。

クラウド・シェルを使用している場合は、「クラウド・シェルの設定」に示される同様のコマンドをかわりに使用します。

カスタム・コンポーネントをデプロイするには:

  1. DockerおよびFnサーバーが実行されていることを確認します。

  2. ターミナル・ウィンドウで、カスタム・コンポーネント・パッケージの最上位ディレクトリに移動し、コピーした同等のコマンドを入力してコンテキストを構成します。

    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

    コンテキスト構成を変更する必要が生じるまで、これらのコマンドを再度実行する必要はありません。

    コンテキストの変更時に「Fn: error replace file with tempfile」というエラーが表示された場合は、~/.fn/config.yamlを手動で編集して、そのファイル内のコンテキストを変更します。

  3. configファイルに複数のプロファイルがある場合は、このコマンドを入力して、Oracle Functionsのためのユーザー・アカウントの設定で作成したプロファイルを指定します。

    fn update context oracle.profile <profile-name>
  4. Oracle Functionsのためのユーザー・アカウントの設定で作成したレジストリ・リポジトリを指定するには、コピーしたコマンド(以下と同等のもの)を入力します。まだ変更していない場合は、[OCIR-REPO]をリポジトリの名前に変更します。

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

    リポジトリ構成を変更する必要が生じるまで、このコマンドを再度実行する必要はありません。

  5. 現在のセッションでDockerにサインインしていない場合は、コピーしたコマンド(ここで示すのと同等のもの)を実行します。

    パスワードの入力を求められたら、認証トークンを入力します。これは、Oracle Functionsのためのユーザー・アカウントの設定のステップを完了する際に取得したトークンです。

    docker login -u '<tenancy-namespace>/<user-name>' <region-key>.ocir.io
  6. カスタム・コンポーネントをデプロイするには、次のコマンドを実行します:

    fn deploy --app <application>

    次のメッセージが表示された場合は、.oci/configファイルを開き、指定したkey_fileの正しいフィンガープリントがfingerprintに表示されていることを確認します。そうでない場合は、コンソールのユーザー設定に移動し、「APIキー」をクリックして、正しいフィンガープリントの構成ファイルを表示し、表示された内容でconfigファイルの内容を置き換えます。

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

Oracle Functionサービスの追加の説明に従って、カスタム・コンポーネントをスキルで使用する準備ができました。

モバイル・ハブへのデプロイ

モバイル・ハブでカスタム・コンポーネント・パッケージをホストするには、bots-node-sdk pack --service mobile-api CLIを使用してコンポーネント・パッケージ・フォルダをコピーし、RAMLファイルなど、モバイル・ハブに固有の変更をいくつか行います。その後、RAMLファイルからカスタムAPIを作成し、コンポーネント・パッケージのZIPをカスタムAPIにアップロードします。

  1. カスタム・コンポーネント・パッケージの最上位フォルダ(main.jsファイルが含まれているもの)から、ターミナル・ウィンドウで次のコマンドを入力します:

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

    このコマンドは次のことを行います:

    • ファイルとサブフォルダをservice-mobile-api-<package version>にコピーします。
    • 必要なエンドポイントおよび操作を含むcomponent.service.ramlファイルを追加します。
    • main.jsのモバイル・ハブ・ラッパーであるapi.jsファイルを作成します。
    • package.jsonファイルを変更してメイン・ファイルをapi.jsに設定し、依存関係を設定して、モバイル・ハブのノード構成を追加します。

    このステップでは、基本的なCLIコマンドを示しています。詳細は、https://github.com/oracle/bots-node-sdk/blob/master/bin/CLI.mdを参照してください。

  2. package.jsonファイルをレビューし、パッケージ名が次のモバイル・ハブの制約に準拠していることを確認します。準拠するように必要に応じて名前を変更します。
    • 名前は、文字(A-Za-z)、数字(0-9)およびアンダースコア(_)のみで構成されている必要があります。
    • 名前は文字で開始する必要があります。
    • 名前は、100文字以内である必要があります。
  3. モバイル・ハブの「API」ページから、「新規API」→「API」をクリックした後、component.service.ramlファイルをアップロードしてカスタムAPIを作成します。

  4. 「セキュリティ」タブから、「ログインが必要です」をオフにして、「保存」をクリックします。

  5. service-mobile-api-<package version>フォルダをZipし、カスタムAPIの「実装」タブからZIPファイルをアップロードします。

  6. 「テスト」ページから、GETリクエストを起動します。レスポンスではコンポーネント・メタデータが表示されます。

    ヒント:

    ステータス500が表示され、一致するルート定義が見つからないというエラーが発生した場合は、一般的な原因である誤ったJavaScript構文がファイルに含まれていないかどうかを確認してください。