IBM Cloudの基本 -サービスの作成から資格情報の取得まで-


# はじめに

IBM Cloud(旧Bluemix)でサービスを作成し、資格情報を取得するまでの流れは、慣れてしまえば難しいところがないのですが、結構画面遷移が多く、ガイドを作るとなるとそこそこ面倒です。いつも同じようなことばかりやっている気がするので、ちゃんとしたガイドを一度作って、使い回すことにしました。
サンプルではWatsonサービスを例に取り上げていますが、基本的に他のIBM Cloudサービスでも手順は同じはずです。

(2018-03-16 Watson Conversationの名称がWatson Assistに変更になったので、それにあわせて資料改訂)
(2018-06-30 サイトにより認証方法が変わったことにあわせて改訂)

# IBM Cloudアカウントの作成
2017年11月より、IBM CloudにはLiteアカウントができ、一定の制限に従えば、クレジットカード登録なしにずっとクラウドサービスを使えるようになりました。
非常に簡単に作成できますので、まだアカウントを持っていない方はこれを機会に是非アカウント作成をすることをお勧めします。
手順については、[最新版IBM Cloud ライトアカウント登録手順(2018-05-06時点)](https://qiita.com/makaishi2/items/ae83828a711d0d946011)に別記事として書いていますので、参考にして下さい。

以下の手順では、IBM アカウントは作成済みの前提で説明します。

# ダッシュボード表示
[ダッシュボード](https://console.bluemix.net/dashboard/)のURLにアクセスし、ダッシュボード表示を行います。画面右上の「リソースの作成」ボタンをクリックします。

![ibm-cloud-1.png](https://qiita-image-store.s3.amazonaws.com/0/206130/269b7697-59cf-983a-d7fb-b71d84d6cf4e.png)

# カテゴリー選択
下の画面が表示されたら、左にあるカテゴリー一覧から、作成したいサービスのカテコリーを選択します。ここでは例として一番下の「Watson」を選択します。

![ibm-cloud-2.png](https://qiita-image-store.s3.amazonaws.com/0/206130/8c040d8f-5b75-a687-6b6c-7df1550309a4.png)

# サービス選択
サービス一覧が出てきたら、作成したいサービスを選択します。
ここでは、例としてWatson Assist(旧名称 Watson Conversation)を選択します。

![ibm-cloud-3.png](https://qiita-image-store.s3.amazonaws.com/0/206130/8653f20e-fff8-4319-0e61-e43cf020307f.png)

# サービス作成
しばらくすると(すべての情報が表示されるまで多少時間がかかります)、次の画面が表示されます。

(以下2018-06-30改訂部分)
ここで、「デプロイする地域／ロケーションの選択」をどうするかで、その後の挙動が違うので注意して下さい。これは、IBM CloudのPaaSサービスの認証方式を現在切替中で、「シドニー」から先行して切替えを行っているため、過渡期として発生している現象となります。
ちなみに、デフォルトで選択されている地域は、作成するインスタンスによってバラバラになっているようです。私が調べた範囲では

* Watson Assistant: 米国南部
* Speech to Text: シドニー
* Text to Speech: シドニー

となっていました。
**混乱を避けるため、初めてWatsonを利用するユーザーは、すべてのインスタンスを「米国南部」で統一して作ることをお勧めします。**


![スクリーンショット 2018-06-30 20.56.28.png](https://qiita-image-store.s3.amazonaws.com/0/206130/a200ec07-6f98-4f7e-3e61-f4501232a4ab.png)

以降の記述は(a)、(b)それぞれのケースについて別々に説明することにします。

(a) 「米国南部」を選択した場合
(b) 「シドニー」を選択した場合

![ibm-cloud-4.png](https://qiita-image-store.s3.amazonaws.com/0/206130/ea30c793-1b90-619c-24c7-b6e02c23421a.png)

(a)、(b)どちらかを指定した上で、画面右下の「作成」ボタンをクリックして下さい。
ここから先は(a)、(b)のそれぞれについて別々に説明します。

# サービス資格情報

## (a)「米国南部」の場合
サービスができると下の画面が表示されます。
インスタンス作成の地域を「米国南部」にすると、資格情報は従来と同じ「Username + Password」の形になります。
ここで、赤枠で囲まれたアイコンをクリックすると、資格情報がそのままクリップボードにコピーされるので、その結果をテキストエディタなどに張り付けて保存するようにして下さい。

![スクリーンショット 2018-06-30 21.12.29.png](https://qiita-image-store.s3.amazonaws.com/0/206130/0d0193be-e0f2-471c-9884-f4a05b07523f.png)

## (b) 「シドニー」の場合
サービスができると下の画面が表示されます。
インスタンス作成の地域を「シドニー」にすると、資格情報は新しいタイプのAPI keyによる方法に変わります。
ここで、赤枠で囲まれたアイコンをクリックすると、資格情報がそのままクリップボードにコピーされるので、その結果をテキストエディタなどに張り付けて保存するようにして下さい。

![スクリーンショット 2018-06-30 21.20.16.png](https://qiita-image-store.s3.amazonaws.com/0/206130/c25fa04b-eea2-beed-65f7-03858ca867b4.png)


# (おまけ) Node-RED設定との関係
旧方式・新方式の資格情報をどのような形でアプリケーションで呼び出すかは、実装方式に依存しますので、ここで細かい説明は行いません。
ただ、非常によく使われていると思われるNode-REDに関しては、簡単に対応方法を説明します。

## (a) 「米国南部」の場合
従来どおり、資格情報から「Username」と「Password」を取得し設定を行います。
API Key はブランクのままでいいです。
Service Endpointもデフォルト値のままでいいです。

![add-01-us-south.png](https://qiita-image-store.s3.amazonaws.com/0/206130/4dd0cd8f-6c45-3707-432b-0fdf09c7d7e6.png)

## (b)「シドニー」の場合
資格情報からAPI Keyを取得し、「API Key」の項目に設定します。
この場合、「Username」「Password」はブランクのままでいいです。
「Service Endpint」もデフォルト値から変更が必要です。
資格情報から取得した値(gateway-syd.xxxとなっているはずです)を上書き設定して下さい。

![add-01-sydney.png](https://qiita-image-store.s3.amazonaws.com/0/206130/75c4c55a-c6a5-fded-52d8-5a3fb461749d.png)

# (おまけ2) Node.jsアプリの場合
以前に作った自分のアプリ[Watsonでニュース記事の評判分析をしよう!](https://qiita.com/makaishi2/items/c25731bfd57f7005ff6b)で試してみました。
その結果、下記の形で実装している場合、コードそのものには手を入れず、

* watson-developer-cloudのバージョンアップ (3.5.3以上)
* 定義ファイル(local.env)の書き換え

で新しい認証方式に対応できることがわかりました。

```js
// 構成情報の取得
const fs = require('fs');
if (fs.existsSync('local.env')) {
  console.log('構成情報をlocal.envから取得します');
  require('dotenv').config({ path: 'local.env' });
}

// Discoveryインスタンスの生成
const watson = require('watson-developer-cloud');
const discovery = new watson.DiscoveryV1({
    version_date: '2017-08-01'
});
console.log(discovery)
```


local.env従来版

```
# 旧式credentailの場合 (US-SOUTH)
# XXX_USERNAMEとXXX_PASSWORDの2つを指定します
DISCOVERY_USERNAME=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
DISCOVERY_PASSWORD=xxxxxxxxxxxx
```


local.env新方式版

```
# 新credentailの場合 (SYDNEY)
# XXX_IAM_APIKEYとXXX_URLの2つを指定します
DISCOVERY_IAM_APIKEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
DISCOVERY_URL=https://gateway-syd.watsonplatform.net/discovery/api
```