目次


Secure Gateway サービスと API Management サービスを利用してオンサイトの REST API を Bluemix に公開する

Comments

Bluemix 上のアプリからオンサイト環境にアクセスする必要はますます増えています。しかし、オンサイトの REST API サービスを、Bluemix 上の他のサービスと同じように呼び出すことができるのでしょうか?その答えは「イエス」です。Secure Gateway サービスと API Management サービスを利用すれば、簡単に呼び出すことができます。

このチュートリアルでは、オンサイトの REST API サービスを Bluemix に簡単に公開する方法を紹介します。

Secure Gateway サービスでは、ローカルの REST API を Bluemix に公開するために、Bluemix とオンサイト環境の間に簡単にセキュア・トンネルを構築することができます。そして API Management サービスを利用すれば、公開した API を洗練された方法で管理して、カスタム・サービスとして公開できるため、このサービスを他のサービスとまったく同じように、他のアプリから利用できるようになります。

興味が湧きましたか?それでは続きを読んでください。このチュートリアルでは、Secure Gateway サービスと API Management サービスを利用して、オンサイトの REST API サービスを Bluemix に簡単に公開する方法を紹介します。

アプリを実行するコードを入手する

アプリを作成するために必要となるもの

  • Bluemix アカウント
  • DevOps Services アカウント
  • Node.js プログラミング言語の知識
  • Docker の知識 (オプション)
  • Cloud Foundry コマンド・ライン・ツールの知識 (オプション)

概要

このチュートリアルでは、サンプル REST API サービスをオンサイトにセットアップして Bluemix に公開し、そのサービスを管理して新規カスタム・サービスとして公開し、検証用のサンプル・アプリを作成するプロセスをステップバイステップで説明します。

私がサンプル・アプリをセットアップして作成するために使用したシステムは、Ubuntu Linux 14.04 (64bit) です。このチュートリアルで使用するコマンドには、Ubuntu に固有のものもあります。

このプロセスのステップは以下のとおりです (以下の図を参照)。

  1. サンプル REST API サービスをセットアップする。
  2. (Docker コンテナーをベースとした) Secure Gateway クライアントをローカルにインストールして、オンサイトと Bluemix の間にトンネルを構築する。
  3. API Management サービスを利用して、カスタム・サービスを管理および公開する。
  4. サンプル・アプリをデプロイして実行する。これにより、他のアプリが、あらゆる Bluemix サービスを呼び出す場合と同じように、この新規カスタム・サービスを呼び出せるようになります。

REST API サービスがオンサイトで実行されているという前提で、このオンサイトのサービスを新規カスタム・サービスとして Bluemix 上で公開する方法を紹介します。まず始めに、(Docker コンテナーをベースとした) Secure Gateway クライアントをローカルにインストールして、オンサイトと Bluemix の間にトンネルを構築します。Secure Gateway サービスを介して REST API が Bluemix に公開されたら、API Management サービスによってこの REST API を管理し、カスタム・サービスとして Bluemix に公開します。そして最後に、このカスタム・サービスを他の Bluemix サービスと同じように呼び出すアプリを作成します。このプロセスをよく理解するには、以下の図を参考にすることができます。

私たちが作成する非常に単純な REST API サービスは、Node.js でインベントリー・データを照会するためのサービスです。このチュートリアルでは、このサービスの実装については詳しく説明しませんが、ソース・コードの apimanrest/app.js を見ると、その詳細がわかります。

Secure Gateway クライアントをインストールするには Docker 環境を準備する必要があります。当然のことながら、Docker 環境から REST API サービスにアクセスできなければ、サービスを Bluemix に公開することはできません。REST API サービスと Docker 環境を別々のホストにインストールすることもできますが、この例では簡単のため、両方とも同じホスト上にデプロイします。ホストとして使用する Ubuntu Linux 14.04 (64bit) 仮想マシンはインターネットにアクセスすることはできますが、パブリック IP アドレスは割り当てられていません。

サンプル REST API サービスをセットアップする

サンプル REST API サービスのソース・コードをフォークして、このサービスをローカルで実行します。

ステップ 1. サンプル REST API サービスをセットアップする

  1. ローカル・ホストでコンソールを開きます。
  2. Node.js、npm、git の各パッケージがまだインストールされていない場合はインストールします。
    sudo apt-get install nodejs npm git
  3. git を使用して REST API ソースをローカル・ホストにフォークし、npm を使用して、参照されている関連パッケージをインストールした後、node.js を使用してサービスを起動します。

    注: コンソールを閉じないでください。コンソールを閉じると、サービスがシャットダウンされてしまいます。

    git clone https://hub.jazz.net/git/chunbintang/apiman
    cd apiman/apimanrest
    npm install
    nodejs app.js
  4. server starting on 8080」というメッセージを受け取ります。これは、REST サービスがポート 8080 で正常に起動されたことを示しています。

    サンプル REST API の詳細はソース・コードapimanrest/app.js を見るとわかりますが、これは基本的に、都市ごとのインベントリー・データを JSON フォーマットで返すサービスです。http://<local_ip>:8080/inventory にアクセスすると、すべての都市のインベントリー・データが返されます。一方、http://<local_ip>:8080/inventory/<city> にアクセスすると、特定の都市のインベントリー・データが返されます。ここで、<local_ip> はローカル・ホストの IP アドレスであり、この例では以下に示すように 192.168.190.132 となっています。<city> フィールドには、例として Shanghai (大/小文字が区別されます) が指定されています。

  5. Secure Gateway クライアントをインストールする Docker 環境を準備します。Docker 環境から REST API サービスにアクセスできなければ、このサービスを Bluemix に公開することはできません。REST API サービスと Docker 環境は別々のホストにインストールすることもできますが、この例では簡単のため、同じホスト上にデプロイします。

    同じローカル・ホスト上で別のコンソールを開きます。

  6. Docker のドキュメントに従って Docker 環境をインストールします。
    sudo apt-get install wget
    sudo wget -qO- https://get.docker.com/ | sh
  7. Docker が正常にインストールされて、Secure Gateway クライアントをインストールできる状態になっていることを確認します。
    sudo docker run hello-world

ステップ 2. Secure Gateway サービスを利用してオンサイトの REST API を Bluemix に公開する

このステップでは、ローカル REST API を Bluemix に公開できるようにするために、Secure Gateway サービスを利用して Bluemix とオンサイトの間にセキュア・トンネルを構築します。コードは一切必要ありません!

アプリを作成する

  1. Bluemix アカウントを使って Bluemix にログインします。
  2. 「DASHBOARD (ダッシュボード)で「CREATE APP (アプリの作成)」をクリックします。
  3. 「WEB」テンプレートを選択します。
  4. 出発点として「SDK for Node.js」を選択し、「CONTINUE (続行)」をクリックします。
  5. 「APP NAME (アプリ名)」フィールドに、アプリの名前を指定します。私のサンプル・アプリの名前は「apiman」です。「FINISH (完了)」をクリックして、アプリがステージングされるのを待ちます。

Secure Gateway サービスを追加する

  1. 作成した新規アプリを選択します。
  2. 「ADD A SERVICE OR API (サービスまたは API の追加)」をクリックします。
  3. 「Integration (統合)」サービスのセクションまでスクロールダウンして、「Secure Gateway」サービスを選択します。
  4. 「CREATE (作成)」をクリックします。アプリを再ステージングするよう促されたら、「RESTAGE (再ステージ)」をクリックします。

Secure Gateway コンソールを開く

  1. アプリを選択してから、左側のパネルで「Secure Gateway」をクリックします。
  2. 「ADD GATEWAY (ゲートウェイの追加)」をクリックし、任意の名前を入力します (サンプル・アプリには「inventorygateway」という名前を使用しています)。「CONNECT IT (接続)」をクリックします。
  3. 表示されている Docker コマンドを後で使用するためにコピーします。「I'M DONE (完了)」をクリックします。

Secure Gateway クライアントを起動する

  1. ローカル・ホストに再び戻ります。
  2. コピーした Docker コマンドを実行して Secure Gateway クライアントを起動します。docker run コマンドによって、Secure Gateway クライアントを実行するための独立したコンテナーが起動されます。これで、オンサイトと Bluemix の間にトンネルを構築できるようになります。「The secure Gateway tunnel is connected (セキュア・ゲートウェイ・トンネルが接続されました)」というメッセージが表示されることを確認してください。docker run コマンドの前に sudo を追加することもできます。docker run コマンドについての詳細は、Docker のドキュメントを参照してください。

    注:[ERROR] The response is code: ENOTFOUND, message: getaddrinfo」というエラーメッセージが表示された場合は、コンソールで「quit」と入力し、docker run コマンドに --net="host" パラメーターを追加してから (うまく行くことを祈って) 再実行してください。Docker のネットワーク設定についての詳細は、Docker のドキュメントを参照してください。

Secure Gateway コンソールを構成する

  1. Bluemix 上の Secure Gateway コンソールに戻って数秒待つと、ゲートウェイのステータスが「Enabled (有効)」に変わります。
  2. inventorygateway」(またはゲートウェイに付けた名前) をクリックしてから「ADD DESTINATION (宛先の追加)」をクリックし、宛先の名前 (この例では、「InventoryRestAPI」) を入力します。IP アドレスまたは完全修飾ドメイン名 (FQDN)、つまり REST API ホストのローカル IP アドレス (この例では 192.168.190.132) とポート (8080) を入力し、「HTTP」を選択してから、プラス (+) アイコンをクリックします。
  3. 新しく追加された宛先の情報 (i) アイコンをクリックします。ダイアログに表示される「Cloud Host : Port (クラウド・ホスト: ポート)」フィールドの値を後で使用するためにコピーします。
  4. これでオンサイトの REST API が Bluemix に正常に公開された状態になりました。REST API サービスをナビゲートするには、http://<cloud_host>:<port>/inventory または http://<cloud_host>:<port>/inventory/<city> にアクセスします。ここで、<cloud_host><port> は前のステップでコピーした値、<city> は照会対象の都市 (例えば、Shanghai) です。

    Secure Gateway サービスについて詳しく知りたい場合は、Bluemix の資料に豊富な情報が提供されています。

ステップ 3. API Management サービスを利用してカスタム・サービスを管理および公開する

ローカル REST API を Bluemix に公開した後は、API Management サービスを利用して、この REST API を管理し、Bluemix 上にカスタム・サービスとして公開します。このプロセスでも、コードは一切必要ありません。

API Management サービスを追加する

  1. Bluemix コンソールに戻ります。
  2. 「CATALOG (カタログ)」メニューを開き、「Integration (統合)」セクションまでスクロールして「API Management」を選択します。「CREATE (作成)」をクリックします。
  3. 「GO TO API MANAGER (API マネージャーに移動)」をクリックしてコンソールを開きます。

API を構成する

  1. 左側にある「API」アイコンをクリックします。「+ API」を展開して「Compose (作成)」をクリックします。
  2. 「Title (タイトル)」フィールドには「InventoryAPI」と入力し、「Base Path (基本パス)」フィールドには「/inventoryapi」と入力します。「Add (追加)」をクリックします。
  3. 新しく追加された「InventoryAPI」をクリックします。「+ Operation (+ 操作)」をクリックし、「Path (パス)」として「/inventory」を指定し、「POST」を削除してから「Add (追加)」をクリックします。
  4. 追加した操作を編集するために、鉛筆アイコンをクリックします。
  5. 「Implementation (実装)」>「Proxy (プロキシー)」の順にクリックし、「PROXY URL (プロキシー URL)」として、前にコピーした公開済み URL「http://<cloud_host>:<port>/inventory」を指定します。例えば、「http://cap-sg-prd-5.integration.ibmcloud.com:15129/inventory」と指定します。「Save (保存)」をクリックします。
  6. 「+ Operation (+ 操作)」をクリックし、「Path (パス)」として「/inventory/{city}」を指定し、「POST」を削除してから「Add (追加)」をクリックします。追加した操作を編集するために、鉛筆アイコンをクリックします。「Implementation (実装)」 > 「Proxy (プロキシー)」の順に選択し、「PROXY URL (プロキシー URL)」として、公開されている URL「http://<cloud_host>:<port>/inventory」を指定します。例えば、「http://cap-sg-prd-5.integration.ibmcloud.com:15129/inventory/{city}」と指定します。「Save (保存)」をクリックします。

プランを構成する

  1. 「Plans (プラン)」アイコン > 「+ Plan (+ プラン)」の順にクリックします。
  2. プランのタイトルとして「Basic Plan」と指定します。「Add (追加)」をクリックします。
  3. 新しく作成された「Basic Plan」をクリックします。「+ Operation (+ 操作)」をクリックします。
  4. InventoryAPI」から API を選択し、「Add (追加)」をクリックします。
  5. 「Save (保存)」をクリックします。「Stage (ステージ)」をクリックして、オプション・メニューから「Sandbox」を選択します。プランのステージングが完了するまで、数秒かかります。

管理を構成する

  1. 「Management (管理)」アイコンをクリックし、次に「Basic Plan」の歯車アイコンをクリックします。「Publish (公開)」を選択します。公開されるまで数秒かかります。
  2. サービスが公開されたことを通知するメッセージが表示されます。

Bluemix カタログでカスタム・サービスを確認する

  1. Bluemix コンソールに戻り、「CATALOG (カタログ)」をクリックします。「Custom APIs (カスタム API)」として分類された、「InventoryAPI」という名前のサービスが表示されるはずです。これが確認できれば、InventoryAPI が正常に Bluemix に公開されたことになります (ブラウザーでページを最新の表示に更新しないとサービスが表示されない場合があります)。

InventoryAPI サービスは、Bluemix 上の皆さんの組織に対して公開されます。API Management サービスについての詳細は、Bluemix の資料を参照してください。

ステップ 4. サンプル・アプリをデプロイして実行する

カスタム・サービスが公開されたら、そのカスタム・サービスを呼び出して結果を出力するサンプル・アプリを作成します。

ソース・コードに含まれている apimandemo/app.js ファイルが、このサンプル・アプリのメイン・クラスです。このクラスは VCAP 環境からカスタム API (InventoryAPI) の資格情報を読み取って照会を実行し、受け取った結果を出力します。

//------------------------------------------------------------------------------
// node.js demo application for APIMan
//------------------------------------------------------------------------------
 
var util = require('util'),
	url = require('url'),
	request = require('request'),
	express = require('express'),
	_ = require('underscore');
 
// cfenv provides access to your Cloud Foundry environment
// for more info, see: https://www.npmjs.com/package/cfenv
var cfenv = require('cfenv');
 
// create a new express server
var app = express();
 
// get the app environment from Cloud Foundry
var appEnv = cfenv.getAppEnv();
 
// Set up objects to talk to API Management
var inventoryAPICreds = appEnv.getServiceCreds(/InventoryAPI/i)
var apimUrl = url.parse(inventoryAPICreds.url);
apimUrl.query = {
	'client_id': inventoryAPICreds.client_id,
	'client_secret': inventoryAPICreds.client_secret
};
 
app.get('/', function(req, res) {
	
	// Make a request to get the inventory data
	var requestUrl = _.clone(apimUrl);
	
	requestUrl.pathname += '/inventory';
	
	console.log('Making request to: ' + url.format(requestUrl));
	
	request.get({
		url: url.format(requestUrl),
		json: true
	}, function(err, resp, body) {
		console.log(body);
		
		res.send({
			result: body,
			url: url.format(requestUrl)
		});
	});
	
});
 
app.get('/:city', function(req, res) {
	
	// Make a request to get the inventory data for one city
	var requestUrl = _.clone(apimUrl);
	
	requestUrl.pathname += '/inventory/';
	requestUrl.pathname += req.params.city;
	
	console.log('Making request to: ' + url.format(requestUrl));
	
	request.get({
		url: url.format(requestUrl),
		json: true
	}, function(err, resp, body) {
		console.log(body);
		
		res.send({
			result: body,
			url: url.format(requestUrl)
		});
	});
	
});
 
// start server on the specified port and binding host
app.listen(appEnv.port, appEnv.bind, function() {
 
	// print a message when the server starts listening
 console.log("server starting on " + appEnv.url);
});

ダッシュボード内でサンプル・アプリを作成する

  1. 「CATALOG (カタログ)」メニューを開きます。
  2. 「Runtimes (ランタイム)」セクションにある「SDK for Node.js」をクリックします。
  3. 「APP NAME (アプリ名)」フィールドに、テスト・アプリの名前を指定します。私は「apimandemo」という名前を指定しています。
  4. 「CREATE (作成)」をクリックして、アプリのステージングが完了するまで待ちます。

カスタム・サービスを追加する

  1. 「DASHBOARD (ダッシュボード)」で、作成したアプリをクリックします。
  2. 「ADD A SERVICE OR API (サービスまたは API の追加)」をクリックします。
  3. 「Custom API (カスタム API)」セクションにある「InventoryAPI」を選択します。
  4. 「CREATE (作成)」をクリックします。アプリを再ステージングするよう促されたら、「RESTAGE (再ステージ)」をクリックします。
  5. 左側のパネルで「Environment Variables (環境変数)」をクリックします。InventoryAPI サービスの資格情報が表示されるので、その情報をサンプル・アプリでの認証に使用します。

サンプル・アプリを Bluemix にデプロイする

  1. ソース・コードを次の手順に従って処理します。
    1. 「FORK PROJECT (プロジェクトのフォーク)」をクリックします。
    2. ログインするよう促されたら、IBM ID を使用して DevOps Services にログインします。
    3. プロジェクト名を入力するよう要求されたら、プロジェクトの名前を入力します。
    4. 「Make this a Bluemix Project (Bluemix プロジェクトにする)」チェック・ボックスが選択されていること、Bluemix の「Region (地域)」、「Organization (組織)」、「Space (スペース)」のフィールドに正しい値が設定されていることを確認してから、「CREATE (作成)」をクリックしてリポジトリーをフォークします。
  2. 新しく作成されたプロジェクトのメニュー・バーに表示されたプロジェクト名をクリックし、次に鉛筆アイコンをクリックして起動構成を編集します。
  3. 「Application Name (アプリケーション名)」フィールドと「Host (ホスト)」フィールドを Bluemix アプリの名前で更新します。その他すべてのフィールドが正しく設定されていることを確認してから、「Save (保存)」をクリックします。
  4. 矢印アイコンをクリックして、アプリをデプロイします。1、2 分待ってから、デプロイの状況を確認します。

cf コマンド・ライン・インターフェースを使用する (オプション)

このプロジェクトをローカルにデプロイする際に cf コマンド・ライン・インターフェースを使用したいという場合は、以下の手順に従います。

  1. ソース・コードをローカルにフォークします。
  2. manifest.yml ファイルを次のように更新します。<your_app_name> を、作成した Bluemix アプリの名前に変更します。デフォルトのメモリー容量は 128 MB ですが、必要に応じて変更することができます。
    ---
    applications:
    - name: <your_app_name> 
    memory: 128M
    instances: 1
    host: <your_app_name> 
    path: ./apimandemo
  3. 以下の cf コマンドを実行してアプリをデプロイします。
    cf push

サンプル・アプリを実行する

  1. http://<your_sample_app>.mybluemix.net を指定して Web アプリにアクセスします (この例の場合、http://apimandemo.mybluemix.net/)。すると、すべての都市のインベントリー・データが表示されます。
  2. http://<your_sample_app>.mybluemix.net/<city> を指定して特定の都市のインベントリー・データにアクセスすることもできます (この例の場合、http://apimandemo.mybluemix.net/Shanghai)。

まとめ

このチュートリアルでは、オンサイトのサンプル REST API サービスを出発点に、Secure Gateway サービスを利用してサンプル REST API サービスを Bluemix に公開する方法、API Management サービスを利用して新規カスタム・サービスとして公開する方法、そして最後に検証用のサンプル・アプリを作成する方法を説明しました。これで、オンサイト環境と Bluemix との間の壁を乗り越えて、いかに簡単にこれらを接続することができるかを理解できたので、今後の開発に思う存分活かしてください!


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


関連トピック


コメント

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cloud computing, Web development
ArticleID=1025563
ArticleTitle=Secure Gateway サービスと API Management サービスを利用してオンサイトの REST API を Bluemix に公開する
publish-date=01212016