IBM App ConnectのiPaaS機能を活用してMQ接続を効率的に開発


# はじめに

IBM MQは今年30周年を迎える歴史のある製品です。現在も多くの企業の基幹システム間の連携で活躍しています。近年は、クラウドでの活用例も増えてきており、MQ Client/Serverの連携だけでなく、ほかのサービスと効率的に接続する要望も増えてきています。この記事では、App Connect（iPaaS）機能を活用して、MQとの連携を効率的に実現するための方法をご紹介します。今回は以下のようなイメージ図の開発をご紹介します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/cfe67da8-29b3-e7d0-a2c2-dd6619084c09.png)



# 1. MQインターフェースのAPI化開発

## 1.0 事前準備 - MQ on IBM Cloud環境

今回は、IBM Cloudで提供されているMQフリープランのインスタンスを登録します。
インスタンス画面からキュー・マネージャーを登録します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/15f86b4f-c65e-335a-bc3e-a7880df696b8.png)

アプリケーション資格情報を登録します。
この情報は後ほどApp Connectから接続する際に使用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/fcb85838-a9bd-cdd5-1d80-09e224f72bec.png)

キューマネージャーを選択して、エンドポイント情報を確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/451dfcca-fb02-4f0f-5abb-c46485b17a1e.png)


## 1.1 App Connectコンソール接続

以下がApp Connect Designaer(iPaaS)のコンソール画面です。今回は、Cloud Pak for Integration環境（v12.0.7）を使用しています。IBM CloudでもApp Connect機能は提供されていますので、そちらをご活用いただくことも可能です（ただし、現在は非推奨サービスとなってしまっています）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/1acd3d5d-f67e-7705-6e18-616c91744034.png)



## 1.2 MQアダプターを使用した接続登録

この機能では、様々なサービスとの連携のためのアダプター機能を提供しています。
今回は、IBM MQアダプターを使用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/f3b4b8f3-3ea7-cfcc-3ade-a9bc0c52bf47.png)

手順1.0で確認・登録した情報を設定していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/8cf4d36b-8db6-2620-52ca-de6a7fa0763c.png)

認証に成功すると、以下のようにアカウントとして登録されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/af3e6a59-4bdd-fad8-a301-1a9a267a6917.png)

## 1.3 API flow開発 - エンドポイント

ホーム画面から「Create flows for an API」を選択して、APIフローを開発します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/d6894b3f-0ff1-a563-0112-05cba78e8746.png)

以下のようなイメージでAPIの名前（api-mq）と、データモデル（user）、プロパティー（id,name,job）を設定していきます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/87a927c1-77a6-6bca-3e19-5eb59a7686e4.png)

次に「Operations」タブを選択して、APIの操作を登録していきます。
ここでは、GETとPOSTの2種類の操作を設定していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/184bfd76-0f09-35e8-ed95-80961c1961f6.png)


## 1.4.1 API flow開発 - POSTフロー

次に2種類の操作に対するフローを開発していきます。
POSTを選択すると、以下のようにフロー開発画面に遷移します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/c2625b7f-f5bf-e9d6-53bd-6e004042751e.png)

事前に登録したカタログサービスを組み合わせてLowCodeでフロー開発を実現できます。先ほど登録した「IBM MQ」の「Put message to a queue」を選択します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/9b1b7b98-ec0e-b1ed-45bf-2c3dedb434b8.png)

この処理でどのような操作を実施するか設定します。以下の例では、「DEV.QUEUE.1」というキューに対して、要求電文をPUTする処理を実施します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/bb26bead-7589-2eb1-e296-1d40f3a64edd.png)


## 1.4.2 API flow開発 - GETフロー

同様の手順でGETのフローも設定していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/fe92bb07-d62c-cbec-dd94-fe1a6fbeee44.png)

接続アダプターは同じく「IBM MQ」ですが、処理内容として「Get message from a queue」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/eff0880c-46d3-ffb5-ae24-11f84c320361.png)

このアダプターで取得したデータをJSON Parserを使用してフロー内で認識できるオブジェクトに変換します。
対象データとなるJSON Inputは、IBM MQの「Message payload」をマッピングします。Output SchemaとしてExample JSONで想定されるデータをもとに「Generate Schema」でデータ形式を認識できるようにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/d107e4d3-da35-c5d2-2ed4-0c7f308afac2.png)

最後のResponseにて、Response headerとResponse bodyを設定します。
Response bodyには最初に設定したデータモデルのプロパティーが設定されていますので、JSON Parserで認識した各データをマッピングします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/47280aca-a80a-7026-1d80-e38595fe03b3.png)

以上で開発は完了です。右上のDoneを押下して、API Designer画面に戻ります。
以下のように右上のStopボタンを押下してフローを「Started」にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/18e21366-cd30-8fe4-985b-a4ac203a67b8.png)


## 1.5 API動作確認

「Test」タブから動作確認を実施できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/b32ea20f-5ab7-e31e-3b0a-c94f3a59a339.png)

この画面からAPIを実施できます。
以下は、「POST /user」の実施例です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/cbc07326-910f-5f57-22d3-4ca31551b0b5.png)

以下は、「GET /user」の実施例です。
先ほど登録されたメッセージを取得することができました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/1e42f5aa-faf4-d949-f456-5e2ed7394f00.png)


# 2. MQとCloudnatとのEvent連携開発

## 2.0 事前準備 - Cloudant on IBM Cloud環境

今回は、IBM Cloudで提供されているCloudantのフリープランのインスタンスを登録します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/51fb7594-c81f-d5a8-b281-b4bc2b50ac74.png)

また、App Connectから接続するためのサービス資格情報を登録しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/affa9a5f-9698-8f02-5e6c-019e07e889df.png)



## 2.1 Cloudantアダプターを使用した接続登録

カタログから「Cloudant」アダプターを接続します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/39bd3f29-b868-eac1-bf8e-373ae72c4234.png)

step 2.0で確認した資格情報を設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/71ad81b7-e3fe-2408-2457-8dccdaea11e0.png)

資格情報に問題がなければAccount1として登録されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/4bca923d-0d08-073e-aa94-03cf21fcf716.png)


## 2.2 Event flow開発

ホーム画面から「Create an event-driven flow」を選択して、APIフローを開発します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/8e0fccf4-c0d3-adbc-597d-4d1c9638ee15.png)


以下のようなフロー開発画面に遷移します。
起点となるEventを登録します。今回はIBM MQの「New message on a queue」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/bc6ed6a7-d868-8b43-ba71-cf025dde4e60.png)

以下のように設定することで、「DEV.QUEUE.1」にメッセージが新たに到着した際にフローが開始されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/8e381993-c1c4-73cd-1528-3acc01c6e87b.png)

IBM MQアダプターで取得したメッセージ情報を「JSON Parser」アダプターでフロー上で認識できる形式に変換します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/43b9dc69-eb8f-a242-748a-6ff9ff38c5e4.png)

IBM Cloudantアダプターの「Update or create document」を選択し、データベースへの更新設定を実施します。
以下の例では、「user-mgmt」データベースに対して、QueueメッセージからIDフィールドと合致するドキュメントを更新・登録する処理を実施しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/41322e42-32b8-b07b-17af-246e07c4dd86.png)

以上で開発は終了です。
右上のメニューからフローを開始します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/29989016-4f1b-114e-e583-46395d4a3168.png)


## 2.3 Event動作確認

step1で開発したAPIを使用してMQにメッセージを登録します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/b0600ec0-7d31-ac82-1fcc-eb35f07efcab.png)

登録後すぐに、Eventフローが動作して、「Cloudant」の「user-mgmt」にドキュメントが登録されることが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/067af788-e562-196d-ec38-8324b7ad539e.png)

同じIDで再度メッセージを送信すると、Cloudant側に更新が反映されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/9d0218ff-7d2d-baa5-374f-2d41adfbbac9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/124faf23-5f6c-fd7d-5b62-90548d54efbb.png)


# おわりに

この記事では、App ConnectのiPaaS機能を使用してMQとの接続を効率的に開発する方法を紹介いたしました。
同期的なAPIや、非同期的なEventでのMQ連携をiPaaS機能を活用することで、LowCodeで容易に実現することができます。
MQの活用ユースケースを広げる一助となりますので、ぜひご活用いただければと思います。