Node-REDとSecure Gatewayを使って、
IBM i のRPGプログラムをIBM Cloudに連携する
本稿は、i Magazine 2018年 Summer号に掲載した「AI、クラウド、IoTと連携させるILE RPGのデザインパターン」で、最初に紹介した「データ連携」に関する実サンプルを交えた解説記事である。2016~2017年にIBMのdeveloperWorksで英語記事として公開されたが、IBM Cloudのブランディング名称の統一に伴い、画面表示などを修正したうえで2018年3月に再掲した。
IBM iのRESTサービス機能を中心に、クラウド・アプリケーションで利用されているNode.jsやNode-RED、API Connectとの統合サンプルを示し、基幹システムであるIBM iとクラウドの融合の概念を広めるために作成した。執筆当時、ワールドワイドで見てもIBM iに関するこのような統合型サンプルの解説記事は見当たらず、developer Works編集部門も記事の必要性を認め、掲載を決めた経緯がある。
掲載から1年以上が経過しているが、解説されている機能やサンプルは今なお有効であり、「これからIBM iがクラウドと融合する場面が多くなる」と予想される現在、さらに重要になると考えている。
ワールドワイド向けに作成したコンテンツではあるが、日本の環境でも当然有効であり、積極的に参照してほしい。日本のIBM iユーザーのクラウド化に貢献できることを願って、執筆者グループ一同より本稿をお届けする。
RESTサービスを軸にクラウドとIBM iを連携
現在、IBM Cloud上では多数のクラウド・アプリケーションが稼働し、多彩なSoEデータが格納されている。一方、財務データなど従来のミッションクリティカルなシステムで運用される基幹データは、ビジネス活動に直結している。
企業のバックエンドシステム(IBM iやIBM Zなど)に存在するそうしたデータは、SoRデータと呼ばれる。クラウド・アプリケーションの観点から見れば、SoRとSoEを連携するデータインテグレーションは、今後のビジネスを成功に導く鍵と言える。そのため多くの技術要素が検討され、インターネット上に実装されてきた。
IBM iはビジネストランザクションを処理する強力な機能を備えており、ユーザーが開発したシステムの多くは今も稼働している。さらにIBM iでは、PCMLを使ってRPGで書かれたWebサービスを呼び出せるなど、多彩なWebアクセス機能を提供する。つまりIBM iでは、独自のWebサービスを簡単に実装できるのだ。
そこで本稿では、IBM Cloud上のアプリケーションからILE RPGのRESTサービスを呼び出す手法に焦点を当てる。
IBM Cloudなどのクラウド環境では、Webもしくはモバイルネイティブなアプリケーションを迅速に開発し、デプロイできる。IBM Cloudには、さまざまなミドルウェア・アプリケーションがすぐに使える状態で準備されているからだ。
本稿ではそのなかから、Webアプリケーション構築ツールとしてNode-REDを使用する。Node-REDはもともとはIBMが開発したオープンソース・ソフトウェアであり、GUIとドローイングツールを使用して、コード作成を最小限に抑えつつ、Webアプリケーションを構築できる。高速開発&デプロイに最適なツールである。
またサーバー側のアプリケーション・メソッドは、RESTサービスを基本とする。これは、IBM i に同梱される統合Webサービス・サーバーによって実現され、RPGをWebサービスとしてPCML経由で呼び出せる。この機能を使用するには、PCMLで呼び出し可能なRPGプログラムを開発する必要がある。WebサービスやRESTインターフェースのコード記述は不要である。
統合Webサービス・サーバーでは、コードと定義を自動的に生成できる。Node-RED自体は、バックエンドにあるWebサービスをダイレクトに呼び出す。IBM Cloud上のNode-REDアプリケーションは、RESTサービスの呼び出しをリクエストし、オンプレミス上で稼働するIBM iのRPGプログラムを実行する。IBM Cloudとオンプレミス環境にあるIBM i との接続は、IBM Cloudで提供されている「IBM Secure Gateway」で実現する。
本稿ではこれらを利用して、クラウドとIBM iを連携させるデザインパターンを解説しよう。
統合Webサービス・サーバーで
IBM iのRESTサービスを呼び出す
前述したように、統合Webサービス・サーバーはSOAPやRESTを使用したWebサービスとして、ILEプログラムおよびサービス・プログラムをデプロイする機能を備えている。
RPGやCOBOLなどのILE言語は、長年にわたり基幹アプリケーションを構築してきた。統合Webサービス・サーバーを使用することで、慣れ親しんだILEプログラムの基幹データに対して、5250アプリケーションとWebアプリケーションの双方から同時アクセスが可能になる。さらに、それをREST Webサービスとしてデプロイすることで、IBM CloudまたはSoEアプリケーションとの連携を容易に実現できる。
ここではサンプルとして、「Building a REST service with integrated web services server for IBM i, Part 3」で紹介されている学生登録アプリケーションを使用して、IBM Cloud上のNode-REDアプリケーションとの連携方法を紹介する。
サンプル環境
図表1は、サンプル環境の設定イメージである。
手順を紹介する前に、ILE RPGで開発され、オンプレミス上のIBM iで稼働している学生情報アプリケーションを準備する。
このアプリケーションを、統合Webサービス・サーバー上のRESTサービスとして導入する。オンプレミスで稼働するこのREST Webサービスへ IBM Cloudからアクセスするには、Secure Gatewayを構成する必要がある。
このアプリケーションを、統合Webサービス・サーバー上のRESTサービスとして導入する。オンプレミスで稼働するこのREST Webサービスへ IBM Cloudからアクセスするには、Secure Gatewayを構成する必要がある。
サンプルである学生検索アプリケーションを、IBM Cloud上のNode-REDにデプロイする必要があると仮定しよう。学生検索アプリケーションはHTTPSを使用して、IBM i上にあるRESTベースのWebサービスを呼び出す。このアプリケーションは基幹データへのREST呼び出しを実行し、入力のためのユーザーインターフェースを備える。
以下の流れで、手順を紹介する。
(1) 統合Webサービス・サーバー上にREST Webサービスを構成する
(2) Secure Gatewayをセットアップする
(3) Node-REDアプリケーションから統合Webサービス・サーバーのREST APIを呼び出す。
統合Webサービス・サーバー上に
REST Webサービスを構成する
前述した「Building a REST service with integrated web services server for IBM i, Part 3」のILE RPGプログラムを使用し、以下の手順に従って、IBM i上でRESTベースのWebサービスを構成する。その設定には、HTTPSの呼び出しを可能にするいくつかの手順を追加する。
HTTPSを使用できるように統合Webサービス・サーバーを構成する前に、ローカル認証局(CA)と*SYSTEM 証明書ストアをDigital Certificate Manager(DCM)を使ってセットアップする必要がある。
統合Webサービス・サーバーで
HTTPサーバーを設定する
HTTPS接続を使えるように統合Webサービス・サーバーを設定するには、「How To Enable an IBM Integrated Web Services (IWS)Server for Secure Socket Layer (SSL) / Transport Layer Security (TLS)」を参照する。
上記のサイトでは、SSLポートの設定画面でSSL以外のポートを無効にするよう推奨している。しかし本稿では、アクセスを検証するためにはHTTPとHTTPSのどちらも有効にしたまま構成する。したがって、ウィザード上の「leave non-SSL port enabled while still configuring SSL port under Disable non-SSL port?」では、「Yes」ではなく「No」を選択する。
統合Webサービス・サーバーのSSLポートを設定したあと、Web Administration for i (またはHTTP Admin)の左のナビゲーションビューに表示されるToolsセクションの「Display Configuration File」で設定を確認する。図表2のように、構成ファイルにSSL設定が追加されている。
Secure GatewayとのHTTPS接続の
証明書をダウンロードする
次のステップではSecure Gatewayを構成して、IBM CloudからオンプレミスのIBM iへ接続する。ただその前に、HTTPS接続を有効にするため、「How To Enable an IBM Integrated Web Services (IWS)Server for Secure Socket Layer(SSL)/ Transport Layer Security (TLS)」で作成した証明書をインポートする必要がある。
まずはブラウザから証明書をダウンロードする。ここでは、Mozilla FirefoxをWebブラウザとして使用しているが、Webブラウザによっては手順や結果が異なる場合があるので注意が必要である。
(1) ブラウザから以下のURLにアクセスし、JSON形式の学生情報を取得できることを確認する。
(2) 右クリックし、「View Page Info」をクリックする。
(3) 「Page Info」ウインドウで、「Security」タブをクリックする。さらに「Website Identity」で、「View Certificte」をクリックする。
(4) 「Certificate Viewer」ウインドウの「Details」タブで、「Export」ボタンをクリックする。ファイルタイプとして、「X.509Certificate (PEM)(*.crt;*.pem)」を選択し、クライアントPCに証明書をダウンロードする。
これで証明書を使って、HTTPS接続する準備が整った。
Secure Gatewayをセットアップする
次に、IBM Cloud上にSecure Gatewayをセットアップする。Secure GatewayはIBM Cloud上のサービスで、IBM Cloudとオンプレミス間に安全なトンネルを作成する。このサービスを使用するには、Secure Gateway Clientをオンプレミス側のシステムにダウンロードする必要がある。
ここでは、社内にあるIBM iにアクセスできるよう、ローカルPCにSecure Gateway Clientを構成する。下記の手順に従って、Secure Gatewayを設定する。
(1) ブラウザで、IBM Cloudポータルにアクセスする。すでにアカウントのある場合は、「Log In」をクリックし、IBM IDでログインする。IBM Cloudを初めて利用する場合は、「Sign Up」をクリックすると、無料のトライアル(ライト・アカウント)にサインアップできる。
(2) IBM Cloudにログインすると、ダッシュボードが表示される。Secure Gatewayを設定するには、バナー上部の「Catalog」をクリックし、Catalogページの「Integrate」カテゴリにある「Secure Gateway」をクリックする。
(3) 「Secure Gateway」ページの下部にある「Create」をクリックして、サービスを作成する。ここからゲートウェイを設定する。
(4) ページ中央にある「Add Gateway」をクリックすると、「Add Gateway」プロンプトが表示される。ゲートウェイサービス名を入力し、「Add Gateway」をクリックする。
(5) ゲートウェイが作成され、Secure Gatewayのダッシュボードが表示される。Secure Gateway Clientを設定するには、ダッシュボードの一番下までスクロールし、「Client」タブを、次に「Connect Client」をクリックする。
(6) ウィザードで、この新しいゲートウェイをどのように接続するかを選択する。オンプレミスのゲートウェイクライアントとしてローカルのWindows PCを使用するので、「IBM Installer」を選択し、「Software Installers」リストからWindowsの横にある「download」リンクをクリックする。そして使用している端末に、インストーラを保管する。
(7) ダウンロードしたEXEファイルを実行して、Secure Gateway Clientをインストールする。ウィザードでは、Secure Gateway ClientをWindowsサービスとして実行するかどうかを選択できる。WindowsサーバーをSecure Gateway Clientとして使用する場合は、このサービスをWindowsサービスとして実行するよう推奨する(ここではローカルPCにインストールするため、「Please check this option if you would like the Secure Gateway Client to run as a service and restart automatically」のチェックボックスをオフにする)。
(8) ウィザードの次のページに、ゲートウェイIDとセキュリティトークンを入力する。この情報は、インストーラをダウンロードしたWebページで確認できる。そのWebページから値をコピーし、ウィザードにペーストする。この例では、アクセス制御リスト(ACL)およびログレベルフィールドは空白のままにする。「Next」をクリックする(図表3)。
(9) 次のページで「Yes」を選択してクライアントGUIを使用すると、クライアントのパスワードとポートを設定できる。ここでは、デフォルト値を保持して「Install」をクリックする。クライアントのインストールが開始される。
(10) 「Completed」と表示されたら、「Close」をクリックしてウィザードを終了する。これで、クライアントがインストールされる。
(11) IBM Cloudでゲートウェイサービスをセットアップする。インストーラをダウンロードしたWebページを閉じる。接続先を追加するには、「Destinations」タブで「+」をクリックする。
(12) 接続先を追加するウィザードが起動する。ここでは、呼び出す対象であるIBM i上のRESTベースのWebサービスがオンプレミスで稼働しているので、「Where is your resource located」で「On-Premise」を選択し、「Next」 をクリックする。
(13) 2ページ目の画面で、REST Webサービスをホスティングする統合Webサービス・サーバーのホスト名とポート番号を入力し、「Next」をクリックする。
(14) 3ページ目の画面で、接続先への接続に使用するプロトコルを指定する。接続先へプロトコルアクセスする場合は通常、相互認証用の「Mutual Auth HTTPS」を選択する。しかしここではシンプルなHTTPSを選択し、「Next」をクリックする。
(15) 接続先で認証を使用するために「Destination-Side」を選択し 、「UPLOAD CERTIFICATES」をクリックする。
(16) アップロードウインドウで、以前にダウンロードした証明書ファイル(*.crt)を選択し、「Open」をクリックする。証明書が図表4のように表示されていることを確認し、「Next」をクリックする。
(17) 接続するIPアドレスの範囲を指定する。ここではデフォルト値のままにして、「Next」をクリックする。接続先の名前を入力したら、「Add Destination」をクリックする。
(18) 作成したばかりの接続先が、図表5のように「Destinations」に表示されていることを確認する。これでSecure Gateway Serverの準備が整った。
(19) ローカルPCからアクセスできるかどうかを見てみよう。ローカルPCで、「Start」 →「All Programs」→「IBM」→「Secure Gateway Client 」を選択し、「Run it as administrator」をクリックする。
(20) Secure Gateway Clientの起動時に、構成ファイル「securegw_service.config」を使用するかどうかを設定する。クライアントをインストールしている際に入力したゲートウェイIDに関する情報は、構成ファイルに書き込まれているので、そのまま「y」をクリックし、「Enter」を押す。
(21) Secure Gateway Client のGUIをブラウザで開く。「View Logs」をクリックする(図表6)。
(22) Secure Gatewayトンネルが、図表7のように接続されていることをログで確認する。ページの左上にある「Back」をクリックする。
(23) Secure Gateway Clientから統合Webサービス・サーバーに、HTTPSアクセス許可を追加する。「View Logs」の横にある「AccessControl List」をクリックする。
(24) 「AccessControl List Management」ページの「Allows access」下にある統合Webサービス・サーバーのホスト名とHTTPSポート番号を入力し、「+」ボタンを押す(図表8)。
(25) 入力した情報が「Allows access」の下に表示されていることを確認する。上部の「Back」をクリックし、Secure Gateway Clientのトップページに戻る。これで、Secure Gateway Clientの設定が終了した。
(26) Secure Gateway Serviceの詳細ページに戻り、F5キーを押してページを更新し、作成したゲートウェイサービスをクリックする。
(27) Secure Gatewayの接続先一覧が表示される。統合Webサービス・サーバーのHTTPSアクセスである接続先のページ下部の「Settings」アイコンをクリックする(図表9)。
(28) ここで、追加した接続先の詳細を確認できる(図表10)。「Cloud Host:Port」は、IBM Cloudからアクセスするホスト名およびポートの詳細を指す。このアドレスを使用するとSecure Gateway経由で、オンプレミスの接続先に透過的にアクセスできる。このアドレスは、あとでNode-REDアプリケーションをデプロイするときに必要となる。
これで、ローカルPC上で動作するIBM CloudおよびSecure Gateway ClientにSecure Gateway Serverが正常に接続した。
Node-REDアプリケーションから
統合WebサービスのREST APIを呼び出す
最後に、オンプレミスのIBM i上で稼働する統合Webサービス・サーバーのAPIに、Secure Gateway経由で、IBM Cloud上のNode-REDアプリケーションからアクセスする。
Node-REDの設定
IBM Cloud上でNode-REDを構成するには、以下のステップを実行する。
(1) IBM Cloudのダッシュボードで、「Catalog」をクリックする。
(2) 「Search」フィールドにNode-REDと入力する。Boilerplatesで「Node-RED Starter」をクリックする。
(3) 「Create Foundry App」のページをスクロールして、アプリ名を入力し、その他の項目はデフォルト値をそのまま採用する。入力したアプリケーション名は、アクセスするデフォルトのホスト名になる。必要に応じて、ホスト名を変更できる。次に、「Create」をクリックする。アプリケーション名はIBM Cloud環境内で一意である必要がある。そのため場合によっては、エラー・メッセージが表示される。その際は、別のアプリケーション名を入力して、「Create」をクリックする。
(4) アプリケーションが作成されると、新しいNode-REDアプリケーションが設定され、起動される。しばらく待つ。もしくはF5キーを押して、アプリケーションの状態が「Running」に変わるのを確認する。
Node-REDのフローエディタによる
サンプルアプリケーションの作成
Node-REDには、ノードをパレットからキャンバスにドラッグ&ドロップして接続する「フローエディタ」というツールがある。ここではNode-REDのフローエディタを使用して、サンプルアプリケーションを作成する。
(1) Node-REDアプリケーションページのステータス「Running」の横にある「Visit App URL」をクリックする。
(2) WebページのNode-REDで、「Go to your Node-RED flow editor」をクリックする。
(3) フローエディタがブラウザで起動する。JSON形式で記述されたNode-REDフローをインポート/エクスポートする。サンプルアプリケーションを含む「node-red-dw-sample-yohichin-flow.json」という添付サンプルをダウンロードし、インポートする。フローエディタの右上にある「Import」→「Clipboard」をクリックする(図表11)。
(4) 前述のファイルからすべてのスクリプトをコピーし、「Import」をクリックする(図表12)。
インポートされたフローは、大きく2つある。1つは、https://<your-node-red-app-host-name>.mybluemix.net/welcome にアクセスして、最初のWebページを表示すること。もう1つは、最初のページから学生IDを取得し、そのデータをSecure Gateway経由でIBM i上のRESTベースのWebサービスに渡すことである。REST Webサービスは受信したIDをキーとして学生情報を照会し、その結果をWebページに返す。
(5) 「Invoking ILE RPG REST API」のノードをダブルクリックする。これは、Secure Gatewayを経由し、RESTで統合Webサービス・サーバーを呼び出すロジックである(図表13)。
(6) 「edit http request node」のページが表示される。ここでは、getByIDというREST API を使用して、1つの学生IDを照会する。そこでMethodパラメータにGETを選択する。URLには、Secure Gatewayをセットアップした際のホスト名とポート番号を使用する。Webページから取得した学生IDを指定する必要があるので、URLをhttps:// <sg-host-name>:<port-number>/web/ services/students/{{payload.studentID }}とする。この<sg-host-name>と<port number>には、以前に設定したSecure Gateway Destinationのホスト名とポート番号を入れる。REST APIから取得したデータはJSON形式になるので、Returnパラメータには、解析されたJSONオブジェクトを選択する。図表14のように必要な情報をすべて設定したら、「Done」をクリックする。
(7) アプリケーションをランタイムにデプロイするには、右上の「Deploy」の横にある下向き矢印、そして「Full」をクリックする。次に「Deploy」をクリックして、アプリケーションをデプロイする(図表15)。
(8) デプロイが完了すると、「Successfully deployed」というメッセージがページの上部に表示される。また、各ノードの横に表示される青い点はオフになる。
これで、アプリケーションにアクセスする準備が整った。
サンプルアプリケーションの実行
以下の手順で、サンプルアプリケーションを実行する。
(1) ブラウザから以下にアクセスして、Node-REDで設定された最初のページが表示されることを確認する。<your-node-red-app-host-name>は、アプリケーション名もしくはNode-REDの作成時に指定したホスト名に変更する。
(2) ここで学生ID(たとえば826M660CF)を入力し、「Submit」をクリックする(図表16)。
送信時に最初のページで入力された学生IDが、getByID APIに渡される。このAPIは、Secure Gatewayを使用したオンプレミスのIBM i上で稼働するRESTベースのWebサービスで設定されている。
(3) 指定した学生IDに基づき学生情報が返される(図表17)。
IBM iとIBM Cloud に関する考察
本稿では統合Webサービス・サーバーを使用して、IBM Cloud上のアプリケーションからILE RPGへ簡単にアクセスする方法を解説した。
IBM Cloud上のNode-REDアプリケーションはインターネット上で稼働しているが、Secure Gatewayを使用すると、オンプレミスのIBM i上に蓄積された基幹データをNode-REDアプリケーションから簡単に取得できる。ただしこうしたメリットを享受する場合は、データセキュリティ手法を慎重に検討する必要がある。
本稿では、オンプレミスで稼働するILE RPGのREST Webサービスへ安全にアクセスするために、Secure GatewayとHTTPSプロトコルを使用している。HTTPSは、接続ルート内のデータの機密性を保持できる。セキュリティの観点では、オンプレミスの統合Webサービス・サーバーにデプロイしたILE RPGのREST Webサービスを誰が使用し、誰がアクセス制御を実装するかといった点も考慮する必要がある。
こうした考慮点をREST Webサービスで解決する製品として、「IBM API Connect」がある。API Connectは、REST Webサービスへの認証といったセキュリティ設定をサポートする。Node-REDアプリケーションと同様に、API ConnectサービスはIBM Cloudから利用できる。
API Connectを使用する場合は、ILE RPGのREST WebサービスをREST APIとして登録する。API ConnectにAPIを登録するには通常、Swaggerファイルを使用する(図表18)。Swaggerファイルは、APIの設定を定義するJSONファイルである。
ILE RPGのREST WebサービスでSwaggerファイルを生成する機能は、i 7.1用のHTTP PTFグループ・レベル44、i 7.2用のレベル18、i 7.3用のレベル5の適用により使用できる。これは、ILE RPGのREST Webサービス展開時にAPI Connectを活用するための大きな拡張である。Swagger ファイルの自動生成機能を利用すれば、ILE RPG のREST WebサービスをAPI Connectにインポートできるからだ。
以上本稿では、Webもしくはモバイルネイティブなアプリケーションのデプロイに向けたIBM iおよびIBM Cloudの機能について解説した。Node-REDとのプロセス統合を設計する方法、そしてIBM iのRPGがクラウドサービスに向けてどのように機能を拡張しているかについて説明した。IBM iとIBM Cloudは、クラウド時代に向けて前進し続けているのである。
著者|
箕手 幸宏氏
日本アイ・ビー・エム システムズ・エンジニアリング株式会社
アセット企画
コンサルティングITスペシャリスト
1988年、日本IBM入社。AS/400とともに大規模ユーザー向けのシステムインテグレーション、技術支援などに従事。2003年に日本アイ・ビー・エム システムズ・エンジニアリングに出向し、引き続きIBM iを中心とした技術支援を実施。最近はクラウド、オートメーションなどOSSを利用したハイブリッドソリューションにも力を入れる。
・・・・・・・・
中村 陽一氏
日本アイ・ビー・エム システムズ・エンジニアリング株式会社
アセット企画
アドバイザリーITスペシャリスト
アセット企画
アドバイザリーITスペシャリスト
2003年、日本アイ・ビー・エム システムズ・エンジニアリング入社。2004年よりIBM iを主たる技術エリアとして活動。2010年に日本IBMへ出向し、提案局面における技術支援を担当。2013年にISEへ帰任後は、主としてプロジェクト実施局面における技術支援を担当し、現在に至る。
・・・・・・・・
藤村 奈穂氏
日本アイ・ビー・エム システムズ・エンジニアリング株式会社
アセット企画
アドバイザリーITスペシャリスト
アセット企画
アドバイザリーITスペシャリスト
日本アイ・ビー・エム システムズ・エンジニアリング入社以来、15年以上、IBM iのテクニカル・サポートに従事。IBM iにおけるアプリケーション開発、Webインフラなどを中心としたバックエンド・サポートやプロジェクトに参画し、現在に至る。
[i Magazine 2018 Autumn掲載]