#はじめに
2016年末に提供されたAPI Connect V5.0.6 から、開発者向けにDocker ContainerへAPI Connectがインストールできるようになった。V5.0.5以前は、API ConnectのコンポーネントであるDataPower、API Manager、開発者ポータルは仮想イメージとしてのみ提供されており、開発者端末への導入は、それなりにハードルが高かった。
Docker Containerに導入できるようになったことで、従来よりも簡単に開発者向け端末で利用できるようになりそうだ。docker-composeを利用し、API Connectの複数のコンポーネントをまとめて導入、管理できるようになっている。
マニュアルに従い、Docker ContainerにAPI Connectを導入し、サンプルを動かす所まで実施してみる。
(仮想イメージの導入に関しては、IBM API Connect の導入 IBM DataPower Gatewayの導入編、IBM API Connect の導入 Managementサーバーの導入編 に詳しく説明されている。)
#ながれ
Docker ContainerへのAPI Connectの導入、稼動に関しては、Knowledege Centerに記載があるので、こちらの流れに従う。
- 前提環境の準備
- Docker Container に API Connect を導入
- API Connect の構成実施
- カタログの設定
- microservice アプリケーションの公開
- 開発者ポータルで、Client キー&シークレットの確認
- ゲートウェイ経由の microservice の呼び出し
以降は、この流れに従う。
#1. 前提環境の準備
Knowledege Centerや、Docker Hubによると、以下が前提とある。
- Docker HostのOSは、API ConnectがサポートするOS
- Docker
- docker1.12.0 or later
- docker-compose 1.8.1 or later
- API Connect Toolkit
- ミニマムHWリソース
- 2cpu
- 8GB RAM
API ConnectがサポートするOSの調べ方は、過去記事を参考。
環境は、Windows7 professional sp1環境上にVMWareを用意し、Docker HostのOSとしてUbuntu14.04LTSを導入し、Ubuntuイメージに2Cpu、8GB RAMを割り当てた。導入したDocker関連は、以下。
- docker 1.12.6
- docker-compose 1.9.0
Dockerの導入に関しては、Dockerのマニュアルや、DockerをLinux(Ubuntu 14.04 LTS)にインストールする方法と解説を参考に導入した。
docker-composeも同様に、Dockerのマニュアルを参考に導入した。
2. Docker Container に API Connectを導入
Docker Hostの適当なディレクトリーに移動する。以下のコマンドを実施し、git の API Connect Docker リポジトリーの clone を作成する。
$ git clone https://github.com/strongloop/apiconnect-docker
作成した clone のディレクトリーに移動し、以下コマンドを実行。コマンド実行は、ダウンロードが行われるため、インターネットアクセスが必要で、時間もかかる。
$ cd apiconnect-docker
$ docker run -it --rm --env SHOW_LICENSE=1 ibmcom/apiconnect:manager-v5.0.6.0
clone ディレクトリー内で、SMTPサーバーを指定されているファイル「.env」を編集する。以下はgmailを指定した場合の例。
ACCEPT_LICENSE=true
APIC_VERSION=v5.0.6.0
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_SENDER=xxxxxxxxxx@gmail.com
SMTP_USERNAME=xxxxxxxxxx@gmail.com
SMTP_PASSWORD=password
API Connectは、Gateway、API Manager、開発者ポータルなど複数のサービスで稼動する。clone ディレクトリー内に、複数 Container を構成管理するYAMLファイルが提供されており、これを利用し、Container を起動する。Gateway として DataPower を利用する場合は、docker-compose.yamlファイル、Gateway として Microgateway を利用する場合は、docker-compose-microgateway.yaml が用意されている。
ここでは、DataPower を利用した。clone ディレクトリ内で、以下のコマンドを実行し、Container を起動する。初回のコマンド実行時には、ダウンロード等が行われるため、時間がかかる。
$ docker-compose up -d
起動が終了後、以下コマンドを実行し、稼動状況を確認する。
$ docker-compose ps
apic@ubuntu:~/apiconnect-docker$ docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------------
apim /tini -- /startup.sh Up
datapower /start.sh Up 443/tcp
esmaster /docker-entrypoint.sh /bin ... Up 9200/tcp, 9300/tcp
ibmlogstash /bin/sh -c /startup.sh Up
ibmportal /root/tini -- /root/start_ ... Up
make-ssh-keys /bin/sh -c /genkey.sh Exit 0
microservice /bin/sh -c /usr/bin/app.sh ... Up 8080/tcp
nginx /bin/sh -c /run.sh Up 0.0.0.0:443->443/tcp, 80/tcp
apic@ubuntu:~/apiconnect-docker$
全てのサービスへのアクセスを確認するために、Docker Host の IPアドレスと API Connect ホスト名をマッピングする。Docker Hostの/etc/hostsファイルを編集する。
xxx.xxx.xxx.xxx apim ibmportal datapower microservice
ここまでで導入は完了。かなり簡単に導入ができた!!
これ以降は、環境の設定、サンプルAPIの公開、APIへのアクセスを行っていく。
以降の手順では、画面キャプチャーが英語となっているが、日本語表示も可能
3. API Connect の構成実施
次に、GatewayとしてDataPowerの登録と、APIを提供する組織の登録を行う。
3.1 DataPowerの登録
Cloud Manager(https://apim/cmc) にアクセスを行う。起動まで時間がかかるケースがあるのと、最初のアクセスでは証明書の受け入れが必要。ログインし、ライセンス条項を受け入れる。
プロファイルの更新が終わると、Cloud Managerの画面が表示されるのでDataPowerの設定を行う。Servicesをクリックし、"Gateway" 箇所までスクロールし、歯車マークをクリックする。
Addressに「datapower」と入力し、"save" をクリックする。
DataPower Servicesで、"Add Server" をクリックする。
DataPowerの情報を入力し、"Create"をクリックする。登録が終わるまで時間がかかる。
- Display Name: idg
- Address: datapower
- Username: admin
- Password: admin
3.2 APIを提供する組織の登録
続いて、APIを提供する組織の登録を行う。組織を開き、"Add" をクリックする。
組織名や、ユーザー情報を入力し、"Add" をクリックする。ここでは組織名を「dev」とした。
APIを提供する組織の登録後、ユーザー情報で登録したメールアドレスにメールが届く。このメールからパスワードの設定を行うと、API Managerへのアクセスが可能になる。
4. カタログの設定
ここでは、カタログの設定から開発者ポータルを作成する。
API Manager (https://apim/apim) にアクセスを行い、APIを提供する組織で登録したユーザーでログインする。
ログイン後、最初のアクセスの場合、黒い画面で"Draft APIs"という画面が出力されるので、"Got it!"ボタンを押す。
APIに関するページが表示され、画面左上のマークをクリックするとメニューが表示される。
Dashboardをクリックする。Dashboardの黒い画面が表示されるので、"Got it!"をクリックする。
Sandboxカタログをクリックし、Sandboxカタログの設定を行う
Settingsタブを選択し、左メニューのPortalをクリックし、以下を設定確認し、画面右上の保存ボタンをクリックする。
- Select Portal: IBM Developer Portal
- URL: https://ibmportal/登録した組織名/sb
保存ボタンをクリックすると、Portalを作成するという画面が表示される。一定時間経過後、開発者ポータルにアクセスが可能となる。
これで、カタログの設定は終了。
5. microservice アプリケーションの公開
次に、microservice アプリケーションを公開するステップを行う。このステップでは、apicコマンドを使用するため、apiconnect Developer toolkitの導入が必要である。
toolkitの導入は、Windowsの記事ではあるが、API Connect をWindowsにインストールする際のTipsを参考に。
ここでは、Docker HostのUbuntuに、以下を導入。
- node v4.4.4
- npm v4.1.1
- apic v5.0.6(apiconnect: v2.5.8)
作成したgit cloneのディレクトリーから、micoroservice ディレクトリに移動し、以下のように apic login コマンドを実行する。ユーザーは、apim にログインしたユーザーと同じ。
apic@ubuntu:~/apiconnect-docker$ cd microservice/
apic@ubuntu:~/apiconnect-docker/microservice$ apic login
Enter the API Connect server
? Server: apim
? Username: xxxxx@xxx.com
? Password (typing will be hidden) *********
Logged into apim successfully
apic@ubuntu:~/apiconnect-docker/microservice$
次に、サンプルで用意されているAPIを、公開する。以下のコマンドを実行する。
apic@ubuntu:~/apiconnect-docker/microservice$ apic publish definitions/loopback-example-database-product.yaml --catalog sb --organization dev --server apim
Staged definitions/loopback-example-database-product.yaml to dev:sb [loopback-example-database:1.0.0]
Published definitions/loopback-example-database-product.yaml to dev:sb [loopback-example-database:1.0.0]
apic@ubuntu:~/apiconnect-docker/microservice$
これでmicroserviceアプリケーションの公開が終了。
6. 開発者ポータルで、Client キー&シークレットの確認
ここでは、開発者ポータルにアクセスし、公開したmicroserviceにアクセスする際にClientキーとClientシークレットを確認する。
https://ibmportal/登録した組織名/sb にアクセスする。
"create an account"をクリックし、新規ユーザー登録を行う。ここでのユーザーは開発者のため、メールアドレスは、APIを提供する組織の登録で使用したメールアドレスとは別のアドレスが必要。
APIを提供する組織の登録と同様に、該当のメールアドレスにメールが送信される。メールにあるURLをクリックするとユーザーがアクティベーションされる。登録したユーザーでログインする。
"Apps"をクリックし、"Create new App"をクリックする。
作成されると、"Show Client Secret"にチェックを入れると、Clientシークレットを確認することができる。この表示は一度だけのため、Clientシークレットを使用する場合、コピーをしておく必要がある。次のAPI呼び出しの手順で使用するため、コピーしておく。
リセット機能があるので、忘れた場合はリセットを行う。
スクロールすると、同様にClientキーを確認できる。同様にコピーしておく。
"API Products"から、公開した"loopback-example-database (1.0.0)"をクリックする。
Plansで"Default Plan"を"subscribe"をクリックする。
先ほど作成した"microservice"にチェックをいれ"Subscribe"をクリックする。
この操作で、公開したmicoroserviceの利用登録まで完了した。
7. ゲートウェイ経由の microservice の呼び出し
次に、curlを使用して、公開したmicroserviceの呼び出しを行う。呼び出しに必要な情報は以下。POSTでデータ登録を行い、GETでそのデータを取得する。
- url : https://datapower/組織名/sb/api/Accounts
- x-ibm-client-id : 開発者ポータルで確認したClientキー
- x-ibm-client-secret : 開発者ポータルで確認したClientシークレット
まず、以下コマンドを実行してPOSTを実行する。Clientキー、Clientシークレットは適宜修正が必要。
apic@ubuntu:~$ curl -k --request POST --url https://datapower/dev/sb/api/Accounts --header 'accept: application/json' --header 'content-type: application/json' --header 'x-ibm-client-id: a395c4b2-3115-4544-ad0c-e1c15cb3acfb' --header 'x-ibm-client-secret: kE8eN8lC8jW2yB4wJ4iY1fP7uP7dT7mD8aK3aK3jA8kN5bH0dA' --data '{"email":"myemail@myhost.com","createdAt":"2016-11-26T15:29:45.233Z","lastModifiedAt":"2016-11-25T20:17:02.033Z"}'
{"email":"myemail@myhost.com","createdAt":"2016-11-26T15:29:45.233Z","lastModifiedAt":"2016-11-25T20:17:02.033Z","id":1}
apic@ubuntu:~$
次に、以下コマンドを実行してGETを実行する。入力した値がGETされていることが確認できる。
apic@ubuntu:~$ curl -k --request GET --url https://datapower/dev/sb/api/Accounts --header 'accept: application/json' --header 'content-type: application/json' --header 'x-ibm-client-id: a395c4b2-3115-4544-ad0c-e1c15cb3acfb' --header 'x-ibm-client-secret: kE8eN8lC8jW2yB4wJ4iY1fP7uP7dT7mD8aK3aK3jA8kN5bH0dA'
[{"email":"myemail@myhost.com","createdAt":"2016-11-26T15:29:45.233Z","lastModifiedAt":"2016-11-25T20:17:02.033Z","id":1}]
apic@ubuntu:~$
#まとめ
Docker ContainerにAPI Connectの導入から実行まで行った。
仮想イメージの導入よりも、かなり簡単に、API Connectの各コンポーネントの導入、構成ができた。
docker-compose を利用し、複数 Container がまとめて導入できるようになっている。