141
IBM Cloud 中級者向けハンズオン・セミナー 第 1.0 版 日本アイ・ビー・エム 日本アイ・ビー・エム システムズ・エンジニアリング株式会社 2017 年 12 月 19 日 (火)

IBM Cloud 中級者向けハンズオン・セミナー...DevOps 系ツールのハブとして機能します。 8 Git Repos and Issue Tracking IBM Cloudが提供するGitLab 環境。ソースコードのリポジトリーの提

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

IBM Cloud

中級者向けハンズオン・セミナー

第 1.0版

日本アイ・ビー・エム

日本アイ・ビー・エム システムズ・エンジニアリング株式会社

2017年 12月 19日 (火)

©2017 IBM Japan Co., Ltd. & IBM Japan Systems Engineering Co., Ltd.

目次

0. はじめに ................................................................................................................................ 1

0.1 当ハンズオンの目的 ........................................................................................................ 1

0.2 ハンズオン環境について ................................................................................................. 1

0.3 サンプル・アプリケーションについて ............................................................................ 1

0.4 用語の定義 ...................................................................................................................... 5

LAB 1. 開発環境のセットアップ .............................................................................................. 7

1.1 IBM CLOUD PLATFORMへのログイン ............................................................................. 7

1.2 地域、組織、スペースの確認 ....................................................................................10

1.3 サービス・インスタンスの作成 ................................................................................11

1.4 CONTINUOUS DELIVERYサービス・インスタンスの作成 ...............................................18

1.5 ツールチェーンの構成 ..............................................................................................20

1.6 WEB IDEの利用 ...........................................................................................................25

1.7 デプロイの自動化設定 ..............................................................................................30

LAB 2. 実装① ~ ユーザー情報を格納する..............................................................................39

2.1 データベースの作成 ..................................................................................................39

2.2 モデル (MODELS/CONVERSATIONDB.JS)の編集 ...........................................................41

2.3 ロジック(LOGIC/CONVERSATIONLOGIC.JS)の編集 ......................................................44

2.4 アプリケーションの更新 ...........................................................................................45

2.5 (オプション) 対話履歴の抽出とダウンロード ..............................................................50

LAB 3. 実装② ~ 対話フローを作成する .................................................................................57

3.1 ワークスペースの作成 ..............................................................................................57

3.2 対話フローの作成 .....................................................................................................61

3.3 CONVERSATIONサービスとの連携の実装 ......................................................................72

3.4 対話のセッション保持の実装 ....................................................................................75

3.5 アプリケーションの動作確認 ....................................................................................76

©2017 IBM Japan Co., Ltd. & IBM Japan Systems Engineering Co., Ltd.

LAB 4. コンテナーでアプリを公開する ...................................................................................81

4.1 KUBERNETESクラスターの作成 ....................................................................................81

4.2 コマンドライン環境のセットアップ .........................................................................82

4.3 (実施なし) IBM CLOUD CONTAINER REGISTRYの設定 ...................................................83

4.4 KUBERNETES CLUSTERへのアクセス .............................................................................84

4.5 KUBERNETES CLUSTERへのサービス資格情報の登録 ....................................................86

4.6 (実施なし) コンテナー・イメージのビルド .................................................................89

4.7 KUBERNETES CLUSTERへのデプロイ .............................................................................94

補足ハンズオン 1: 音声入力/発話する ................................................................................... 101

A1.1 サービス・インスタンスの作成 .................................................................................. 101

A1.2 アプリケーションのデプロイ ..................................................................................... 104

補足 (APPENDIX) ................................................................................................................ 109

補足 1. ツールチェーンを表示する ...................................................................................... 109

補足 2. GIT REPOS AND TRACKINGの設定............................................................................. 111

補足 3. DELIVERY PIPELINEによるコンテナーのデプロイ .................................................... 117

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 1

0. はじめに

0.1 当ハンズオンの目的

このハンズオンでは、Bluemix Health Managerと呼ばれる対話 Botのサンプル・アプリケー

ションを例に、IBM Cloudでよく利用されるデータベースである Cloudant NoSQL DBサービ

スやWatsonサービスの連携のためのプログラミングを学習していきます。

0.2 ハンズオン環境について

当ハンズオンでは、Windows PC (OS: Windows 7)の使用を前提にハンズオンを実施します。

注意

ハンズオン資料を参照しながらご自身の環境を使って自習する場合、事前に以下のソフト

ウェアをご用意ください。

・IBM Cloud CLI (http://clis.ng.bluemix.net/ui/home.html)

・Docker環境 (https://docs.docker.com/engine/installation/)

・Gitクライアント (Docker導入時に導入されますので、単体での導入は不要です)

・kubectlコマンドライン (https://kubernetes.io/docs/tasks/tools/install-kubectl/)

自身の PCでハンズオンを行う場合、適宜ダウンロードし、セットアップしてください。

0.3 サンプル・アプリケーションについて

当ハンズオンのサンプル・アプリケーションは、Bluemix Health Managerと呼ばれる対話

Botアプリケーションです。大まかな構成は以下のようになります。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 2

Lab1. ~ Lab3.までの構成

Lab4.の構成

Bluemix Platform

IBM Bluemix Container Service

. )

.

CBD

( )

&

IBM Cloud Platform

IBM Cloud Container Service

Bluemix Platform

IBM Bluemix Container Service

&

IBM Cloud Platform

IBM Cloud Container Service

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 3

アプリケーションは SPA(シングル・ページ・アプリケーション)で、クライアントサイドは

Angular (https://angular.io/)を利用した JavaScript、サーバーサイドは Express

(http://expressjs.com/ja/)を利用した Node.jsで実装しています。

また、クライアントサイドでは、ビルドツールとして Grunt (https://gruntjs.com/)を使用してい

ます。grunt buildを実行することで、JavaScriptのビルド処理が行われ、画面に表示するための

htmlやスクリプトなどが publicディレクトリーに生成されるように構成されています。

アプリケーションのソースコードは、主要な部分のみ抜粋すると以下のような構造になっています:

.

├── Dockerfile : Dockerファイル (Container利用時に必要)

├── Gruntfile.js : Gruntのタスク定義ファイル

├── app/ : クライアントサイドのコード・ディレクトリー

│ ├── 404.html

│ ├── audio/ : 起動音などの音声ファイル配置ディレクトリー

│ ├── images/ : 画像の配置ディレクトリー

│ ├── index.html : 画像の配置ディレクトリー

│ ├── scripts : クライアントサイドのスクリプト・ディレクトリー

│ │ ├── Microphone.js │ │ ├── app.js │ │ ├── controllers │ │ │ ├── history.js │ │ │ ├── qa.js │ │ │ └── question.js │ │ └── services │ │ ├── authentication.js │ │ ├── history.js │ │ ├── session.js │ │ ├── speech.js │ │ ├── trigger.js │ │ ├── video.js │ │ ├── watsonstt.js │ │ └── watsonsttparam.js

│ ├── styles : スタイルシートの配置ディレクトリー

│ │ └── main.css

│ └── views : 分割した画面の配置ディレクトリー

│ ├── history.html │ ├── qa.html │ └── question.html

├── app.js : 起動スクリプト

├── bower.json : Bowerのパッケージ定義ファイル

├── config/ : 構成ファイル配置ディレクトリー

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 4

├── deployment.yml : Kubernetesへのデプロイ用リソース・ファイル

├── logic : サーバーサイドの Logic関連ディレクトリー

│ ├── conversationLogic.js │ ├── tokenLogic.js │ └── watsonVRLogic.js

├── manifest.yml : Cloud Foundry用のマニフェスト・ファイル

├── models : サーバーサイドの Model関連ディレクトリー

│ ├── action.js │ ├── conversation.js │ ├── conversationDb.js │ ├── recommendDiet.js │ ├── stt.js │ ├── tts.js │ └── watsonvr.js

├── package.json : npmパッケージの定義ファイル

├── reference : ハンズオン修正対象のコードのサンプル

│ ├── SERVICES_FOR_LOCAL.json │ ├── cloudant │ │ └── conversationDb.js │ └── conversation │ ├── Conversation.json │ ├── backup.json │ ├── conversation.js │ ├── reference_file.txt │ └── trigger.js

└── routes : サーバーサイドの Route関連ディレクトリー

├── conversationRoutes.js ├── index.js ├── tokenRoutes.js └── watsonVRRoutes.js

アプリケーションのコーディングはほぼできていますが、主要な部分のみ訂正が必要な状態となっ

ています。これから当ハンズオンで徐々に実装していきます。

また、ハンズオンにおいて、入力補助のためのファイルはハンズオン用 PCのデスクトップの

「Handson」ショートカットをクリックすることでアクセスできます。フォルダーには以下の

ファイルが格納されていますので、適宜お使いください。

(1) bluemix-handson-2017.txt : コピーするソースコードを記載

(2) bluemix-handson-url-2017.txt : アクセスする URLを記載

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 5

バックアップとして上記ファイルを格納した zipファイルも配置しています。間違えて削除し

てしまったときなどのために適宜解凍してください。

0.4 用語の定義

当ハンズオンでは、以下の用語を多用します。各用語の意味は以下を参照してください。

項番 用語 説明

1 IBM Cloud

IBMが提供するクラウド・サービス。

IaaS型のクラウド・サービスを提供する IBM Cloud Infrastructureと

PaaS/SaaS型のクラウド・サービスを提供する IBM Cloud Platformが

利用可能となっています。

2 Cloud Foundry PaaS (Platform as a Service)実行環境を構築するためのオープンソー

ス・ソフトウェア。( https://www.cloudfoundry.org/ )

3 ランタイム Cloud Foundry上でアプリケーションを動かすコンテナー。実行したい

アプリケーションに合わせて言語の実行環境が提供されます。

4 サービス データベースなど、アプリケーションが呼び出す機能を提供します。

5 プッシュ (Push)

Cloud Foundry上のランタイムにアプリケーションを配置する操作。

アプリケーションのデプロイ/更新する際に IBM Cloudにプッシュを行

います。

6 バインド

ランタイムとサービスを紐づける操作。

バインドすることで環境変数 VCAP_SERVICESからサービスの資格情報

(認証情報)を取得することができます。

7 Continuous IBM Cloudが提供するアプリケーション開発のための統合開発環境サー

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 6

Delivery ビス。Web IDEや Delivery Pipeline機能の提供のほか、外部の

DevOps系ツールのハブとして機能します。

8 Git Repos and

Issue Tracking

IBM Cloudが提供する GitLab環境。ソースコードのリポジトリーの提

供や Issue管理のための Issue Tracking機能が提供されています。

9 Web IDE

Webブラウザー上で利用できる、Eclipse Orionエディター環境。

Eclipse Orionをベースとして実装されています。

10 Delivery Pipeline アプリケーションのビルド・デプロイ・テストの自動化を行うための CD

ツール。

11

IBM Cloud

Container

Services

IBM Cloudが提供する Linuxコンテナー実行環境。2017年 12月現在

Kubernetes Clusterを提供するサービスが提供されています。

12

IBM Cloud

Container

Registry

IBM Cloudが提供する Dockerイメージを保管するためのプライベー

ト・レジストリー・サービス。脆弱性アドバイザー(Vulnerability

Advisor)と呼ばれる、コンテナー内で利用可能なライブラリーの脆弱性

をチェックする機能を提供します。

13 Kubernetes オープンソースのコンテナー管理ツール。( https://kubernetes.io/ )

表 1: 用語説明

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 7

Lab 1. 開発環境のセットアップ

この章では、ハンズオンで必要とするサンプル・アプリケーションを開発するために必要な開発環

境をセットアップする手順を説明します。

この章で行うこと

□ IBM Cloudへのログイン

□ サービス・インスタンスの作成 (Cloudant NoSQL Database, Watson Conversation)

□ Continuous Deliveryサービスのセットアップ

□ Delivery Pipeline経由でのランタイム(Node.js実行環境)の作成

この章の作業前提

□ IBM Cloud Platformのアカウントを取得していること

□ インターネットに接続できる PCが利用可能であること

※ プロキシー経由の場合、ご自身の環境に合わせてWebブラウザーを設定してください。

この章の所要時間 (目安)

□ 40分

1.1 IBM Cloud Platformへのログイン

以下の手順で IBM Cloudにログインします:

__1. https://console.bluemix.net にアクセスします。

__2. 「ログイン」をクリックします。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 8

__3. 認証情報を入力します。

__a. ユーザー名(メール・アドレス)を入力し、「次へ」をクリックします。

自身のアカウントでログインしてください。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 9

__b. パスワードを入力し、「Log in」をクリックします。

__4. ログインが完了したことを確認します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 10

1.2 地域、組織、スペースの確認

以下の手順でアプリケーションおよびサービスのインスタンスが稼働する地域、組織、スペー

スを設定します。当ハンズオンでは、REGION(地域)はライトアカウントのデフォルトである

「US South」、CLOUD FOUNDRY組織はお使いの IBM Cloudのアカウントのデフォルト、

スペースは「dev」を利用します。

__1. 画面上部の設定を確認します。

__2. 上記の設定になっていない場合は REGION(地域)、CLOUD FOUNDRY 組織、

CLOUD FOUNDRY スペースをそれそれ選択し、必要に応じて変更します。

__3. 指定した地域、組織、スペースに変更されたことを確認します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 11

1.3 サービス・インスタンスの作成

当ハンズオンで利用する以下のサービスを先に作成します。

データベース

□ Cloudant NoSQL DB (データベース)

Cognitive/AI 関連サービス

□ Watson Conversation (対話フローの定義)

※ 以下は補足ハンズオンで利用しますが、メインのハンズオンでは扱いません。

□ Watson Speech To Text (音声認識)

□ Watson Text to Speech (音声発話)

コンテナー実行環境

□ Kubernetes Cluster (ハンズオン Lab 4.で使用します)

1.3.1 Cloudant NoSQL DBサービス・インスタンスの作成

__1. 画面右上のカタログをクリックします。

__2. 「データ & 分析」カテゴリーにある「Cloudant NoSQL DB」をクリックします。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 12

__3. サービス名を「Cloudant NoSQL DB-dev」に修正し、デプロイする地域の選択で

「米国南部」を選択して「作成」をクリックします。

サービス・インスタンス名はサフィックス(ランダムな 2文字, 以下の例では u8)が設定された状

態で作成されているのが確認できます。

このままでも問題ないですが、管理しにくいため、通常はわかりやすい名前に変更して管理する

ケースが大半です。当ハンズオンでは、名前を「Cloudant NoSQL DB-dev」に変更します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 13

変更後、プランなどはデフォルトのまま、「作成」をクリックします。

__4. インスタンスが作成され、サービスの詳細画面が表示されるのを確認します。

Memo

□ サービス名はスペース内で固有な文字列を設定することができます。

□ 実際の開発/運用においては、管理しやすい文字列を指定して利用するケースが大半です。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 14

1.3.2 Watson Conversationサービス・インスタンスの作成

Cloudant NoSQL DB サービスと同様、Conversation サービス・インスタンスを作成します。

__5. 画面右上のカタログをクリックします。

__6. 「Watson」カテゴリーにある「Conversation」をクリックします。

__7. サービス名を「Conversation-dev」に修正し、デプロイする地域の選択で「米国南

部」を選択、「作成」をクリックします。

先と同様、サフィックス部分(末尾 2文字)を「dev」に変更し、「作成」をクリックします。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 15

__8. Cloudant NoSQL DB と同様、以下のような詳細画面が表示されることを確認します。

1.3.3 Kubernetes Clusterの作成

Lab 4. で使用するコンテナー実行環境である Kubernetes Clusterを作成します。

__1. IBM Cloud ダッシュボード(https://console.bluemix.net)を開きます。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 16

__2. 画面右上のカタログをクリックします。

__3. 「コンテナー」カテゴリーにある「Kubernetes クラスター」をクリックします。

__4. 「create」をクリックします。

__5. デフォルトのまま「クラスターの作成」をクリックします。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 17

クラスター・タイプはライト・プランを選択します。クラスター名は「mycluster」が設定されま

す。変更も可能ですが、当ハンズオンではデフォルトのまま先に進めます。ロケーションはデフォ

ルトでドイツに作成されます。(2017年 12月現在変更不可)

__6. デプロイ完了までしばらく待ちます。

デプロイ完了まで 20 〜 30分かかりますので、待たずに「1.4 Continuous Deliveryサービ

ス・インスタンスの作成」に進んでください。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 18

__7. デプロイが完了したことを確認します。

ダッシュボード画面に戻り、REGIONで GERMANYを選択、以下のようにクラスターが「準

備完了」のステータスとなっていることを確認します。

1.4 Continuous Deliveryサービス・インスタンスの作成

IBM Cloud Platformでのアプリ開発に必要な Continuous Deliveryサービスを作成します。

__1. 画面右上の「カタログ」をクリックします。

__2. 「DevOps」カテゴリーにある「Continuous Delivery」をクリックします。

検索フィールドで「continuous」と入力すると、サービス表示のフィルタリングが行えます。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 19

__3. サービス名はそのままで、「作成」ボタンをクリックします。

Continuous Deliveryサービス名は当ハンズオンではデフォルトのままで進めます。

検索フィールド

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 20

Memo

□ Continuous Deliveryサービスは米国南部でのみ提供されていますが、開発したアプリは英国

などの他地域でもサポートされています。

□ 組織に対し、インスタンスは 1つのみです。既に存在する場合、以下のエラーが発生します。

__4. エラーなくサービス・インスタンスが作成され、Continuous Delivery サービスの管

理画面が表示されることを確認します。

1.5 ツールチェーンの構成

Continuous Deliveryサービス・インスタンス作成後、アプリ開発に必要なソース・リポジト

リーやWeb IDEなどのツール群 = ツールチェーンの構成を行います。

__1. 「ツールチェーンのテンプレートを使用して開始」欄の「開始」をクリックします。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 21

__2. 「ツールチェーンの作成」画面の「Continuous Delivery のテンプレート」内にある、

「Simple Cloud Foundry ツールチェーン(v2)」をクリックします。

__3. ツールチェーン・テンプレートの説明を確認します。

「Simple Cloud Foundryツールチェーン(v2)」以外が表示されている場合は 8.へ戻ります。

異なるテンプレートが表示された場合は、画面左上の「すべてのテンプレートを表示」をクリッ

クしてテンプレート選択画面に戻り、選択し直してください。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 22

__4. ツールチェーンを設定します。

__a. 自分の組織が選択されていることを確認し、「ツールチェーン名」を「bluemix-

handson-<日付(YYYYMMDD)>-<受講者 ID>」に変更します。

Memo

□ 受講者 IDは講師の指示にしたがってください。

□ 例えば、受講者 IDが 01で 2017 年 12 月 10 日実施の場合は以下の名前とします。

ツールチェーン名: bluemix-handson-20171210-01

__b. ツール統合で、「Git Repos and Issue Tracking」を選択します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 23

__c. リポジトリー・タイプ項目で「クローン」を選択し、「ソース・リポジトリーの

URL (Source repository URL)」に以下の URL を指定します。

[URL] https://git.ng.bluemix.net/isebm/bluemix-health-manager

__d. 「Delivery Pipeline」をクリックし、アプリケーション名やアプリケーションが

稼働する地域、組織、スペースを確認します。

地域は米国南部、スペースは devであることを確認してください。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 24

__e. 画面右下の「作成」をクリックします。

__f. ツールチェーンが構成されたことを確認します。

以下のようなパネル画面が表示されれば、ツールチェーンの作成は完了です。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 25

1.6 Web IDEの利用

当ハンズオンでは、ツールチェーンで構成したWeb IDE (Eclipse Orion)を利用してアプリ開

発を進めていきます。

__1. 「CODE」列にある「Eclipse Orion Web IDE」をクリックします。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 26

以下のようなソースコードの編集画面が表示されます。

Web IDEの利用の仕方を学ぶため、コードの編集とリポジトリーへのプッシュを実施します。

ファイルの編集後、変更は自動的に保存されます。

Memo

□ Web IDEでの開発では、編集中のソースコードは定期的に保存されます。

□ しばらく放置するとセッション切れし、正しくアクセスできなくなるため、必要に応じてWeb

ブラウザーのリロード (更新)を実施してください。

__2. 画面左側のフォルダーにある app.js ファイルを開き、コードを修正します。

本サンプル・アプリケーションの起動スクリプトである app.jsを開きます。

70行目のコードのみ意図的に動かないように設定していますので、コードを修正します。

app.js (67-72 行目)

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 27

/**

* g. Nodeプロセスの起動, Bluemix上では動的に, そうでなければ Port 3000で起動

*/

var server = app.listen(process.env.XXXX || 3000, function() { //Lab 1.修正箇所

console.log('Listening on port %d', server.address().port);

});

コード編集のヒント

□ Bluemix Platform上の Cloud Foundryアプリケーションは実行環境(ランタイム)の環境

変数「PORT」から起動時に利用すべき Listenポートが指定される仕様となっています。

□ Node.jsでは、環境変数を取得するためには process.env.<環境変数名>を指定します。

□ 「XXXX」の部分を、Listenポート番号を渡す環境変数名に置き換えてください。

__3. マニフェスト・ファイル(manifest.yml)を選択し、コードを修正します。

マニフェスト・ファイルは Cloud Foundryアプリケーションをデプロイするための構成ファ

イルです。メモリーの割り当てやインスタンス数、バインドするサービスの指定など、アプ

リケーションを動かすために必要な構成を事前に YAML形式で記載しておくことで、毎回の

構成タスクを自動化できます。ファイルを開くと、以下のような画面が表示されます。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 28

マニフェスト・ファイルの「memory」を「128M」に、「name」と「host」をツールチェー

ン名と同じく、日付、受講 IDに修正してください。

__4. マニフェスト・ファイルの編集をコード・リポジトリーに反映します。

Web IDE 画面の左上にある Git アイコンをクリックします。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 29

__a. 変更コメントを入力し、「コミット」をクリックします。

コミット・メッセージは「Lab1. マニフェスト・ファイルの修正」とします。

__b. 画面左の「同期化」をクリックし、ソースコードをプッシュします。

__c. 左矢印をクリックし、ツールチェーンのホーム画面に戻ります。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 30

1.7 デプロイの自動化設定

ここでは「Delivery Pipeline」を編集し、サンプル・アプリケーションを実際に IBM Cloud

Platform上で動かすための設定を行います。

__1. 「DELIVER」列にある「Delivery Pipeline」をクリックします。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 31

以下のようなパイプラインの定義画面が表示されます。

__2. BUILD ステージの編集アイコンをクリックし、「ステージの構成」を選択します。

__3. ジョブの編集を行います。

__a. 「ジョブ」タブを選択します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 32

__b. ビルダー・タイプのプルダウン・リストから「npm」を選択します。

__c. 「シェル・コマンドのビルド」項目で、以下のスクリプトを設定します。

事前に設定されているスクリプトを削除し、bluemix-handson-2017.txtにあるスク

リプトをコピーし置き換えます。

修正対象の項目

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 33

置き換えるスクリプト (bluemix-handson-2017.txt を参照)

#!/bin/bash

export PATH=/opt/IBM/node-v6.7.0/bin:$PATH

npm install -g bower grunt-cli

npm install

bower install; grunt build

__d. その他の設定はそのままで、「保存」をクリックします。

__4. DEPLOY ステージの編集アイコンをクリックし、「ステージの構成」を選択します。

__5. ジョブの設定を確認します。

__a. 「ジョブ」タブを選択します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 34

__b. 「デプロイ構成」を確認します。

地域、組織、スペースが適切に選択されていることを確認します。

別の地域や組織、スペースにデプロイしたい場合には、それぞれ項目のドロップダウ

ン・リストから適切な値を選択することで変更可能です。

__c. 「キャンセル」でステージ構成の編集を破棄します。

__6. BUILD ステージの開始アイコンをクリックします。

クリック後、IBM Cloud Platform上へアプリケーションのデプロイ処理が自動で開始され

ます。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 35

__7. BUILD/DEPLOY ステージがともに「成功」状態になれば処理は完了です。

__8. DEPLOY ステージの「最終実行の結果」にあるリンクをクリックします。

アプリケーションの公開 URLにアクセスします。

ユーザー, パスワードの確認ダイアログが表示されるので、ともに「bluemix」を指定します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 36

認証後、以下のような画面が表示されていることを確認してください。

__9. サンプル・アプリケーションの動作を確認します。

この時点では、単純にユーザーが入力するメッセージをそのまま返すオウム返し処理のみが実装

されています。早速動作を確認してみましょう。

__a. 画面右の「会話開始」ボタンをクリックします。

以下のメッセージがチャット画面に表示され、対話が開始されます。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 37

__b. 「テキスト入力」タブにあるメッセージ入力フィールドにメッセージを入力し、

「メッセージの送信」ボタンをクリックします。

__c. チャット画面にメッセージが表示されていることを確認します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 38

以上で Continuous Deliveryサービスによるツールチェーンの基本設定は完了です。

実際に Cloudant NoSQL DBやWatson Conversationサービスを利用したアプリケーション

の開発をこれから進めていきましょう!!

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 39

Lab 2. 実装① ~ ユーザー情報を格納する

この章では、Cloudant NoSQL DBサービス・インスタンス上にデータベースを作成し、チャッ

トのやりとり履歴をデータベース上に格納するためのコードの実装を行います。

この章で行うこと

□ Cloudantデータベースの作成

□ コーディング: Cloudantへのデータの書き込み処理の追加

□ アプリケーションの更新と動作確認

□ (オプション) 対話履歴の閲覧とダウンロード

この章の作業前提

□ Lab 1. が完了していること

この章の所要時間 (目安)

□ 30分 (オプション込みで 40分)

2.1 データベースの作成

まずは、Cloudant NoSQL DBサービス・インスタンス上にデータベースを作成します。

__1. Bluemix ダッシュボード(https://console.ng.bluemix.net)にアクセスします

__2. 「サービス」欄の Cloudant NoSQL DB サービスを選択します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 40

__3. 「サービスの詳細」画面内の「LAUNCH」ボタンをクリックします。

しばらく待つと、Cloudantダッシュボードが表示されます。

__4. 画面左側にあるメニュー内の「Databases」マークを選択します。

__5. 画面右上にある「Create Database」欄をクリックします。

__6. データベース名を「conversation」と入力し、「Create」をクリックします。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 41

__7. 「Databases」内に、「conversation」項目が追加されたことを確認します。

2.2 モデル (models/conversationDb.js)の編集

Cloudantにデータを格納するためのモデルを定義します。

当ハンズオンでは以下の npmパッケージの利用を前提としたコードを追加していきます。

npm – cloudant ( https://www.npmjs.com/package/cloudant )

__1. ツールチェーンの Web IDE を開きます。

開き方がわからなくなった場合は「補足 1. ツールチェーンを表示する」を参照ください。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 42

以下、Web IDEを利用してコードを修正していきます。

__2. models/conversationDb.js を開き、コードを修正します。

__a. Cloudant サービス・インスタンスの認証情報が取得できるように修正します。

修正のヒントを参考に、Cloudant NoSQL DBの認証情報 (ユーザー, パスワード)を取

得できるように修正します。29行目の「xxxx」を変更してください。

models/conversationDb.js (28-33 行目)

var localServices = require('../config/SERVICES_FOR_LOCAL.json');

var serviceName = /(Xxxxxxxx XxXXX XX-).*/;

var config = extend(

localServices['Cloudant NoSQL DB-IBM'].credentials,

appEnv.getServiceCreds(serviceName)

);

ソースコード修正のヒント

□ models/conversation.jsを参考に、「Cloudant NoSQL DB-*」で検索できる

ように正規表現で変数 serviceNameを指定します。

__b. cloudant モジュールを読み込むようにコードを編集します。

修正のヒントを参考に、npmモジュールとして cloudantモジュールを使用するための

設定を埋め込みます。36行目の「xxxxxxxx」を変更してください。

models/conversationDb.js (35-36 行目)

// (2) Cloudantの接続設定

var cloudant = require('xxxxxxxx')(config.url);

ソースコード修正のヒント

□ Node.jsでは「require('<モジュール名>')」でモジュールを読み込みます。

□ 本手順で利用するのは「cloudant」モジュールです。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 43

__c. conversation データベースにアクセスするコードを追加します。

修正のヒントを参考に、「xxxx」となっている部分を埋め、Cloudantのデータベース

にアクセスするための処理を記述します。

models/conversationDb.js (39-52 行目)

// (3) "conversation"データベースにアクセス

cloudant.xx.xxx('conversation', function(err, body) {

if (!err) {

db = cloudant.xx.xxx('conversation');

} else {

cloudant.xx.xxxxxx('conversation', function(err, body) {

if (!err) {

db = cloudant.xx.xxx('conversation');

}else{

console.log(err);

}

});

}

});

ソースコード修正のヒント

□ cloudantモジュールは nanoと呼ばれるモジュールのWrapperです。

□ DBのアクセス,作成のための関数は以下の URLに記載されています。

URL: https://github.com/cloudant-labs/cloudant-nano-database-functions

※ 「nano」の部分は「cloudant」に読み替えてください

__d. 変数 db で指定されたデータベースに対してドキュメントを格納するように、

insertTalk 関数を編集します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 44

修正のヒントを参考に、「xxxxxx」となっている部分を埋め、Cloudantのデータベー

スにドキュメントを作成するための処理を記述します。

models/conversationDb.js (69-79 行目)

db.xxxxxx(doc, function (err, body) {

if (err){

var e = {

"errCode": 500,

"message": "Got an error from Cloudant [" + JSON.stringify(err) + "]"

};

cb(e, null);

}else{

cb(null, body);

}

});

ソースコード修正のヒント

□ cloudantモジュールは nanoと呼ばれるモジュールのWrapperです。

□ ドキュメントを作成, 削除するための関数は以下の URLに記載されています。

URL: https://github.com/cloudant-labs/cloudant-nano-document-functions

※ 「nano」の部分は「cloudant」に読み替えてください。

2.3 ロジック(logic/conversationLogic.js)の編集

引き続きWeb IDE上でコードを編集していきます。

__1. logic/conversationLogic.js を開き、コードを修正します。

__a. 2.2 で作成した conversationDb モデルを読み込む設定を追加します。

logic/conversationLogic.js (26-27 行目)

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 45

// (5) 対話履歴を Cloudantに格納するためにロード

//var conversationDb = require('xx/xxxxxx/xxxxxxxxxxxxXx');

ソースコード修正のヒント

□ 27行目のコメント(//)を外します。

□ 2.2で修正したmodels/conversationDb.jsを読み込むように requireに指定

します。

□ 24行目を参考に相対パスで設定します。

__b. 2.2 で作成した conversationDb モデルの insertTalk 関数を利用します。

logic/conversationLogic.js (217-223 行目)

/* Lab 2. 修正対象箇所

conversationDb.xxxxxxXxxx(result,function(err,body){

if(err){

console.log('conversationDb.insertTalk: ' + JSON.stringify(err));

}

});

*/

ソースコード修正のヒント

□ 217および 223行目を削除します。

□ 218行目の「xxxxxxXxxx」には、models/conversationDb.jsで exportされ

ている関数である「insertTalk」を指定します。

2.4 アプリケーションの更新

修正したコードを IBM Cloud上にデプロイし動作確認をします。その後 Cloudantにデータが

格納されていることを確認します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 46

__1. マニフェスト・ファイルを修正します。

Cloudant NoSQL DBサービス・インスタンスをアプリケーションにバインドするために、マニ

フェスト・ファイル(manifest.yml)を編集します。

__a. Web IDE 上で manifest.yml を選択します。

__b. サービス関連の項目を修正します。

13行目および 14行目のコメントを外します。

__2. デリバリー・パイプライン経由でアプリケーションの更新を行います。

__a. Web IDE 画面の左上にある Git アイコンをクリックします。

__b. 変更コメントを入力し、「コミット」をクリックします。

当ハンズオンでは変更コメントは「Lab2. Cloudant との連携」と入力してください。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 47

__c. 画面左の「同期化」をクリックし、ソースコードをプッシュします。

左矢印をクリックし、ツールチェーンのホーム画面に戻ります。

__d. 「Delivery Pipeline」を選択します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 48

__e. パイプラインの DEPLOY ステージが正常に完了したことを確認します。

__f. 最終実行の結果にあるアプリケーションの URL をクリックします。

__3. アプリケーションの動作確認を行います。

__a. 「会話開始」ボタンをクリックします。

__b. テキストボックス内にメッセージを入力し、「送信」ボタンをクリックします。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 49

以下のようにチャットのやりとりが実行できることを確認します。

__4. Cloudant データベースに入力したメッセージが保存されていることを確認します。

__a. Cloudant ダッシュボードを開きます。

__b. データベース一覧を表示します。

左側矢印をクリックしてデータベース一覧に戻り、conversationデータベースにドキ

ュメントが格納されているのが「# of Docs」の欄から確認できます。

__c. 「conversation」データベースを選択し、データベース詳細画面に移動します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 50

右上の「Options」をクリックし「Include Docs」にチェックを入れます。

__d. 「Run Query」をクリックし、クエリーを実行します。

__e. ドキュメントの中身を確認します。

一覧から自身が入力したメッセージを確認してください。

2.5 (オプション) 対話履歴の抽出とダウンロード

Cloudantに格納されたドキュメントを参照する場合、要件に合わせて様々なクエリーの利用

を検討しますが、このオプション・ハンズオン手順では、指定した時刻の範囲での対話履歴を

データベースから閲覧、直接 CSV形式でダウンロードする方法について学びます。

CloudDataServices Labs - Export Cloudant JSON as CSV, RSS, or iCal

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 51

https://developer.ibm.com/clouddataservices/2015/09/22/export-cloudant-json-as-csv-

rss-or-ical/

2.5.1 時刻の範囲指定でのドキュメントの抽出

__1. 時刻でクエリー処理を行うため、ビュー(View)を作成します。

__a. Cloudant ダッシュボードを開きます。

__b. データベース一覧を開き、「conversation」データベースを選択します。

__c. 「Design Documents」の追加アイコンをクリックし、「New View」を選択し

ます。

__d. ビュー名、インデックス名、および Map 関数を定義します。

当ハンズオンでは、以下の設定でビューを定義します。

□ デザイン・ドキュメント(_design/) : bydate

□ インデックス名(Index name) : byDate

□ Map関数(Map function) : (bluemix-handson-2017.txtを参照)

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 52

function(doc) {

emit(doc.dateTime, null);

}

__e. 「Create Document and then Build Index」をクリックします。

以下のメッセージが表示されれば、保存は完了です。

__2. 作成したビューを利用して対話履歴を抽出します。

以下の URLで作成したビューを利用して、指定した範囲の時刻の対話履歴を抽出します。

URL (bluemix-handson-2017.txt を参照。赤字強調部分を修正してください。)

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 53

https://xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-

bluemix.cloudant.com/conversation/_design/bydate/_view/byDate?include_docs=tru

e&startkey="<検索開始時刻>”&endkey=“<検索終了時刻>“

上記 URLの「xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx」は作成した Cloudant NoSQL

DB サービス・インスタンスごとに異なります。Cloudant ダッシュボードの URL からコピーし、

該当箇所を置き換えてWebブラウザーでアクセスしてください。

また、検索時刻は「2017-12-19_10:00:00」のような形で指定します。開始時刻、終了時刻を

調整して、ドキュメントが条件抽出できるかを確認してください。

2.5.2 CSVでのダウンロード設定

実際にビューで得られた対話履歴を CSV形式でダウンロードします。

__1. デザイン・ドキュメントを編集します。

__a. conversation データベースが選択されている状態で、「Design Documents」

を選択します。

__b. id が「_design/bydate」の項目をクリックします。

__c. 「_id」キーと同じ深さに「lists」オブジェクトを追加し、「lists」オブジェ

クト内の「csv」キーの文字列値として関数を定義します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 54

lists に追加する関数 (bluemix-handson-2017.txt を参照。※txt ファイル内では以下

の表記と異なり、1行になるように記載されています。txt ファイルの中身をそのまま使

用してください)

function(head, req) {

var row,

first = true;

// レスポンスの HTTPヘッダーの設定

start({

headers: { 'Content-Type': 'text/csv' },

});

// ドキュメント取得結果をもって反復処理

while(row = getRow()) {

// ドキュメント内容を取得 (include_docs=true)

var doc = row.doc;

// 最初の行かを確認

if (first) {

// output column headers

send(Object.keys(doc).join(',') + '\\n');

first = false;

}

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 55

// 出力行の組み立て

var line = '';

// 各行の反復処理

for(var i in doc) {

// 区切り文字はカンマで設定

if (line.length > 0) {

line += ',';

}

// カンマを含む行はダブルクォートで囲み、出力

var val = doc[i];

if (typeof val == 'string' && val.indexOf(',') > -1) {

line += '"' + val.replace(/"/g,'""') + '"';

} else {

line += val;

}

}

line += '\\n';

// 行を送る

send(line);

}

}

__d. 「Save changes」をクリックし、ドキュメントを保存します。

以下のようなメッセージが出力されることを確認します。

__2. 対話履歴を CSV 形式でダウンロードします。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 56

以下の URLで作成したビューを利用してメッセージを条件抽出します。

URL (bluemix-handson-2017.txt を参照。赤字強調部分を修正。)

https://xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-

bluemix.cloudant.com/conversation/_design/bydate/_list/csv/byDate?include_docs=

true&startkey="<検索開始時刻>"&endkey="<検索終了時刻>"

上記 URLの「xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx」は 2.5.1と同様、Cloudantダッシ

ュボードの URL からコピーし、該当箇所を置き換えて Web ブラウザーでアクセスしてください。

また、検索時刻は「2017-12-19_10:00:00」のような形で指定します。開始時刻、終了時刻を

調整して、CSV形式でダウンロードできるか確認してください。

注意事項

Cloudant NoSQL DBに保存されたドキュメントの文字コードは UTF-8です。Excelで CSV

ファイルを開いた場合、Shift-JISで開かれるため、日本語が文字化けします。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 57

Lab 3. 実装② ~ 対話フローを作成する

この章では、Conversationサービス・インスタンスで対話フローを作成し、チャットボットと

して動作するためのコードの実装を行います。

この章で行うこと

□ Watson Conversationでの対話フローの作成

□ コーディング: Watson Conversationへの連携設定の追加

□ アプリケーションの更新と動作確認

この章の作業前提

□ Lab 1.が完了していること (Conversationインスタンスが作成されていること)

この章の所要時間 (目安)

□ 60-80分

3.1 ワークスペースの作成

対話フローを作成するために、Conversationインスタンス上にワークスペース(Workspace)

を作成する必要があります。以下の手順でワークスペースを作成します。

__1. ツールチェーンより「Eclipse Orion Web IDE」をクリックします。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 58

__2. 当ハンズオンで使用する中間成果物の対話フロー・ファイルをダウンロードします。

__a. reference/conversation/Conversation.json があることを確認します。

__b. Conversation.json を右クリックします。

__c. 「Export」>「Download」をクリックします。

__d. ローカルに Conversation.json がダウンロードされたことを確認します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 59

__3. Web ブラウザーの新しいタブで IBM Cloud のダッシュボード

(https://console.ng.bluemix.net)を開きます。

__4. サービスの一覧から Conversation サービス・インスタンスをクリックします。

__5. 「Launch tool」をクリックします。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 60

__6. 「Log in with IBM ID」をクリックします。

__7. Conversation のホーム画面上で「Import workspace」をクリックします。

__8. 手順2で取得した JSON ファイルを選択し、「Import」ボタンをクリックします。

__9. ワークスペースが作成されたかを確認します。

「Watson Health Manager」という名前のワークスペースが作成され、以下の対話フローの

編集画面が表示されていればインポートは完了です。ここから対話フローを定義していきます。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 61

3.2 対話フローの作成

実際にユーザーとの対話のためのフローを定義していきます。

__1. 「Intents」の「#diet」をクリックして展開し、中身を確認します。

ダイエットの意図を受け取るために、「#diet」が定義されています。

__2. 「Entities」タブをクリックし、設定を確認します。

エンティティーは 3つ、性別を表す@gender、肯定を表す@yes、否定を表す@noが定義

されていることを確認します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 62

__3. 「Dialog」タグをクリックします。

__4. 画面中央の「ダイエットのアドバイス」ノードの「>」をクリックします。

__5. ダイエット・ノードの下に表示される「名前の抽出」ノードをクリックします。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 63

__6. 「名前の抽出」ノードを編集します。

__a. 「Enter an intent, entity or context variable…」欄に名前を抽出するた

めのコードを記載します。

ハンズオン・ファイル bluemix-handson-2017.txtを参考に、「If bot recognizes」

部分に名前を取得するためのコードを追加します。

ノード設定画面

コード

input.text.matches( '[私|僕|俺]?[の|は]?(名前は)?([一-龠々〆〤ぁ-ゔァ-ヴー

a-zA-Za-zA-Z]+)(です|だ)?(よ)?(。)?(¥¥.)?' )

__b. 「Then respond with」欄の「︙」ボタンをクリックし、「Open JSON

editor」を選択します。

ノード設定画面

__7. JSON 形式のデータを修正します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 64

ハンズオン・ファイル bluemix-handson-2017.txtを参考に、四角で囲まれている部

分を追記します。

コード

{

"context": {

"username": "<? input.text.extract('[私|僕|俺]?[の|は]?(名前は)?(.*?)(です|

だ)?(よ)?(。)?(¥¥.)?$',2) ?>"

},

"output": {

"text": {

"values": [

"<? cotext.username ?>さんでよろしいでしょうか。"

],

"selection_policy": "random"

}

}

}

__8. 右上の対話ボタンをクリックし、テスト画面を開きます。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 65

__9. ノードの動作を確認します

__a. 「ダイエットがしたい」と入力します。

入力テキストの下に「#diet」が表示されているのを確認します。これはユーザーの入力

テキストがインテント「#diet」、すなわちダイエットについての要件であることを

Conversation側で判断したことを意味します。「#diet」と認識されると、「ダイエット

のアドバイス」ノードのトリガーを満たすことになり、レスポンスとして定義されている

「ダイエットのアドバイスですね、お任せ下さい!! お名前を教えていただけますか?」の

メッセージが返却される動きとなることが確認できます。

__b. 任意の名前を入力します。

入力した名前を含む形で「こんにちは、XXさんでよろしいでしょうか」という応答が返

ることを確認してください。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 66

引き続き、対話フローの定義を進めていきます。

右上の「X」マークで Try it out、ノードの編集画面を閉じます。

__10. 「名前を抽出」ノードの下の「年齢を聞く」ノードをクリックします。

ノードの編集画面が表示されます。

__11. 画面の下にある「If no slots are pre-filled, ask this first」を確認します。

「ダイエットのアドバイスのために、<? context.username ?>さんの年齢、性別、身長

(cm)、体重(kg)、目標減量値(kg)、目標期間(ヶ月) について順に教えてください。」とい

うテキストが入力されています。このメッセージは年齢などの属性を対話の中で確認する前

に呼び出されます。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 67

__12. 画面の上にある「Then check for」を確認します。

当ハンズオンでは、年齢、性別、身長、体重、目標減量値、目標期間の順にユーザーの情報を確

認する流れを想定していますが、性別の確認が抜けています。以下で性別の確認処理を実装して

いきましょう。

__13. 性別の確認処理を実装します。

__a. 「Check for」の項目に「@gender」を入力し、ピンク色で表示される入力候補

「@gender」をクリックします。

この設定を追加することで、「男性」や「女性」など性別を特定する単語の入力があれ

ば処理する、という条件づけを行うことができます。

__b. 「Save it as」の項目に「$gender」を入力します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 68

この設定により、$genderというコンテキスト変数(context variable)に性別エンティ

ティー(@gender)の値が保存されます。

__c. 「If not present, ask」の項目に質問メッセージを入力します。

入力値として「性別を教えていただけますか?」と入力してください。

この設定を追加することで、性別に関する情報がユーザー入力から確認できない場合、

入力を促すように性別を聞くためのメッセージを返すことができるようになります。

__d. 歯車アイコンをクリックします。

__e. 「When user responds, if @gender is …」「Found:」の「Enter a

response…」の項目で「<?$gender?>ですね。」を入力します。

ここでは性別エンティティー(@gender)が入力メッセージに存在した場合の処理条件を

設定しています。この設定により、コンテキスト変数$genderが nullでなければ、ユー

ザーに$genderの値を埋め込んで、「女性ですね。」あるいは「男性ですね。」を返す

処理が行われます。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 69

引き続き、以降の手順 fで性別エンティティー(@gender)が入力メッセージに存在しな

かった場合の処理条件を設定していきます。

__f. 「Not found:」の「Enter a response…」の項目で「性別を解釈できませんで

した。」と入力します。

この設定をすることで、性別と判断されない入力を受け取った場合に、認識できず再入

力を促すようなメッセージをユーザーに返すことができます。

__g. 編集が完了したら「Save」をクリックします。

__14. 対話フローの動作確認を実施します。

手順 8、9と同様にテスト・ツールを用いて対話フローの動作を確認してみます。

__a. 右上の会話ボタンをクリックしてテスト画面を開き、上部「Clear」をクリックし

て会話を始めからやり直します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 70

__b. 「ダイエットしたい」を入力します。

__c. 名前を聞かれたら、任意の名前を入力します。

__d. 「ダイエットのアドバイスのために、XX さんの年齢、性別、身長(cm)、体重

(kg)、目標減量値(kg)、目標期間(ヶ月)について順に教えてください」とメッセ

ージが表示されたら、以下のメッセージを入力します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 71

テスト・メッセージ

30歳の男性で身長は 180cm、体重は 70kgですが、7kgを 10ヶ月かけて痩

せたいです。

このケースの場合、以下のように必要な項目が一気に読み込まれます。

__e. 右上の「Manage Context」をクリックします。

保存されているコンテキスト変数が確認できます。年齢を保存する$ageや性別を保存

する$genderなど、設定値が埋め込まれていることを確認します。

__f. 再度「Clear」をクリックし、同様に手順 d. まで進みます。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 72

__g. 「ダイエットのアドバイスのために〜」が表示されたら、今度は「はい」を入力し

ます。

手順 e. と異なり、今度は個別にユーザーの情報を確認するように対話が進みます。

以上で対話フローの定義は完了です。Conversationの利用についてより詳しい情報を参照

したい方は以下のリンクを確認してください。

Watson Developer Cloud – Conversation

https://www.ibm.com/watson/developercloud/doc/conversation/index.html

3.3 Conversationサービスとの連携の実装

3.2で準備した対話フローをアプリケーションから利用するように実装します。まずは

Conversationサービスに対するモデル(models/conversation.js)を修正します。

__1. ツールチェーンより「Eclipse Orion Web IDE」をクリックします。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 73

__2. Web IDE 上で models/conversation.js を開きます。

__3. Conversation サービスと連携するためのモジュールを読み込むコードを追加します。

__a. 19 行目をコメントインし、コードを修正します。

ソースコード修正のヒントを参考に、「xxxx」の部分を修正します。

models/conversation.js (18-19 行目)

// (2) watson-developer-cloud 認証情報を取得

//var ConversationV1 = require('xxxxx-xxxxxxxxx-

xxxxx/xxxxxxxxxxxx/v1');

ソースコード修正のヒント

□ 19行目のコメント(//)を外します。

□ 以下の URLを参考に、watson-developer-cloudモジュールを読み込みます。

URL: https://www.npmjs.com/package/watson-developer-cloud#conversation

__4. Conversation サービスの接続情報を取得するためのコードを実装します。

__a. models/conversation.js の 43 - 50 行目をコメントインします。

43および 50行目のコメントを削除します。

__b. 接続情報を取得するためのコードを実装します。

ソースコード修正のヒントを参考に、「xxxx」の部分を修正します。

models/conversation.js (44-49 行目)

var conversation = new XxxxxxxxxxxxXX({

url: xxxxxx.url,

username: xxxxxx.username,

password: xxxxxx.password,

version_date: '2017-06-22'

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 74

});

ソースコード修正のヒント

□ 以下の URLを参考に、Conversationモジュールを生成します。

URL: https://www.npmjs.com/package/watson-developer-cloud#conversation

□ 33行目で定義した変数 configには Conversationサービスのサービス資格情

報(url, username, password等)が格納されています。辞書配列の変数なの

で、キーとして url, username, passwordを指定すれば、それぞれの情報を

取得することが可能です。

__5. Conversation サービスに対しメッセージを送信するコードを実装します。

__a. models/conversation.js の 98 - 104 行目をコメントインします。

__b. models/conversation.js の 107 - 129 行目をコメントアウトします。

__c. メッセージを送信するコードを実装します。

ソースコード修正のヒントを参考に、「xxxx」の部分を修正します。

models/conversation.js (96-104 行目)

xxxxxxxxxxxx.xxxxxxx(payload,function(err,data){

if(err){

cb(xxx, xxxx);

} else {

cb(xxxx, xxxx);

}

});

ソースコード修正のヒント

□ 以下の URLを参考に、Conversationサービスにメッセージ送信を行う処理を

実装します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 75

URL: https://www.npmjs.com/package/watson-developer-cloud#conversation

□ Conversationへの処理結果は無名関数の引数 err, dataに格納されます。err

は接続エラーなどのエラー時にのみ null以外の値が格納され、dataには

Conversationサービスからのレスポンス・ボディーが返却されます。

□ cb (コールバック関数)の第1引数にはエラー(無名関数の err)、第 2引数には

通常のレスポンス(無名関数の data)を返却するように実装します。

Conversationサービスへの処理が正常終了した場合は第 2引数に null, 第 1

引数にレスポンスを、エラー終了の場合は第1引数にエラー, 第 2引数に null

を指定するように実装します。

3.4 対話のセッション保持の実装

Conversationでは対話のフローが定義できますが、ユーザーがどこまで対話を進めているか

の状態は Conversationサービス側ではなく、アプリケーション側で情報を保持しておく必要

があります。

具体的には、以下の 2つの設定を保持することが必要です:

□ Conversation ID : どの対話かを一意に判断するための識別子

□ Context : どのノードまで進んだかや、ユーザー固有の変数を保持

現時点でのアプリケーションは Conversation IDは保持していますが、Contextは保持して

いる実装となっていないため、対話に対し想定外の回答を返すことで、対話が初期化されて

しまうケースが発生してしまいます。

以下では、対話のセッションを保持できるようにアプリケーションを実装します。当ハンズ

オンでは、コンテキストの維持の実装はクライアントサイドで行います。

__1. Web IDE 上で app/scripts/services/trigger.js を開きます。

このファイルではユーザーが画面で入力したメッセージをサーバー側に送信したり、サーバ

ー側で受信したメッセージを画面に返したりする機能を実装しています。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 76

__2. Context を保存する処理を追加します。

__a. 168-175 行をコメントインし、以下のように「xxxxx」になっているコード

を正しく修正してください。

app/scripts/services/trigger.js (167-176 行目)

if(context.system.hasOwnProperty('xxxxxx_xxxxxx_xxxxxx')

&& context.system.xxxxxx_xxxxxx_xxxxxx!= 'completed'){

watsonInfo = previousResponse;

message ="解釈できませんでした。申し訳ありませんが違う表現を試していただ

けますか。";

message =

message.concat(decodeURIComponent(previousResponse.response));

} else {

previousResponse = watsonInfo;

}

ソースコード修正のヒント

□ 対話が正常に最後まで完了する、あるいは想定外の対話メッセージにより処理

ができない場合など、対話のはじめに戻されるケースがあります。

□ その場合、Conversationから返却されるコンテキスト(context)の systemキ

ー内の辞書配列に「branch_exited_reason」キーが追加されます。したがっ

て対話が継続しているかは context.system.branch_exited_reasonで判断

することができます。

□ 対話が完了すると、context.system.branch_exited_reasonの値は

「complete」になります。

3.5 アプリケーションの動作確認

これまで修正したコードが正しく動作するか、確認します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 77

__1. Conversation 画面の左側にあるデプロイボタンをクリックします。

__2. 「Credentials」タブをクリックし、「Workspace ID」を確認します。

ここで確認するワークスペース IDが、実際に作成した対話フローを表す IDになります。

ワークスペース IDをこれからアプリケーションで使用しますので、メモしておきます。

__3. マニフェスト・ファイル(manifest.yml)ファイルを修正します。

__a. 「env」と「WORKSPACE_ID」の行をコメントインします。またその後ろに手

順 2 で記録したワークスペース ID を記入します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 78

__b. 「Services」の「- Conversation-dev」をコメントインします。

manifest.yml 10 行目および 15 行目

applications:

- path: .

memory:256M

instances:1

domain: mybluemix.net

name: bluemix-handson-YYYYMMDD-00

host: bluemix-handson-YYYYMMDD-00

disk-quota:1024M

env:

WORKSPACE_ID: <手順 2 で記録した Workdspace ID を記入します。>

Services:

- Cloudant NoSQL DB-dev

- Conversation-dev

マニフェスト・ファイル(manifest.yml)の編集後、実際にアプリケーションをデプロイします。

__4. デリバリー・パイプライン経由でアプリケーションの更新を行います。

__a. Web IDE 画面の左上にある Git アイコンをクリックします。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 79

__b. 変更コメントを入力し、「コミット」をクリックします。

コメントは「Lab3. サーバー側の Conversation モデルの修正」とします。

__c. 画面左の「同期化」をクリックし、ソースコードをプッシュします。

__d. 左矢印をクリックし、ツールチェーンのホーム画面に戻ります。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 80

__e. 「Delivery Pipeline」を選択し、デプロイが完了するのを確認します。

Lab2.と同様に、Delivery Pipelineで実行状況を確認し、全てのステージが正常終了した

らアプリケーション URLにアクセスします。

__5. 「会話開始」をクリックし、Conversation で定義したフローを確認します。

以上でアプリケーションの修正は完了です。

時間があれば補足ハンズオンも試してみましょう!!

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 81

Lab 4. コンテナーでアプリを公開する

この章では、これまで IBM Cloud Platformの Cloud Foundry上で動かしてきたアプリケーシ

ョンを IBM Cloud Containers Serviceの Kubernetes Cluster上のコンテナーとして、デプ

ロイ/公開する手順について実習します。

この章で行うこと

□ Kubernetes Clusterの作成

□ 認証情報の定義 (Cloudant NoSQL DB, Watson Conversation)

□ Kubernetes Cluster上へのアプリケーションのデプロイ

この章の作業前提

□ Lab 3.までが完了していること (アプリケーションが完成していること)

□ ハンズオン用 PCに以下のソフトウェアが導入済みであること

- Gitクライアント

- IBM Cloud CLI (IBM Cloud Platformの操作のために必要)

- Docker環境 (Docker Community Editionなどが導入済みであること)

- kubectlコマンドライン・インターフェース (Kubernetes Cluster操作のために必要)

この章の所要時間 (目安)

□ 40分 (Kubernetes Clusterの作成を除く)

4.1 Kubernetesクラスターの作成

「1.3.3 Kubernetes Clusterの作成」で実施済みのため、Lab 4.で改めて作成する必要はあり

ません。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 82

4.2 コマンドライン環境のセットアップ

IBM Cloud Container Serviceを操作するために必要なコマンドライン環境のセットアップを

行います。IBM Cloudおよび kubectlコマンドライン・インターフェースのセットアップに関

してはすでに行われている前提で話を進めます。

__1. コマンド・プロンプトを開きます。

__2. コマンド・プロンプト上で bluemix login コマンドを実行します。

ユーザー名、パスワードを聞かれますので、IBM Cloudアカウントのユーザー名(メールアドレ

ス)およびパスワードを指定してください。

$ bluemix login -a api.eu-de.bluemix.net

__3. IBM Cloud Container Registry 用のプラグインを導入します。

$ bluemix plugin install container-registry -r Bluemix

__4. IBM Cloud Container Service 用のプラグインを導入します。

$ bluemix plugin install container-service -r Bluemix

__5. 導入されているプラグインの一覧を確認します。

$ bluemix plugin list

インストール済みプラグインをリストしています...

プラグイン名 バージョン

container-registry 0.1.235

container-service 0.1.397

以上で IBM Cloud Container Serviceの操作に必要なコマンドライン・インターフェースの準

備ができました。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 83

4.3 (実施なし) IBM Cloud Container Registryの設定

IBM Cloud Platform上で利用可能なプライベート・レジストリーを構成します。

__1. IBM Cloud Container Registry にログインします。

$ bluemix cr login

'registry.eu-de.bluemix.net' にログインしています...

'registry.eu-de.bluemix.net' にログインしました。

OK

__2. ユーザー固有の名前空間(プライベート・レジストリー)を作成します。

他の IBM Cloudユーザーと重複しない文字列を指定する必要があります。

当ハンズオンでは「bluemix_handson_<日付 YYYYMMDD>_<受講 ID>」で作成します。

$ bluemix cr namespace-add bluemix_handson_<日付 YYYYMMDD>_<受講 ID>

名前空間 'bluemix_handson_<日付 YYYYMMDD>_<受講 ID>' を追加しています...

名前空間 'bluemix_handson_<日付 YYYYMMDD>_<受講 ID>' は正常に追加されました

OK

__3. 名前空間を確認します。

$bluemix cr namespace-list

名前空間をリストしています...

名前空間

bluemix_handson_<日付 YYYYMMDD>_<受講 ID>

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 84

OK

4.4 Kubernetes Clusterへのアクセス

4.1で作成した Kubernetes Clusterにアクセスし、Kubernetesダッシュボードを開きます。

__1. Kubernetes Cluster の環境情報をインポートします。

__a. Bluemix コマンドの Container Service プラグインを初期化します。

$ bluemix cs init

__b. Kubernetes Cluster の一覧を取得します。

当ハンズオンでは「mycluster」が確認できます。

$ bluemix cs clusters

Listing clusters...

OK

Name ID State Created Workers Datacenter Version

mycluster f1027774e1794349b17522468e1ac43b normal 1hour ago 1

par01 1.7.4_1504

__c. Kubernetes Cluster の環境情報を取得します。

「bluemix(bx) cs cluster-config <クラスター名>」で実行しますが、<クラスター

名>は当ハンズオンでは「mycluster」を指定します。

$ bluemix cs cluster-config mycluster

Downloading cluster config for mycluster

OK

mycluster の構成は正常にダウンロードされました。 環境変数をエクスポートして

Kubernetes の使用を開始してください。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 85

export KUBECONFIG=/Users/ibm/.bluemix/plugins/container-

service/clusters/mycluster/kube-config-hou02-mycluster.yml

__d. 手順 c.で取得した Kubernetes Cluster の環境変数をインポートします。

OSに合わせて適切な方法で環境変数をインポートします。インポートを行うコマン

ドについては、手順 c.の結果を参考に実行ください。

Windows の場合のコマンド例

$ SET KUBECONFIG=C:¥Users¥ibm¥.bluemix¥plugins¥container-

service¥clusters¥mycluster¥kube-config-prod-hou02-mycluster.yml

(参考) Git bash を利用あるいは Mac OS の場合のコマンド例

$ export KUBECONFIG=/Users/ibm/.bluemix/plugins/container-

service/clusters/mycluster/kube-config-prod-hou02-mycluster.yml

__2. Kubernetes ダッシュボードを開きます。

__a. プロキシーを起動します。

$ kubectl proxy

__b. 以下の URL に Web ブラウザーでアクセスし、Kubernetes ダッシュボード

を開きます。

URL: http://127.0.0.1:8001/ui

以下のような画面が表示されれば問題なくアクセスができています。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 86

4.5 Kubernetes Clusterへのサービス資格情報の登録

__1. 手順 4.4 とは別のコマンド・プロンプト(ターミナル)を開きます。

__2. Kubernetes Cluster の環境情報をインポートします。

4.4 と同様、「bluemix cs cluster-config <クラスター名>」で環境情報をダウンロードし、

コマンドの指示にしたがって環境情報をインポートします。

__3. IBM Cloud Platform のサービスの資格情報を Cluster に登録します。

アプリケーションの稼働に必要な Cloudant NoSQL DBとWatson Conversationの資格情

報を Kubernetes Cluster上のアプリケーションが参照できるようにセットアップします。

__a. 稼働中のアプリケーションの環境変数 VCAP_SERVICES を確認します。

これまで稼働させていた Cloud Foundryアプリケーションに渡されている環境変数

VCAP_SERVICESの設定値を全てコピーします。

IBM Cloudのアイコンをクリックしてダッシュボードに戻り、アプリ名を選択、ア

プリの詳細画面を開きます。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 87

アプリの詳細画面が開いたらランタイムタブ、環境変数タブをクリックして開き、右側のコピーアイコ

ンをクリックして VCAP_SERVICESの値をコピーします。

__b. コピーした資格情報(VCAP_SERVICES の値)をファイルに保存します。

ファイル名は「vcap.json」としてメモ帳などでファイルを作成し、コピーした値を貼り

付け、保存します。

__c. 資格情報を Kubernetes のシークレットとして保存します。

「health-manager-vcap」という名前でシークレットを作成します。

$ kubectl create secret generic health-manager-vcap --from-

file=VCAP_SERVICES=vcap.json

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 88

secret "health-manager-vcap" created

__d. 同様に、Conversation のワークスペース ID をシークレットに保存します。

「conversation-workspace-id」という名前でシークレットを作成します。

<ワークスペース ID>は Lab 3.で確認したものを使用します。

$ kubectl create secret generic conversation-workspace-id --from-

literal=WORKSPACE_ID=<ワークスペース ID>

secret "conversation-workspace-id" created

以上でアプリケーションが稼働するために必要な資格情報を Kubernetes Clusterに登録できま

した。実際にどのように登録されているか、Kubernetesダッシュボードで確認します。

__e. Kubernetes ダッシュボード上、コンフィグの「シークレット」を選択します。

シークレットの一覧が表示されます。

__f. シークレットで設定されている値を確認します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 89

「health-manager-vcap」という名前を選択します。データ内の目アイコンをクリック

すると、保管されている値を表示できます。

以上でアプリが動くコンテナーに必要な環境の前提は整いました。次の節で実際にアプリが動くコ

ンテナー・イメージをビルドして、デプロイします。

4.6 (実施なし) コンテナー・イメージのビルド

ローカル PC上に導入された Docker環境で Dockerイメージを作成します。

要注意

□ 当ハンズオンでは利用するネットワーク帯域が十分に確保されていないため、コンテナー・イ

メージの作成および IBM Container Registryサービスへの登録までを行いません。

□ コンテナー・イメージのビルド手順は別環境にて利用する際の参考としてください。

__1. コマンド・プロンプト上で任意のディレクトリーに移動します。

__2. ローカル環境上 Git クライアントでリポジトリーをクローンします。

__a. Git Repos and Tracking 上でリポジトリーURL を確認します。

Gitクローンしたい、対象のリポジトリーを選択します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 90

__b. Git Repos and Tracking 上でリポジトリーURL をコピーします。

プロジェクトのホーム画面から SSHのリポジトリーURLを確認、コピーします。

__c. Git クライアントでリポジトリーをクローンします。

ローカル環境上、任意のディレクトリー(フォルダー)に移動して、Gitクライアントでリ

ポジトリーをクローンします。

(※git cloneできない場合は P112から記載の SSHキーの作成と登録手順が実施済みか

をご確認ください。)

$ git clone <確認した URL>

__3. アプリケーションを Dockerize します。

__a. クローンしたリポジトリーに移動します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 91

$ cd bluemix-handson-<日付 YYYYMMDD>-<受講 ID>

__b. カレント・ディレクトリーにある Dockerfile を確認します。

以下の内容のファイルがローカル・リポジトリーに用意されていることが確認できます。

Dockerfile

FROM node:6.12.0

## パッケージの更新

RUN apt-get update -y; apt-get upgrade -y

RUN mkdir -p /opt/IBM/node/apps/bluemix-health-manager

ADD . /opt/IBM/node/apps/bluemix-health-manager

ENV PATH /opt/IBM/node/bin:$PATH

WORKDIR /opt/IBM/node/apps/bluemix-health-manager

## Bower & Gruntのインストール

RUN npm install -g bower grunt-cli

## アプリケーションのビルド

RUN npm install; bower install; grunt build

## Listenポートの開放

EXPOSE 8080

ENV PORT 8080

CMD [ "node", "start" ]

__c. Docker イメージをビルドします。

<名前空間>の部分は「bluemix_handson_<日付 YYYYMMDD>_<受講 ID>」に置き

換えて、コマンドを実行してください。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 92

$docker build . -t registry.eu-de.bluemix.net/<名前空間>/bluemix-health-

manager

Sending build context to Docker daemon 9.008 MB

Step 1/11 : FROM registry.eu-de.bluemix.net/ibmnode

---> 469709221e8d

Step 2/11 : RUN apt-get update -y; apt-get upgrade -y

---> Using cache

---> c7717542ce29

__d. ローカル環境の Docker 上で Docker イメージが作成されたことを確認します。

<名前空間>の部分は「bluemix_handson_<日付 YYYYMMDD>_<受講 ID>」に置き

換えて結果を確認ください。

$docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

registry.eu-de.bluemix.net/<名前空間>/bluemix-health-manager latest

b776090bebc3 2 minutes ago 967 MB

registry.ng.bluemix.net/ibmnode latest 469709221e8d 3 weeks ago 439 MB

__4. Docker イメージを IBM Cloud Container Registry に登録します。

__a. Docker イメージをアップロードします。

<名前空間>の部分は「bluemix_handson_<日付 YYYYMMDD>_<受講 ID>」に置き

換えて、コマンドを実行してください。

$docker push registry.eu-de.bluemix.net/<名前空間>/bluemix-health-

manager

The push refers to a repository [registry.eu-de.bluemix.net/<名前空間

>/bluemix-health-manager]

5849046653ad: Pushed

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 93

554f627f09ee: Pushed

latest: digest:

sha256:86ae87247e7f4d04e02e024040c4a46db2636156074042616ea656979

db669c4 size: 3464

__b. Docker イメージがアップロードされたかを確認します。

<名前空間>の部分は「bluemix_handson_<日付 YYYYMMDD>_<受講 ID>」に置き

換えて結果を確認ください。

$bluemix cr images

イメージをリストしています...

リポジトリー 名前空間 タグ ダイジェスト 作成 サイズ 脆弱性の状況

registry.eu-de.bluemix.net/<名前空間>/bluemix-health-manager <名前空間

> latest 86ae87247e7f 33 minutes ago 403 MB

OK

__c. 脆弱性アドバイザーで Docker イメージの安全性を確認します。

<名前空間>の部分は「bluemix_handson_<日付 YYYYMMDD>_<受講 ID>」に置き

換えて、コマンドを実行ください。

$bluemix cr va registry.eu-de.bluemix.net/<名前空間>/bluemix-health-

manager

'registry.eu-de.bluemix.net/bluemix_handson/bluemix-health-manager' の脆弱

性を確認中...

イメージ 'registry.eu-de.bluemix.net/bluemix_handson/bluemix-health-

manager' の最終スキャン時刻は Wed Jun 28 05:20:38 2017 です。

スキャン結果は、イメージを 安全 にデプロイできることを示しています。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 94

OK

以上で作成したアプリが稼働するコンテナー・イメージを用意できました。

4.7 Kubernetes Clusterへのデプロイ

4.7で作成したコンテナー・イメージをベースに、IBM Cloud Platform上の Kubernetes

Cluster上にアプリケーションをデプロイします。

要注意

□ 当ハンズオンで使用するコンテナー・イメージに関しては講師/サポーターの指示にしたがって

ください。

__1. アプリケーションをデプロイします。

実際に Kubernetes Cluster上にアプリケーションをデプロイします。

__a. デプロイ用ファイル(deployment.yml)を編集します。

アプリケーションのソースコードと一緒に Kubernetes Clusterへのデプロイ用のファ

イル(deployment.yml)が配置されています。メモ帳などで開きます。

イメージの<名前空間>の部分を各自の名前空間名に変更し、保存します。

deployment.yml

apiVersion: extensions/v1beta1

kind: Deployment

metadata:

name: bluemix-health-manager

spec:

replicas: 1

template:

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 95

metadata:

name: bluemix-health-manager

labels:

run: bluemix-health-manager

spec:

containers:

- name: bluemix-health-manager

image: registry.eu-de.bluemix.net/<名前空間>/bluemix-health-manager

imagePullPolicy: Always

env:

- name: VCAP_SERVICES

valueFrom:

secretKeyRef:

name: health-manager-vcap

key: VCAP_SERVICES

- name: WORKSPACE_ID

valueFrom:

secretKeyRef:

name: conversation-workspace-id

key: WORKSPACE_ID

---

apiVersion: v1

kind: Service

metadata:

name: health-manager-service

labels:

run: bluemix-health-manager

spec:

type: NodePort

selector:

run: bluemix-health-manager

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 96

ports:

- protocol: TCP

port: 8080

nodePort: 30080

__b. アプリケーションをデプロイします。

編集したデプロイ用ファイル(deployment.yml)を指定し、kubectl createコマンドを

実行します。

$ kubectl create -f deployment.yml

deployment "bluemix-health-manager" created

service "health-manager-service" created

__c. デプロイの結果を確認します。

ポッド(Pod, poから始まる項目)のステータスが「Running」となっていることを確認

します。Runningになるまで数十秒かかりますので、何度かコマンドを実行します。

$ kubectl get po,svc,deployment

NAME READY STATUS RESTARTS AGE

po/Bluemix-health-manager-700892171-7hvkb 1/1 Running 0 25s

NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE

svc/health-manager-service 10.10.10.200 <nodes> 8080:30080/TCP 25s

svc/kubernetes 10.10.10.1 <none> 443/TCP 5d

NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE

deploy/Bluemix-health-manager 1 1 1 0 25s

__2. アプリケーションの動作を確認します。

要注意

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 97

□ Free Clusterを利用する場合、NodePortと呼ばれるアプリケーション・ポートの公開の機

能のみ利用可能です。

□ 本番環境に向けては Standard Clusterを利用し、Ingressあるいは Load balancerと呼ば

れるサービス機能を使用することを検討してください。

__a. アクセス先の IP アドレスを確認します。

クラスターに属するワーカー・ノード(Worker Node)の Public IPを確認します。

$ bluemix cs workers mycluster

Listing cluster workers...

OK

ID Public IP Private IP Machine Type State Status

kube-hou02-paf1027774e1794349b17522468e1ac43b-

w1 184.173.1.172 10.47.84.198 free normal Ready

__b. アプリケーションにアクセスします。

Webブラウザー上で以下の URLにアクセスします。

URL: http://< 手順 a.で確認した IPアドレス>:30080/

__c. アプリケーションの動作を確認します。

実際にアプリケーションの動作を確認します。対話フロー通り処理が行われていれば、

Watson Conversationサービスとの連携もできていることが確認できます。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 98

以上でアプリケーションの稼働が確認できました。最後に Kubernetesダッシュボード上でログ

をモニターしてみましょう。

__1. アプリケーションのログを確認します。

__a. Kubernetes ダッシュボード上、デプロイメントの一覧を開きます。

左側メニューの「ワークロード」>「デプロイメント」で開きます。

以下のように bluemix-health-manager から始まるデプロイメントが作成されています。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 99

__b. Kubernetes ダッシュボード上、ポッドの一覧を開きます。

左側メニューの「ワークロード」>「ポッド」で開きます。

以下のように bluemix-health-managerから始まるポッドが作成されています。

__c. ポッドの詳細を開きます。

ポッドの一覧から、該当のポッド名をクリックすることで詳細画面が表示されます。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 100

__d. ログを表示します。

上部バーにある「LOGS」をクリックすることで、コンテナー上のログを見ることができ

ます。実際のチャットのやりとりなど出力されている内容を確認しましょう。

以上で Bluemixハンズオンは終了です。お疲れ様でした!!

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 101

補足ハンズオン 1: 音声入力/発話する

この章ではWatson Text to Speechおよび Speech To Textサービスを利用して、音声によ

る入力と発話機能をアプリケーションに実装します。

A1.1 サービス・インスタンスの作成

Watson Text to Speechおよび Speech To Textサービス・インスタンスを作成します。

A1.1.1 Watson Speech To Textサービス・インスタンスの作成

__1. 画面右上のカタログをクリックします。

__2. 「Watson」カテゴリーにある「Speech To Text」をクリックします。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 102

__3. サフィックス部分を「dev」に変更し、デプロイする地域で「米国南部」を選択して

「作成」をクリックします。

サービス名が「Speech To Text-dev」となっていることを確認し、「作成」をクリックします。

__4. Cloudant NoSQL DB と同様、以下のような詳細画面が表示されることを確認します。

A1.1.2 Watson Text to Speechサービスの作成

__1. 画面右上のカタログをクリックします。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 103

__2. 「Watson」カテゴリーにある「Text to Speech」をクリックします。

__3. サフィックス部分を「dev」に変更し、デプロイする地域で「米国南部」を選択、「作

成」をクリックします。

サービス名が「Text to Speech-dev」となっていることを確認し、「作成」をクリックします。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 104

__4. Cloudant NoSQL DB と同様、以下のような詳細画面が表示されることを確認します。

A1.2 アプリケーションのデプロイ

これまでのハンズオンと同様、ツールチェーンのWeb IDE上でアプリケーションのマニフェス

ト・ファイルを変更し、Delivery Pipeline経由でアプリケーションのデプロイを行います。

__1. ツールチェーンから Web IDE を開きます。

__2. マニフェスト・ファイル(manifest.yml)を修正します。

11行目のコメントを外し、16, 17行目のコメントも外してサービスの項目を適切な名前に変更

します。

環境変数「ENABLE_SPEECH」を設定することで、Text to Speechおよび Speech To Textサ

ービスが利用できるようにサンプル・コードが設定されています。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 105

__3. アプリケーションの実装を確認します。

ソースコード上、以下にサーバー・サイドの処理が記載されています。

適宜中身を確認しましょう。

□ models/stt.js : Speech To Textサービスと連携するためのモデルを定義

□ models/tts.js : Text to Speechサービスと連携するためのモデルを定義

□ logic/conversationLogic.js : Text to Speechサービスで合成された音声を処理

なお、logic/conversationLogic.jsの 163−185行目で環境変数「ENABLE_SPEECH」の有

効化により処理が変わる部分が実装されています。

__4. ソースコードをコミット、プッシュします。

これまでのハンズオンと同様、Git管理画面に切り替え、コミットおよびプッシュを行って

ください。コミット・メッセージは「A1. TTS/STTの有効化」とします。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 106

__5. Delivery Pipeline を開き、デプロイ結果を確認します。

__6. アプリケーションにアクセスし、動作確認します。

注意: Webブラウザーは Firefoxでも動作しますが、Chromeをお勧めします。

__a. 「対話開始」ボタンをクリック前にタブを「音声入力」に切り替えます。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 107

音声入力時にどう認識されたか、認識の確信度(入力値が信頼できるかどうかの指標

で、1.0に近いほど適切と判断できます)を確認したり、確信度の閾値 (デフォルト

は 0.45未満の場合入力データは不適切であるとして捨てるように実装しています)

を調整したりできます。

__b. 「対話開始」ボタンをクリックします。

以下のようにWebブラウザーのマイク入力をオンにして音声入力を行うと、音声認

識結果や confidence (確信度)の項目が表示されることが確認できます。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 108

以上で追加ハンズオンは終了です。お疲れ様でした!!

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 109

補足 (Appendix)

補足 1. ツールチェーンを表示する

本セッションでは Continuous Deliveryサービスのツールチェーンを使用します。コンソール

操作時にツールチェーンの開き方がわからなくなった場合などに、以下の手順でツールチェー

ンを表示します。

__1. IBM Cloud のダッシュボード(https://console.bluemix.net)を開きます。

__2. 操作している地域が「米国南部」であることを確認します。

__3. 画面左上のハンバーガー・メニューをクリックします。

__4. カテゴリーで「DevOps」を選択します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 110

__5. ツールチェーンの一覧から、該当のツールチェーンをクリックします

当ハンズオンでは「bluemix-handson-<日付 YYYYMMDD>-<受講 ID>」形式の名前が設定さ

れたツールチェーンを選択します。

__6. ツールの一覧を表示します。

利用したいツールのパネルをクリックし、作業を実施してください。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 111

補足 2. Git Repos and Trackingの設定

当ハンズオンではツールチェーン内で「Git Repos and Tracking」と呼ばれる IBM Cloud

管理の GitLab環境を利用します。アプリケーションの開発はWeb IDE (Eclipse Orion)と呼

ばれるWebブラウザー・ベースの開発環境を利用しますが、実際の開発現場では作業 PC上の

ローカルな環境でアプリケーションを開発することも多いです。その場合には IBM Cloud上に

ある GitLab環境からソースコードをダウンロード、編集し、アップロードすることになりま

すが、実施には設定が必要です。

また、当ハンズオンではアプリケーション開発は各自で行いますが、実際には IBM Cloud上

のアプリケーション開発であったとしても、通常の開発と同様に担当を決め、チームで開発し

ます。その際に作成したコード・リポジトリーを他のユーザーと共有する必要があります。

以下、各自のローカル環境で開発する、あるいはチームで開発することを前提とした、Git

Repos and Trackingの設定について説明します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 112

補足 2.1 Gitクライアントとの連携

ローカル環境で導入した Gitクライアントから Git Repos and Trackingのコード・リポジト

リー上のソースコードをクローン(clone)したりプッシュ(push)したりするためには、SSHキ

ーの設定が必要です。デフォルトでは設定されていないため、Gitクライアントから操作した

い場合、以下の手順で設定する必要があります。

__1. SSH キーを新規作成します。

Gitクライアントが導入済みであることを前提に、以下手順を説明します。

__a. 全てのプログラムから、Git Bash を開きます。

__b. ssh-keygen コマンドで共通鍵を生成します。

$ ssh-keygen –t rsa –b 4096 –C “IBM Cloudに登録しているメール・アドレス”

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 113

__c. b.のコマンド実行時に"Enter a file in which to save the key"と表示され

ます。特にデフォルトのままで問題なければ Enter で進みます。

__d. c.の後に”Enter passphrase (empty for no passphrase)”と表示されます。

任意のパス・フレーズを入力します。

__e. “Enter same passphrase again”と表示されます。d.で入力したパス・フレ

ーズを再度入力します。

__2. 生成した SSH keyを Git Repos and Trackingに登録します。

__a. Git Bash 上 clip コマンドで SSH キー(公開鍵)をコピーします。

$ clip < ~/.ssh/id_rsa.pub

__b. 以下の URL にアクセスします。

URL: https://git.ng.bluemix.net

__c. 画面右上のアカウント・アイコンをクリックし、「Settings」を選択します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 114

__d. SSH Keys タブをクリックします。

__e. 「Key」欄にコピーした SSH キーをペーストします。また、「Title」欄に任

意の SSH キー管理名を入力し、「Add key」ボタンをクリックします。

補足 2.2 ユーザーの招待

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 115

複数メンバーで開発を進める場合、共通のコード・リポジトリーや問題管理 DBを共有し、開

発を進めます。当ハンズオンで作成した Git Repos and Issue Trackingのプロジェクトに他

のメンバーを招待します。

・_1. 以下の URL で「Git Repos and Issue Tracking」画面を開きます。

URL: https://git.ng.bluemix.net

・_2. 共有したい、対象のプロジェクトを選択します。

・_3. 画面中央上部の「Setting」タブをクリックします。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 116

・_4. 「Members」タブをクリックします。

・_5. 「search for members」に追加したいユーザー名を入力します。

・_6. 役割をプルダウン・リストから選択します。

役割は「Guest」、「Reporter」、「Developer」、「Master」の4種類から選択できます。

それぞれが持つ権限は以下のリンクをご確認ください。

[XX] GitLab Documentation - Permissions

https://docs.gitlab.com/ee/user/permissions.html

・_7. 「Add to project」ボタンをクリックし、ユーザーを招待します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 117

・_8. 招待されたユーザーで、対象のプロジェクトにアクセスできることを確認します。

設定された権限にあった操作ができることも、必要に応じて各自で確認します。

補足 3. Delivery Pipelineによるコンテナーのデプロイ

実際に Delivery Pipelineを用いて、IBM Container Registryサービスの名前空間上に

Dockerイメージを作成し、Kubernetes Cluster上のポッドとしてアプリケーションをコンテ

ナー・デプロイしていきます。

要注意

□ 2017年 7月 21日時点で Free Trialアカウント・ユーザーでは Delivery Pipelineによりコン

テナー・イメージの作成ステージが動かせないことが報告されています。

□ 実際に以下のハンズオンを実施できるのは、クレジット・カード登録したアカウントである必

要があります。

まず、Kubernetes Clusterと Delivery Pipelineの連携のため、APIキーを発行します。

__1. IBM Bluemix Container Registry 用のプラグインを導入します。

bluemix loginが完了している前提で、「bluemix iam api-key-create <キー管理名>」で

APIキーを発行します。

$bluemix iam api-key-create bluemix-handson

[email protected] として API キー bluemix-handson を作成しています...

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 118

OK

API キー bluemix-handson が作成されました

API キーを保存してください。 作成後に取得することはできません。

名前 bluemix-handson

説明

作成日時 2017-07-14T07:30+0000

API キー xxxxxxxxxxxxxxxx-x_xxxxxxxxxxxxxxxxxxx

__2. API キーの項目をメモしておきます。

Delivery Pipelineでのコンテナー・イメージの作成やデプロイ時に使用しますので、忘れずにメ

モしておきます。

__3. IBM Cloud コンソール上でツールチェーンを開きます。

開き方がわからなくなった場合は「補足 1. ツールチェーンを表示する」を参照ください。

__4. Delivery Pipeline をクリックします。

以下のようなパイプライン設定が表示されることを確認します。

__5. コンテナー・イメージの作成ステージを作成します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 119

アプリケーションが即稼働できるように、今回はコンテナー内にアプリケーションを内包す

る形でイメージを作成します。そのためのタスクを構成します。

__a. パイプライン最右にある「ステージの追加」をクリックします。

ステージの定義画面が表示されます。

__b. 「マイ・ステージ」の部分をクリックし、名称を変更します。

「Container Build」など、コンテナー・イメージの作成を行うことがわかるような名称

を入力します。この時点で以下のような構成になっていることを確認します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 120

__c. 「ジョブ」をクリックし、ジョブの定義画面に移動します。

__d. 「ジョブ・タイプの選択」をクリックし、「ビルド」を選択します。

__e. 「ビルダー・タイプ」は「IBM Container Service」を選択します。

コンテナー・サービスである「IBM Container Service」を選択してください。

__f. 適切なターゲット、組織、スペース名が選択されていることを確認します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 121

ターゲットは「米国南部」、組織は自身のアカウントのアドレス、スペースは「dev」

が選択されていることを確認します。

__g. 「イメージ名」を入力します。

当ハンズオンでは「bluemix-health-manager」と入力します。

__h. 実行スクリプトを編集します。

IBM Container Registryサービス上にイメージをビルドし、保管するようスクリプ

トを編集します。Lab4a-pipeline-container-01.txt内のコードを「ビルド・ス

クリプト」にコピー&ペーストして置き換えます。

修正箇所

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 122

スクリプト (ファイル”Lab04a/01-pipeline-container.txt”を参照)

#!/bin/bash

# The following colors have been defined to help with presentation of logs:

green, red, label_color, no_color.

echo -e "${label_color}Starting build script${no_color}"

# The IBM Container Service CLI (ice), Git client (git), IDS Inventory CLI (ids-

inv) and Python 2.7.3 (python) have been installed.

# Based on the organization and space selected in the Job credentials are in

place for both IBM Container Service and IBM Bluemix

#####################

# Run unit tests #

#####################

echo -e "${label_color}No unit tests cases have been checked in ${no_color}"

######################################

# Build Container via Dockerfile #

######################################

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 123

bluemix login -a ${CF_TARGET_URL} -s ${CF_SPACE} --apikey

${BMX_API_KEY}

bluemix cr login

bluemix cr namespaces

export REGISTRY_URL=${CCS_REGISTRY_HOST}/${BMX_CR_NAMESPACE}

echo "REGISTRY_URL: ${REGISTRY_URL}"

export

FULL_REPOSITORY_NAME=${REGISTRY_URL}/${IMAGE_NAME}:${APPLICATIO

N_VERSION}

echo "FULL_REPOSITORY_NAME: ${FULL_REPOSITORY_NAME}"

# Possible adding retries to build the image

if [ -f Dockerfile ]; then

echo -e "${label_color}BUILDING ${FULL_REPOSITORY_NAME} ${no_color}"

${EXT_DIR}/utilities/sendMessage.sh -l info -m "New container build

requested for ${FULL_REPOSITORY_NAME}"

# build image

BUILD_COMMAND=""

if [ "${USE_CACHED_LAYERS}" == "true" ]; then

BUILD_COMMAND="build --pull --tag ${FULL_REPOSITORY_NAME}

${WORKSPACE}"

ice_retry ${BUILD_COMMAND}

RESULT=$?

else

BUILD_COMMAND="build --no-cache --tag ${FULL_REPOSITORY_NAME}

${WORKSPACE}"

ice_retry ${BUILD_COMMAND}

RESULT=$?

fi

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 124

if [ $RESULT -ne 0 ]; then

echo -e "${red}Error building image ${no_color}" | tee -a

"$ERROR_LOG_FILE"

echo "Build command: ice ${BUILD_COMMAND}"

ice info

ice images

${EXT_DIR}/print_help.sh

${EXT_DIR}/utilities/sendMessage.sh -l bad -m "Container build of

${FULL_REPOSITORY_NAME} failed"

exit 1

else

${EXT_DIR}/utilities/sendMessage.sh -l good -m "Container build of

${FULL_REPOSITORY_NAME} was successful"

echo -e "${green}Container build of ${FULL_REPOSITORY_NAME} was

successful ${no_color}"

fi

else

echo -e "${red}Dockerfile not found at the repository root${no_color}"

exit 1

fi

#################################################

#####################################

# Copy any artifacts that will be needed for deployment and testing to

$WORKSPACE #

#################################################

#####################################

echo "IMAGE_NAME=${FULL_REPOSITORY_NAME}" >>

$ARCHIVE_DIR/build.properties

if [ -f deployment.yml ]; then

#Update deployment.yml with image name

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 125

echo "UPDATING DEPLOYMENT MANIFEST:"

sed -i "s~^\([[:blank:]]*\)image:.*$~\1image:

${FULL_REPOSITORY_NAME}~" deployment.yml

cat deployment.yml

cp deployment.yml $ARCHIVE_DIR/

else

echo -e "${red}Kubernetes deployment file 'deployment.yml' not found at the

repository root${no_color}"

exit 1

fi

__i. 「環境プロパティー」を選択します。

選択すると、以下のようなプロパティーの設定画面が表示されます。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 126

__j. 「プロパティーの追加」をクリックし、「文字プロパティー」を選択します。

__k. Container Registry サービスの名前空間を指定するためのプロパティーを追加し

ます。

プロパティー名は「BMX_CR_NAMESPACE」、値は自身の名前空間名を指定します。

__l. 同様に API キーを指定するためのプロパティーを定義します。

プロパティー名は「BMX_API_KEY」、値は発行した APIキーの値を入力します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 127

__m. 「保存」をクリックし、設定を保存します。

パイプラインの定義が以下のように追加されていることを確認します。

__6. コンテナー・イメージの検証ステージを作成します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 128

コンテナーをデプロイする前に、Vulnerability Advisor機能を利用して、作成したイメージ

がセキュリティー上既知の脆弱性が内在していないかを確認します。

__a. パイプライン最右にある「ステージの追加」をクリックします。

再びステージの定義画面が表示されます。

__b. 「マイ・ステージ」の部分をクリックし、名称を変更します。

「Container Validate」など、コンテナー・イメージのセキュリティーチェックを行う

ことがわかるような名称を入力します。

__c. 入力設定の「ステージ」の部分をクリックし、適切なステージ名を選択します。

コンテナー・イメージの作成ステージ名を選択します。当ハンズオンの場合、

「Container Build」あるいは自身で設定したステージ名を選択します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 129

この時点で以下のような構成になっていることを確認します。

__d. 「ジョブ」をクリックし、ジョブの定義画面に移動します。

__e. 「ジョブ・タイプの選択」をクリックし、「テスト」を選択します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 130

__f. 「テスター・タイプ」は「IBM Vulnerability Advisor」を選択します。

__g. その他デフォルトのまま「保存」をクリックします。

パイプラインの定義が以下のように追加されていることを確認します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 131

__7. Kubernetes Cluster へのコンテナーのデプロイ・ステージを作成します。

Kubernetes Cluster上に作成したイメージを元にコンテナー(ポッド)を作成するためのジョ

ブを作成します。

__a. パイプライン最右にある「ステージの追加」をクリックします。

再びステージの定義画面が表示されます。

__b. 「マイ・ステージ」の部分をクリックし、名称を変更します。

「Container Deploy」など、コンテナーのデプロイを行うことがわかるような名称を入

力します。

__c. 入力設定の「ステージ」の部分をクリックし、適切なステージ名を選択します。

コンテナー・イメージの作成ステージ名を選択します。当ハンズオンの場合、

「Container Build」あるいは自身で設定したステージ名を選択します。

この時点で以下のような構成になっていることを確認します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 132

__h. 「ジョブ・タイプの選択」をクリックし、「デプロイ」を選択します。

__i. 「デプロイヤー・タイプ」は「Kubernetes」を選択します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 133

__j. 「API Key」で作成した API キーを指定します。

まず、「Enter an API key」を選択します。

次に、生成した APIキーをコピー&ペーストします。

正しい APIキーを登録すると、以下の画面のように APIキーの管理名が表示され、

Kubernetes Cluster名や組織、スペース名が表示されます。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 134

__k. デプロイ・スクリプトを編集します。

Lab04a/02-pipeline-container.txt内のコードを「デプロイ・スクリプト」に

コピー&ペーストして置き換えます。

スクリプト (ファイル”Lab04a/02-pipeline-container.txt”を参照)

#!/bin/bash

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 135

#Connect to a different container-service api by uncommenting and specifying

an api endpoint

#bx cs init --host https://us-south.containers.bluemix.net

kubectl apply -f deployment.yml

__l. 「保存」をクリックします。

パイプラインの定義が以下のように追加されていることを確認します。

以上で必要なパイプラインの設定が完了しました。実際に Kubernetes Clusterにアプリケ

ーションをデプロイしてみましょう。

__8. パイプラインを手動で実行します。

コンテナー・イメージの作成ステージ、当ハンズオンでは「Container Build」の実行アイコンを

クリックします。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 136

クリックすると、以下のように「ステージの実行中」となり、パイプライン処理が途中から開始

できます。

要注意

□ 失敗した場合は、失敗したステージのログを「ログおよび履歴の表示」から確認します。

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 137

__9. デプロイの結果を Kubernetes コマンドラインから確認します。

ポッド(Pod, poから始まる項目)のステータスが「Running」となっていることを確認します。

Runningになるまで数十秒かかりますので、何度かコマンドを実行します。

$ kubectl get po,svc,deployment

NAME READY STATUS RESTARTS AGE

po/Bluemix-health-manager-700892171-7hvkb 1/1 Running 0 25s

NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE

svc/health-manager-service 10.10.10.200 <nodes> 8080:30080/TCP 25s

svc/kubernetes 10.10.10.1 <none> 443/TCP 5d

NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE

deploy/Bluemix-health-manager 1 1 1 0 25s

__10. アプリケーションの動作を確認します。

要注意

□ Free Clusterを利用する場合、NodePortと呼ばれるアプリケーション・ポートの公開の

機能のみ利用可能です。

□ 本番環境に向けては Standard Clusterを利用し、Ingressあるいは Load balancerと呼

ばれるサービス機能を使用することを検討してください。

__a. アクセス先の IP アドレスを確認します。

クラスターに属するワーカー・ノード(Worker Node)の Public IPを確認します。

$ bluemix cs workers mycluster

Listing cluster workers...

OK

ID Public IP Private IP Machine Type State Status

IBM Cloud ハンズオン・セミナー

IBM Cloud ハンズオン・セミナー Page 138

kube-hou02-paf1027774e1794349b17522468e1ac43b-

w1 184.173.1.172 10.47.84.198 free normal Ready

__b. アプリケーションにアクセスします。

Webブラウザー上で以下の URLにアクセスします。

URL: http://< 手順 a.で確認した IPアドレス>:30080/

__c. アプリケーションの動作を確認します。

実際にアプリケーションの動作を確認します。対話フロー通り処理が行われていれば、

Watson Conversationサービスとの連携もできていることが確認できます。

以上でアプリケーションの稼働が確認できました。