目次


独自のチャットボット・インスタンスをセットアップして IBM Cloud 上の Kubernetes 環境にデプロイする

Watson Assistant と IBM Cloud Kubernetes サービスを結合して、チームの 24 時間体制のカスタマー・エンゲージメントを実現する

Comments

IBM Watson Assistant は、チームで対話型の人工知能 (AI) ソリューションに取り組める、堅牢なコラボレーション・プラットフォームです。このプラットフォームではグラフィカル UI、強力な自然言語処理、開発者に馴染み深い機能を使用して、シンプルなチャットボットからエンタープライズ・クラスの複合ソリューションまで、カスタマー・サービス向けのありとあらゆるソリューションを迅速に作成できます。

Kubernetes は、ラップトップから高可用性のマルチノード・クラスター、パブリック・クラウドからオンプレミスのデプロイ環境、そして仮想マシンからベア・メタルまで、多種多様な環境で実行できるオープンソースのプロジェクトです。

Watson サービスを利用して作成したアプリを Kubernetes にデプロイするメリット

IBM Cloud Kubernetes Service は、IBM Watson 関連のクラウド・サービスにバインドできるアプリケーションを短時間で配信するための、強力なツール、直感的なユーザー・エクスペリエンス、組み込みのセキュリティー機能を提供するマネージド Kubernetesオファリングです。IBM Cloud Kubernetes Service は認定された Kubernetes プロバイダーとして、インテリジェントなスケジューリング、自己修復、水平スケーリング、サービスの検出と負荷分散、自動化されたロールアウトとロールバック、機密管理や構成管理などの機能を提供します。さらに、Kubernetes Service にはクラスター管理の単純化、コンテナー・セキュリティー、分離ポリシー、独自のクラスター設計機能、およびデプロイメントにおける整合性を確保する統合運用ツールを中心にした高度な機能も備わっています。

このチュートリアルでは、Watson サービスを利用するチャットボット (Cognitive Car Dashboard) の独自のインスタンスをセットアップする手順を説明します。また、IBM Cloud Developer Tools コマンド・ライン・インターフェースを使用して、独自のインスタンスを IBM Cloud 上の Kubernetes 環境にデプロイするプロセスを効率化する方法も紹介します。

Watson Assistant サンプル・アプリケーション

Watson Assistant サービスをデモンストレーションするサンプル・アプリケーションは、シンプルなチャット・インターフェースで自動車用のコグニティブ・ダッシュボードをシミュレートする Node.js アプリです。

コピー
コピー

学習の内容

  • IBM Watson Assistant サービスを利用する Cognitive Car Dashboard アプリを作成する方法
  • アプリを Docker コンテナーとしてパッケージ化する方法
  • IBM Cloud Kubernetes Service 環境上に Kubernetes クラスターを作成する方法
  • Cognitive Car Dashboard アプリを IBM Cloud Kubernetes Service クラスターにデプロイする方法

前提条件

手順を開始する前に、次のものを用意しておく必要があります。

Watson Assistant アプリケーションを複製またはダウンロードする

: このチュートリアルでは Watson Assistant のサンプル・アプリを使用していますが、任意の Watson Assistant ワークスペースを使用するのでもかまいません。

git clone https://github.com/watson-developer-cloud/assistant-simple

アプリケーションを構成する

  1. IBM Cloud アカウントにログインします。
  2. Watson ワークスペースを作成します。
  3. Watson Assistant サービス・ツールを起動します。
  4. Watson Assistant サービス・ツール内の「Import workspace (ワークスペースをインポート)」アイコンをクリックし、アプリ・プロジェクトのローカル・コピーに含まれているワークスペース JSON ファイルの場所を指定します。<project_root>/training/car_workspace.jsonコピー
    コピー
    コピー
    コピー
  5. cd assistant-simple を実行して、カレント・ディレクトリーを作業ディレクトリーに変更します。
  6. cp .env.example .env を実行して、.env ファイルを作成します。
  7. .env ファイルを開き、必要な環境変数をファイル内に追加します。「View Details (詳細の表示)」をクリックすると、「Workspace ID (ワークスペース ID)」が表示されます。そのワークスペース ID の値をコピーして、.env ファイル内で Workspace ID の値として貼り付けます。 コピー
    コピー
    コピー
    コピー
  8. 「Show (表示)」をクリックしてサービス資格情報を表示します。apikey の値をコピーします。サービス・インスタンスで apikey を提供していない場合は、usernamepassword の値をコピーしてください。また、url の値もコピーする必要があります。コピーしたこれらの値を .env ファイル内に貼り付けます。ファイルを保存してから閉じます。 コピー
    コピー

.env ファイルの例

# Environment variables
WORKSPACE_ID=55dc1ba5-dd1e-4cd7-b7a3-13aa39f5b60c
# You need to provide either username and password
ASSISTANT_USERNAME=4df4e0d9-7b70-4e8d-beb5-4008a3dfb45a
ASSISTANT_PASSWORD=ZZSHTWLuvJSo
# OR IAM API key and URL
ASSISTANT_IAM_APIKEY=
ASSISTANT_IAM_URL=
ASSISTANT_URL=https://gateway.watsonplatform.net/assistant/api

アプリケーションを IBM Cloud Kubernetes Service にデプロイする

  1. cd assistant-simple を実行して、カレント・ディレクトリーを作業ディレクトリーに変更します。
  2. ibmcloud login を実行して、IBM Cloud と IBM Cloud Container にログイン済みの状態になるようにします。シングル・サインオンの場合は、ibmcloud login --sso を使用します。
  3. ibmcloud cr login を実行して、Container Registry Service にログインします。
  4. vi Dockerfile を使用して、ローカルの ibmcloud dev build/run とリモートの ibmcloud development deployment の両方の Docker イメージを作成するために使用する Dockerfile を作成します。

    : このファイルを作成するには、任意の CLI コマンドを使用するのでかまいません。このファイルにファイル拡張子はありません。

  5. 以下のコードを Dockerfile ファイルに貼り付けて、変更内容を保存します。
    FROM node:6-alpine
    ADD . /app
    RUN cd /app; npm install
    
    ENV NODE_ENV production
    ENV PORT 8080
    EXPOSE 8080
    
    WORKDIR "/app"
    CMD [ "npm", "start" ]
  6. Docker エンジンがインストールされていない場合は、インストールします。
  7. docker version を実行して、Docker エンジンが稼働していることを確認します。

    以下のエラーが返された場合は、インストールをチェックする必要があります。

    ERRO[0005] failed to dial gRPC: cannot connect to the Docker daemon. Is 'docker daemon' running on this host?: dial unix /var/run/docker.sock: connect: no such file or directory context canceled
  8. iibmcloud cr namespacesi を実行して、コンテナー・レジストリーの名前空間を調べます。
  9. 名前空間がない場合は、ibmcloud cr namespace-add <name> を使用して作成します。
  10. ibmcloud cr info を実行して、該当するコンテナー・レジストリーを特定します (例: registry.ng.bluemix.net)。
  11. 以下のコマンドを実行して、Docker イメージをビルドし、タグ (-t) を付けます。REGISTRY と NAMESPACE は、該当する値で置き換えてください。
    docker build . -t <REGISTRY>/<NAMESPACE>/myapp:v1.0.0` (Example: `docker build . -t registry.ng.bluemix.net/mynamespace/myapp:v1.0.0`)
  12. docker push <REGISTRY>/<NAMESPACE>/myapp:v1.0.0 を実行します。これで、Docker イメージが IBM Cloud 上のコンテナー・レジストリーにプッシュされます。
  13. Kubernetes クラスターを作成します (IBM Cloud 内に Kubernetes クラスターを作成する方法について詳しくは、このリンク先のページを参照してください)。「Cluster Type (クラスター・タイプ)」として「Free (無料)」を選択し、固有のクラスター名を指定してから「Create Cluster (クラスターを作成)」をクリックします。 コピー
    コピー

    クラスターが作成されるまで、しばらく時間がかかります。クラスターが使用可能な状態になると、以下のように表示されます。 コピー
    コピー
  14. 「Access (アクセス)」タブ内の指示に従って kubectl CLI をセットアップします。
  15. cd assistant-simple を実行して、カレント・ディレクトリーを作業ディレクトリーに変更します。
  16. mkdir kubernetes を実行して、kubernetes という名前のフォルダーを作成します。
  17. vi deployment.yaml を実行して deployment.yaml ファイルを作成し、以下のコードをコピーしてファイル内に貼り付けます。

    : このチュートリアルとは別の Watson Assistant アプリを使用している場合、deployment.yaml ファイル内の Watson Assistant アプリの名前を該当する名前で置き換える必要があります。

    # Update <REGISTRY> <NAMESPACE> values before use
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: assistant-simple
      labels:
        app: assistant-simple
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: assistant-simple
      template:
        metadata:
          labels:
            app: assistant-simple
        spec:
          containers:
          - name: assistant-simple
            image: <REGISTRY>/<NAMESPACE>/myapp:v1.0.0
            ports:
            - containerPort: 8080
            imagePullPolicy: Always
  18. kubectl create -f kubernetes/deployment.yaml を実行して、デプロイメントを作成します。
  19. ワーカー IP とノード・ポートを指定してサービスを作成します。それには、コマンド kubectl expose deployment assistant-simple --type NodePort --port 8080 --target-port 8080 を実行します。

    : このチュートリアルとは別の Watson Assistant アプリを使用している場合は、assistant-simple ではなく、該当する Watson Assistant アプリの名前を使用してください。

アプリケーションにアクセスする

  1. kubectl get pods -l app=assistant-simple を実行し、ポッドのステータスが「RUNNING (実行中)」になっていることを確認します。

    : このチュートリアルとは別の Watson Assistant アプリを使用している場合は、assistant-simple ではなく、該当する Watson Assistant アプリの名前を使用してください。

    以下のように表示されることを確認します。

    NAME                                READY     STATUS    RESTARTS   AGE
    assistant-simple-58b5f4688f-twztt   1/1       Running   0          2m
  2. チャットボット・アプリケーションにアクセスします。
    1. ibmcloud cs workers YOUR_CLUSTER_NAME を使用して、ワーカーのパブリック IP を特定します。
    2. kubectl describe service assistant-simple を使用して、ノードのポートを特定します。

      : このチュートリアルとは別の Watson Assistant アプリを使用している場合は、assistant-simple ではなく、該当する Watson Assistant アプリの名前を使用してください。

    3. http://<WORKER-PUBLIC-IP>:<NODE-PORT>/ にアクセスしてアプリケーションを表示します。

クリーンアップ

クリーンアップするには、以下のコマンドを使用します。

kubectl delete deployment,service -l app=assistant-simple

まとめ

このチュートリアルでは、チャットボットを IBM Cloud Kubernetes Service 環境内にデプロイするプロセスを説明しました。Watson Assistant と IBM Cloud Kubernetes サービスを結合することで、チームのカスタマー・エンゲージメントを 24 時間体制に拡大できます。Watson サービス・アプリケーションの可用性を高めるために、IBM Cloud Kubernetes Service 環境内で少なくも 3 つのワーカー・ノードを使用してアプリケーションをスケーリングすることをお勧めします。ここでは 1 つのワーカー・ノードを使用しましたが、さらにノードを追加すれば、アプリがトラフィックの変動に対処できるようになります。最初から可用性を念頭に置いておくことが重要です。


ダウンロード可能なリソース


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cloud computing, Cognitive computing
ArticleID=1065730
ArticleTitle=独自のチャットボット・インスタンスをセットアップして IBM Cloud 上の Kubernetes 環境にデプロイする
publish-date=05092019