クラウド同士のシステム間連携

概要

クラウド同士のシステム間連携とは、即ち、API連携です。連携方法は大きくわけて3種類あります。

  1. もともと備わっている連携機能を使う場合

  2. iPaaSに分類されている連携ツールを使う場合

  3. 自分で連携機能を開発する場合

3つのうち、基本的には「1」と「2」を活用すべきで、どちらでもない場合に「3」に取り組むことになります。

もともと備わっている連携機能を使う場合

クラウドサービスの提供元が同じ会社の場合

情報共有システム

情報共有の仕組みは、あらゆる組織で必要とされ、シュンペーターのイノベーション理論の5類型で言えば、「オーガニゼーションイノベーション」の典型が、情報共有システムの導入です。

この場合の例として、Atlassianというオーストラリアのシドニーに本社を置く企業が提供するクラウドサービスを例にします。この資料は、Atlassian社のConfluence Cloud を使っています。同じAtlassian社が提供するJira Software Cloud と言われるタスク管理やプロジェクト管理を行うサービスと連携することで、企業や自治体、教育機関といった組織内の情報共有やシステム開発、業務進捗管理の効率化に役立ちます。

業務管理システム

代表的なものとして、https://jp.heroku.com/connect があります。クラウドサービスとして代表的な企業の1つであるセールスフォース社の提供する「Salesforce」と「Heroku」の連携例などが該当します。

Salesforceは、個人情報を扱う「SoR」領域のシステムを得意とする一方、Salesforceに載せることができないアプリケーションの環境として「Heroku」があります。

クラウドサービスの提供元が異なる会社の場合

Googleが提供する分析ツール「Looker Studio」における「データソース」のように、「Looker Studio」から見ればGoogle社以外が提供するデータソース(データベース等)は、提供元が異なる会社に見えます。Googleが提供する分析ツール「Looker Studio」で、AWSの「Aamzon Redshift」に接続するケースは、クラウドサービスの提供元が異なる会社の場合に合致します。Google社とAWS社は、クラウドサービスを提供する会社ですが、それぞれ別々の会社です。

<< クリックしてみよう。

iPaaSに分類されている連携ツールを使う場合

「iPaaS」を使って、クラウドサービス同士の連携や、オンプレミス環境とクラウドサービスの連携を行います。「iPaaS」を使う場合、目的に合わせて「iPaaS」を選ぶことが、あなたに求められます。「iPaaS」を選んでも実現できない場合は、実現できるようにバイパス、中継するプログラムを自分で開発することが求められることがあります。特に正規の職員や正社員として就職している場合は、業務命令として、自分で開発することになることさえあります。このあたり、契約社員や派遣社員と異なり、正規の職員や正社員として働いている場合は断れないので痛し痒しですね。

Microsoft Power Automateの場合

Microsoft Power Automate を使えるか確認

Microsoft Power Automateは、Microsoft 365 を契約している企業や大学の場合は、最も手軽な「iPaaS」と言えます。

<< こちらをクリックして、Microsoft Power Automateのサービスにアクセスしましょう。

Microsoft Power Automateのトレーニングを受講し、連携方法を習得

初めて使う場合は、下記のPower Atuomateの関連のオンライントレーニングを受講してからにしましょう。

関連資料

Node-REDの場合

IoTやAIではデファクトスタンダード(事実上の標準)ツールである「Node-RED(ノードレッド)」は、クラウドサービス間の連携も得意としています。

たとえば、日立製作所は、Node-REDをクラウドサービスとして提供し、自動運転制御に使えるようにしています。IoTは、Internet of Things の略称であり、クラウドコンピューティングを知らなければ、IoTを100%使うことが出来ません。

Node-RED環境の構築

Node-REDについて取り組む場合は、何はともあれ、Node-RED環境を用意します。 や があります。

連携例 : Airtable との連携

作ってみるもの

パブリッククラウド型SaaSの「Airtable」に、センサーの計測値をもとにしたお知らせを登録する仕組みを、Node-REDで作ってみましょう。

作成ポイント

作成するNode-REDのフロー

下図のようなフローをNode-RED上で作成します。

「airtable out」ノードのインストール

Node-REDの画面右上の「三」>>「パレットの管理」の順にクリックし、「ノードを追加」タブで、「node-red-contrib-airtable」を検索しインストールします。

AirtableでBaseを作成

AiratableのFreeプランを契約します。 << こちらにアクセス。

AirtableのFreeプランを契約後、Baseを作成します。https://airtable.com/ にアクセスし、画面左下の「Create a base」をクリックし、データベースを作成します。表形式の画面が表示されます。

「Untitled Base」と表示さているところをクリックし、名前を変更します。変更後、Enterキーを押すことで名前変更が完了します。

AirtableのBaseで、列を作成

表形式の画面で、「+」をクリックし、「Single line text」を選びます。

フィールド名に「deviceid」と入れ、「Create field」をクリックします。「deviceid」という列を作成します。この列には、センサー情報を送ったデバイス名が格納されます。

表形式の画面で、「+」をクリックし、「Created time」を選びます。下図のように設定し、「Create field」をクリックします。「Created」と名称の列が作成されます。新規レコードの作成日時が記録されます。

AirtableのBaseで、既存の列を編集

表形式の画面で、「+」をクリックし、「Status」の列の下向きのやじるしをクリックし、表示される「Edit field」をクリックします。「Status」の列の「Default option」として、ToDo を指定します。

指定後、「Save」をクリックします。

AirtableのAPI Keyの取得

Airtableの「Developer hub」の「API Key」にアクセスします。API keyは、2024年1月から利用が非推奨になることが警告されています(2023年7月現在)。
https://airtable.com/create/apikey

伏字になっているところをクリックすることで、API keyの文字列が表示されるので、文字列をコピーします。メモアプリ等に貼り付けておきましょう。

AirtableのBase id の取得

Airtableの「API Reference」にアクセスします。https://airtable.com/developers/web/api/introduction

画面中央付近に表示されているBase名をクリックします。

「The ID of this base is」の隣に表示された文字列が、Base id です。例 appXXXXXXXXXXXXRTj

Node-RED での設定
サンプルの読み込み
さくっと試せるように、Node-REDの画面右上の「三」>>「読み込み」>>「フローを読み込み」の順にクリックし、下記のサンプルコードをコピーして貼り付け、「読み込み」を実行します。
[ { "id": "dc8a65574d09ec09", "type": "tab", "label": "Airtable連携フロー1", "disabled": false, "info": "", "env": [] }, { "id": "8aa84167b25be2f5", "type": "inject", "z": "dc8a65574d09ec09", "name": "温度数値データ", "props": [ { "p": "payload" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "29", "payloadType": "num", "x": 160, "y": 80, "wires": [ [ "fc289c832c67af2f" ] ] }, { "id": "fc289c832c67af2f", "type": "switch", "z": "dc8a65574d09ec09", "name": "28℃判定", "property": "payload", "propertyType": "msg", "rules": [ { "t": "gte", "v": "28", "vt": "num" }, { "t": "lt", "v": "28", "vt": "num" } ], "checkall": "true", "repair": false, "outputs": 2, "x": 160, "y": 160, "wires": [ [ "733c6e1359a236d3" ], [ "d209ed4038739e1b" ] ] }, { "id": "d209ed4038739e1b", "type": "debug", "z": "dc8a65574d09ec09", "name": "室温 28℃未満の場合", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 400, "y": 220, "wires": [] }, { "id": "733c6e1359a236d3", "type": "function", "z": "dc8a65574d09ec09", "name": "デバイスID", "func": "msg.payload = \"NIIGATA-01\";\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 370, "y": 140, "wires": [ [ "156eb94c2e35c110" ] ] }, { "id": "156eb94c2e35c110", "type": "function", "z": "dc8a65574d09ec09", "name": "airtable に新規登録", "func": "var deviceid = msg.payload;\nmsg.payload = [\n { \n \"fields\": {\n \"Name\": \"異常値検知\",\n \"deviceid\": deviceid\n }\n }\n]\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 570, "y": 140, "wires": [ [ "7995cc0663f011d6" ] ] }, { "id": "7995cc0663f011d6", "type": "airtable out", "z": "dc8a65574d09ec09", "airtable": "3ed72a5037cffa26", "operation": "create", "outputType": "multiple", "table": "Table 1", "name": "", "x": 760, "y": 140, "wires": [ [ "10556a6f445c4743" ] ] }, { "id": "10556a6f445c4743", "type": "debug", "z": "dc8a65574d09ec09", "name": "debug 1", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "statusVal": "", "statusType": "auto", "x": 920, "y": 140, "wires": [] }, { "id": "3ed72a5037cffa26", "type": "airtable", "name": "my airtable base" } ]
airtable outノードの編集

airtableと表示されている「airtable out」ノードをダブルクリックします。

「Set API Key」で、ペン型のアイコンをクリックします。

ここまでの作業で取得しておいた、「API key」と「Base id」を入力します。「名前」は任意のもので構いません。3項目を入力後、「追加」または「更新」をクリックします。

「テーブル名」は、作成済みのBaseに表示されているテーブル名を入力します。デフォルトでは「Table 1」になっています。Tableと1の間に半角スペースが入っており、1も半角であることに注意しましょう。「Operation」は「Create」とします。

その他のノードについて

「airtable」以外の「温度数値データ」「28℃判定」「デバイスID」「airtableに新規登録」とそれぞれ書かれているノードは、自分でダブルクリックして中身を確認してみてください。
中身を確認した後は、自分でメモアプリでも、紙でも良いので、データの流れを書き出してください。どのようにデータが流れて処理されるかを書き出すことで、全体像がわかります。

デプロイを実行し、動作確認

画面右上の「デプロイ」をクリックしましょう。

その後、「温度数値データ」と表示されている「inject」ノードのボタンをクリックすることで、処理が開始されます。

下図のように、Airtable に警報が登録されます。処理をNode-REDで実行する毎に、Airtableに新規レコードが登録されれば正常に動作したことになります。

課題 : obniz Cloud で取得したセンサー値を、Airtable に新規レコードとして登録する仕組みを作ろう

をもとに、室温を1時間毎に取得し、閾値の温度を超えた時、あるいは下回った時に、Airtable に新規課題として登録される仕組みを作ってください。

この仕組みは、独居高齢者の見守りに使うことができます。たとえば、次のようなケースで役立ちます。

  • 浴室がとても寒いときは、ヒートショックが予測できるため、ヘルパーや遠方の家族に警報を発することに役立つ

  • 部屋の温度が28℃以上であれば、室内で熱中症になる可能性があり、ヘルパーや遠方の家族に警報を発することに役立つ

Airtable のレコードとして新規登録されれば、対応が完了しているかどうかAirtable側で可視化ができますので、対応漏れによる重大事案の発生を防ぐことに役立ちます。可視化するだけではこの資料から進化がありませんので、その先を作りましょう。Airtableを、別の仕組みに置き換えても良いでしょう。
たとえば、Airtableの部分の置き換えとして、Jira Software Cloud や Pleasanter、NocoBaseなどが候補にあがります。

Node-REDのflowsにノードが公開されている場合

公開されているものが実際に動作する保証はないため、あなた自身で動作確認しましょう。動作確認し、目的とおりに動けば、Node-REDの画面右上の「三」>>「パレットの管理」の順にクリックし、「ノードを追加」タブで、ノードをインストールして使うと良いでしょう。

Node-REDのflowsにノードが公開されていない場合

各サービスやシステムのAPI情報を読んで、自分で仕組みを作ってください。Node-REDであれば、functionノード等を使うと良いです。1~3時間くらいで出来るものもあれば、1週間くらい悩むこともあるかもしれませんが、今回のような連携に関しては、だいたいのことは一から書くよりも、Node-REDを使った方が楽です。

手を動かして作る意味

クラウドエンジニア含め、ITエンジニアやITエンジニア関連の仕事というものは、作ることや構築すること、ドキュメントを書くことで、お給料を得ています。就職すれば、お給料を得るために、アプリを作ったり、サーバーやクラウドを構築したり、この資料のようなドキュメントを作らなけばなりません。

なかには、ライフワークとして仕事で作るようなレベル、あるいはそれ以上のものをお金を得る得ないに関わらずに作り続ける人もいます。

自分で連携機能を開発する場合

各クラウドサービスが公開している「API」情報をもとに、自分で連携の仕組みを開発しましょう。

参考書籍

水野 貴明 著 , 発行日 2014年11月 , 出版社 オライリージャパン , 書籍名