以下の説明では、「インターフェース装置」は、一つ以上のインターフェースデバイスでよい。当該一つ以上のインターフェースデバイスは、下記のうちの少なくとも一つでよい。
・一つ以上のI/O(Input/Output)インターフェースデバイス。I/O(Input/Output)インターフェースデバイスは、I/Oデバイスと遠隔の表示用計算機とのうちの少なくとも一つに対するインターフェースデバイスである。表示用計算機に対するI/Oインターフェースデバイスは、通信インターフェースデバイスでよい。少なくとも一つのI/Oデバイスは、ユーザインターフェースデバイス、例えば、キーボード及びポインティングデバイスのような入力デバイスと、表示デバイスのような出力デバイスとのうちのいずれでもよい。
・一つ以上の通信インターフェースデバイス。一つ以上の通信インターフェースデバイスは、一つ以上の同種の通信インターフェースデバイス(例えば一つ以上のNIC(Network Interface Card))であってもよいし二つ以上の異種の通信インターフェースデバイス(例えばNICとHBA(Host Bus Adapter))であってもよい。
また、以下の説明では、「メモリ」は、一つ以上のメモリデバイスであり、典型的には主記憶デバイスでよい。メモリにおける少なくとも一つのメモリデバイスは、揮発性メモリデバイスであってもよいし不揮発性メモリデバイスであってもよい。
また、以下の説明では、「永続記憶装置」は、一つ以上の永続記憶デバイスである。永続記憶デバイスは、典型的には、不揮発性の記憶デバイス(例えば補助記憶デバイス)であり、具体的には、例えば、HDD(Hard Disk Drive)又はSSD(Solid State Drive)である。
また、以下の説明では、「記憶装置」は、メモリと永続記憶装置の少なくともメモリでよい。
また、以下の説明では、「プロセッサ」は、一つ以上のプロセッサデバイスである。少なくとも一つのプロセッサデバイスは、典型的には、CPU(Central Processing Unit)のようなマイクロプロセッサデバイスであるが、GPU(Graphics Processing Unit)のような他種のプロセッサデバイスでもよい。少なくとも一つのプロセッサデバイスは、シングルコアでもよいしマルチコアでもよい。少なくとも一つのプロセッサデバイスは、プロセッサコアでもよい。少なくとも一つのプロセッサデバイスは、処理の一部又は全部を行うハードウェア回路(例えばFPGA(Field-Programmable Gate Array)又はASIC(Application Specific Integrated Circuit))といった広義のプロセッサデバイスでもよい。
また、以下の説明では、「xxxテーブル」といった表現にて、入力に対して出力が得られる情報を説明することがあるが、当該情報は、どのような構造のデータでもよいし、入力に対する出力を発生するニューラルネットワークのような学習モデルでもよい。従って、「xxxテーブル」を「xxx情報」と言うことができる。また、以下の説明において、各テーブルの構成は一例であり、一つのテーブルは、二つ以上のテーブルに分割されてもよいし、二つ以上のテーブルの全部又は一部が一つのテーブルであってもよい。
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサによって実行されることで、定められた処理を、適宜に記憶装置及び/又はインターフェース装置等を用いながら行うため、処理の主語が、プロセッサ(或いは、そのプロセッサを有するコントローラのようなデバイス)とされてもよい。プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバ又は計算機が読み取り可能な(例えば非一時的な)記録媒体であってもよい。また、以下の説明において、二つ以上のプログラムが一つのプログラムとして実現されてもよいし、一つのプログラムが二つ以上のプログラムとして実現されてもよい。
また、以下の説明では、「kkk部」の表現にて機能を説明することがあるが、機能は、一つ以上のコンピュータプログラムがプロセッサによって実行されることで実現されてもよいし、一つ以上のハードウェア回路(例えばFPGA又はASIC)によって実現されてもよい。プログラムがプロセッサによって実行されることで機能が実現される場合、定められた処理が、適宜に記憶装置及び/又はインターフェース装置等を用いながら行われるため、機能はプロセッサの少なくとも一部とされてもよい。機能を主語として説明された処理は、プロセッサあるいはそのプロセッサを有する装置が行う処理としてもよい。プログラムは、プログラムソースからインストールされてもよい。プログラムソースは、例えば、プログラム配布計算機又は計算機が読み取り可能な記録媒体(例えば非一時的な記録媒体)であってもよい。各機能の説明は一例であり、複数の機能が一つの機能にまとめられたり、一つの機能が複数の機能に分割されたりしてもよい。
また、以下の説明では、「計算機システム」は、一つ以上の物理的な計算機を含んだシステムである。物理的な計算機は、汎用計算機でも専用計算機でもよい。
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号のうちの共通部分を使用し、同種の要素を区別する場合は、参照符号を使用することがある。例えば、サービス実行基盤を区別しない場合には、「サービス実行基盤700」と言い、サービス実行基盤を区別する場合には、「サービス実行基盤700A」、「サービス実行基盤700B」のように言うことがある。
また、以下の説明では、「外部サービス」とは、ビジュアルプログラミングツール(フロー実行基盤)の外部の実行基盤で実行されるサービス(例えば、ビジュアルプログラミングツール(フロー実行基盤)ではサポートされていないサービス)である。以下、図では、外部サービスは「ExSvc」と略記されることがある。
以下、本発明の一実施形態について添付図面を用いて説明する。
<概要の説明>
図17は、一実施形態の概要を示す図である。
ビジュアルプログラミングツール40のフロー実行基盤200が存在するサイトであるローカルサイト80Lがある。ローカルサイト80L以外のいずれかのサイトであるリモートサイト80Rがある。サイトは一つでもよいが、本実施形態では、このように少なくとも二つのサイトがある。
ローカルサイト80Lに、ビジュアルプログラミングツール40、フローリポジトリマネージャ400、フローテンプレートマネージャ300、サービスデプロイメントマネージャ600A、サービス実行基盤700A、及び、外部サービスマネージャ500が存在する。リモートサイト80Rに、サービスデプロイメントマネージャ600B及びサービス実行基盤700Bが存在する。サイト80に存在する上述の各要素は、計算機システムでもよいし、計算機システムにより実現される機能でもよい。ユーザ端末100が、ビジュアルプログラミングツール40及びフローテンプレートマネージャ300にアクセスできる。なお、ユーザ端末100は、ユーザ(例えば開発者)が使用する情報処理端末(典型的には、パーソナルコンピュータのような計算機)である。ユーザ端末100は、例えば、ウェブブラウザ(ブラウザの一例)を実行する。
ビジュアルプログラミングツール40は、フローエディタ41(フロー開発基盤)とフロー実行基盤200とを有する。フローエディタ41は、ユーザ端末100が実行するウェブブラウザに、フローの編集をユーザから受け付けるフローエディタGUI(Graphical User Interface)201を提供する。本実施形態において、「フロー」は、アプリケーションソフトウェアのフローであり、複数のノードと当該複数のノードにおける各ノード間の結線とで表現される。フロー実行基盤200は、当該複数のノードの実行基盤である。なお、複数のノードが、外部サービスに対応した呼出しノードを含んでいる場合、フロー実行基盤200は、当該呼出しノードに関連付けられている外部サービス701(又はそのプロキシ702)を呼び出す。図1に例示のフロー20は、呼出しノードA及びBと、フロー実行基盤200上で実行されるサービス(処理モジュール)を表現したノードCとがある。
フローリポジトリマネージャ400は、フローを示すフローデータ(例えば、ソースコードで表現されたデータ)を格納する。
フローテンプレートマネージャ300は、一つ以上(典型的には複数)のフローテンプレートを管理する。フローテンプレートマネージャ300は、ユーザ端末100が実行するウェブブラウザに、フローテンプレートのリストを表示し当該リストからユーザ所望のフローテンプレートの選択を受け付けるテンプレートマネージャGUI301を提供する。
少なくとも一つのサービスデプロイメントマネージャ600が、例えばサイト80毎に存在する。サービスデプロイメントマネージャ600は、外部サービス701及びそれのプロキシ702を、当該マネージャ600に対応したサイト80(具体的には、当該サイト80のサービス実行基盤700)にデプロイする。
サービス実行基盤700は、当該基盤700にデプロイされた外部サービス701やそれのプロキシ702である外部インスタンスやそれのプロキシインスタンスを実行する。
外部サービスマネージャ500は、命令受信部51、命令送信部52、応答受信部53、応答送信部54及びノード追加部55を有する。
テンプレートマネージャGUI301を介してフローテンプレートが選択された場合、当該選択されたフローテンプレートが示すフロー20がフローテンプレートマネージャ300からビジュアルプログラミングツール40のフローエディタ41にダウンロードされるようになっている。各ノードには、それぞれプロパティ項目とプロパティ値とを含んだ一つ又は複数のプロパティ要素を有するプロパティが関連付けられているが、フローテンプレートが示すフロー20における呼出しノードA及びBの各々について、当該呼出しノードに関連付けられるプロパティでは、当該呼出しノードの呼出し先のエンドポイントがプロパティ値として未決定である。このようなダウンロードが行われる場合に、外部サービスマネージャ500が、フローテンプレートマネージャ300とサービスデプロイメントマネージャ600との連携を実現することで、アプリケーションソフトウェアの開発支援を実現、具体的には、フローエディタ41にダウンロードされたフロー20における呼出しノードA及びBの各々のプロパティに呼出し先エンドポイントが設定済みとなっていることを実現する。より具体的には、以下の通りである。
すなわち、上述のダウンロードが行われる場合に、命令受信部51が、フロー20に含まれる呼出しノードA及びBに対応した外部サービス701A及び701Bをデプロイすることの一つ以上の命令をフローテンプレートマネージャ300から受信する。一つ以上の命令は、一つ又は複数の呼出しノードにそれぞれ対応した一つ又は複数の命令であってもよいし、一つ又は複数の呼出しノードに対応した一つの命令でもよい。当該「一つ以上の命令」の各々が、第1のデプロイメント命令の一例である。本実施形態では、呼出しノード毎に第1のデプロイメント命令がある。
第1のデプロイメント命令には、外部サービス701の外部サービスIDと、当該外部サービス701のデプロイメント先とされるサイト80のサイトIDとが関連付けられている。更に、本実施形態では、第1のデプロイメント命令には、外部サービス701について、ユーザのユーザID、当該ユーザが所属するグループ(例えば開発チーム)のグループID(ネームスペース)、及び、当該外部サービス701又はそれのプロキシのAPI(エンドポイント)の呼出し回数の制限を示すAPI呼出し回数制限(外部サービスの呼出し制限に関する引数である制限引数の一例)、のうちの少なくとも一つが関連付けられていることがある(APIは、Application Programming Interfaceの略)。外部サービス701のAPI呼出し制限回数は、外部サービス701について用意されている一つ以上のプランのうちの指定されたプランに依存する。
命令送信部52が、上述の第1のデプロイメント命令に従い、外部サービス701に対応したサイト80に関連付けられているサービスデプロイメントマネージャ600に、当該第1のデプロイメント命令から識別される外部サービス701をデプロイすることの命令である第2のデプロイメント命令を送信する。当該第2のデプロイメント命令には、当該サイト80に対応し第1のデプロイメント命令から特定された外部サービスIDが関連付けられる。このような第2のデプロイメント命令を受けたサービスデプロイメントマネージャ600は、当該第2のデプロイメント命令から識別される外部サービス701を当該サイト80におけるサービス実行基盤700にデプロイし、当該外部サービス701に対応した呼出し先エンドポイントが関連付けられた応答である第2のデプロイメント応答を当該第2のデプロイメント命令の送信元(ここでは外部サービスマネージャ500)に返す。応答受信部53が、サービスデプロイメントマネージャ600からそのような第2のデプロイメント応答を受信する。「外部サービス701に対応した呼出し先エンドポイント」とは、当該外部サービス701のエンドポイント、及び、当該外部サービス701のプロキシのエンドポイントのうちの少なくとも一つである。
応答送信部54が、サービスデプロイメントマネージャ600からの第2のデプロイメント応答から得られ呼出しノードのプロパティにフローテンプレートマネージャ300により設定される呼出し先エンドポイントが関連付けられた応答である第1のデプロイメント応答をフローテンプレートマネージャ300(第1のデプロイメント命令の送信元の一例)に返す。これにより、フローテンプレートマネージャ300が、当該第1のデプロイメント応答から、呼出しノードに対応した外部サービス701に関する呼出し先エンドポイントを特定し、当該呼出し先エンドポイントを、当該呼出しノードのプロパティに設定する。当該呼出し先エンドポイントが呼出しノードのプロパティに設定済のフロー20が、フローエディタ41にダウンロードされる。
なお、本実施形態では、外部サービス701の第2のデプロイメント命令は、当該外部サービス701の他に当該外部サービス701のプロキシ702をデプロイすることの命令である。
例えば、サービスデプロイメントマネージャ600Aは、外部サービス701Aの第2のデプロイメント命令に応答して、当該外部サービス701Aの他に、当該外部サービスのプロキシ702Aも、例えばサービス実行基盤700Aにデプロイする。この場合、第2のデプロイメント命令に対する第2のデプロイメント応答には、プロキシ702Aの呼出し先エンドポイントが関連付けられ、その結果、外部サービス701Aに対応した呼出しノード701Aのプロパティには、プロキシ702Aの呼出し先エンドポイントが設定される。
また、例えば、デプロイメント先がリモートサイト80Rである外部サービス701Bについては、命令送信部52が、リモートサイト80Rに対応したサービスデプロイメントマネージャ600Bに、外部サービス701Bとそれのプロキシ702B1とをデプロイすることの第2のデプロイメント命令を送信し、且つ、ローカルサイト80Aに対応したサービスデプロイメントマネージャ600Aに、プロキシ702B1と通信するプロキシ702B2(外部サービス701Bのプロキシ)をデプロイすることの第2のデプロイメント命令を送信する。これにより、サービスデプロイメントマネージャ600Bによって、外部サービス701Bとそれのプロキシ702B1がサービス実行基盤700Bにデプロイされる。また、サービスデプロイメントマネージャ600Aによって、プロキシ702B1と通信するプロキシ702B2が、サービス実行基盤700Aにデプロイされる。この場合、第1のデプロイメント応答には、外部サービス701Bに対応した呼出しノードBに関連付けられる呼出し先エンドポイントとして、プロキシ702B2のエンドポイントが関連付けられる。
また、外部サービス701についてプロキシ702がデプロイされるケースは、第1のデプロイメント命令に、当該外部サービス701についてAPI呼出し制限回数が関連付けられているケースでよい。この場合、例えば、外部サービス701Aの第2のデプロイメント命令には、外部サービス701Aに対応したAPI呼出し制限回数が関連付けられる。この第2のデプロイメント命令を受信したサービスデプロイメントマネージャ600Aにより、当該API呼出し制限回数を基にプロキシ702Aに対応したAPI認証情報が得られ、デプロイされるプロキシ702Aに当該API認証情報が関連付けられ、また、第2のデプロイメント応答に当該API認証情報が関連付けられる。第1のデプロイメント応答には、外部サービス701Aに対応した呼出しノードAに関連付けられる呼出し先エンドポイントとして、プロキシ702Aのエンドポイントが関連付けられ、且つ、当該呼出しノードAのプロパティに、前記フローテンプレートマネージャによりプロパティ値として設定されるAPI認証情報が関連付けられる。これにより、フローエディタ41にダウンロードされたフロー20における呼出しノードAのプロパティには、当該API認証情報が設定済である。
また、本実施形態では、フローテンプレートマネージャ300からの第1のデプロイメント命令に、外部サービス701について、ユーザが所属するグループのグループIDが関連付けられている場合、当該外部サービス701についての第2のデプロイメント命令には、当該グループIDが関連付けられる。これにより、当該第2のデプロイメント命令を受信したサービスデプロイメントマネージャ600により、当該グループIDに対応した空間(デプロイメント先のサービス実行基盤700における論理的な空間)に、当該外部サービス701(及びそれのプロキシ702)がデプロイされる。このように、同一の外部サービスのインスタンスを、サービス実行基盤700上の異なる複数の空間に配置することが可能である。この場合、空間毎のプロキシ702の認証情報は、アクセス制限に関する情報(例えば、アクセス可能なユーザのグループID、又は、当該グループIDに属するユーザID)を含んでよい。
また、本実施形態では、上述したように、外部サービスマネージャ500は、ノード追加部55を有する。ノード追加部55は、追加された外部サービス701に対応した呼出しノードの追加をビジュアルプログラミングツール40(例えばフローエディタ41)に命令する。これにより、フローの編集時には、追加された外部サービス701に対応した呼出しノードが選択可能にフローエディタGUI201に表示され得る。
以下、本実施形態を詳細に説明する。なお、本実施形態では、一つの呼出しノードに対応する外部サービスは一つでも複数でもよい。
<システムの説明>
図1は、本実施形態におけるシステム構成の一例を示すブロック図である。
図1のシステムは、ユーザ端末100と、ビジュアルプログラミングツール40(フローエディタ41及びフロー実行基盤200)と、フローテンプレートマネージャ300と、フローリポジトリマネージャ400と、外部サービスマネージャ500と、サービス実行基盤700(例えば、700A及び700B)と、サービスデプロイメントマネージャ600(例えば、600A及び600B)と、ネットワークスイッチ800(例えば、800A~800D)から構成される。
ユーザ101は、ユーザ端末100で動作するウェブブラウザに、ビジュアルプログラミングツール40のフローエディタ41が提供するフローエディタGUIを表示させ、当該フローエディタGUI上でフローを開発する。また、ユーザ101は、ユーザ端末100を操作して、フローテンプレートマネージャ300より、フローデータ(フローを示すデータ)を取得し、フローエディタ41に(フローエディタGUI上に)当該フローデータをダウンロードさせる。また、ユーザ101は、フローエディタ41にダウンロードされたフローデータを、フロー実行基盤200にデプロイすることで、当該フローデータが示すフローを実行させることができる。
ビジュアルプログラミングツール40は、フローを記述するためのフローエディタGUIを提供するフローエディタ41と、フローで定義した処理を実行するためのフロー実行基盤200とを有する。フローエディタ41は、ノードを管理する機能を有し、当該機能により、ノードの追加又は削除を実行できる。前述のNode-REDがビジュアルプログラミングツール40の一例である。フローエディタGUIや機能の詳細は後述する。
フローテンプレートマネージャ300は、フローテンプレートマネージャGUIを提供する機能と、フローテンプレートを管理する機能と、外部サービスのデプロイメント又はアンデプロイメントを命令する機能とを持つ。フローテンプレートマネージャ300のフローテンプレートマネージャGUIや機能の詳細は後述する。
フローリポジトリマネージャ400は、フローのバージョンを管理する機能を持つ。ユーザ101は、フローテンプレートマネージャ300からダウンロードしたフローデータをフローリポジトリマネージャ400に登録することができる。フローリポジトリマネージャの一例として、GitLab(https://gitlab.com/)が挙げられる。ユーザ101は、フローリポジトリマネージャ400に、フローを随時カスタマイズしたデータ、及びカスタマイズ前のデータを登録することができる。
外部サービスマネージャ500は、サービスデプロイメントマネージャ600へ外部サービスのデプロイメント又はアンデプロイメントを命令する機能を持つ。外部サービスマネージャ500の機能の詳細は後述する。
サービスデプロイメントマネージャ600は、サービス実行基盤700に対して外部サービスのデプロイメント及びアンデプロイメントを実行する機能、及び、外部サービスへのアクセス先となるエンドポイントを設定するプロキシのデプロイメント及びアンデプロイメントを実行する機能を持つ。サービスデプロイメントマネージャ600の一例として、Helm(https://www.helm.sh/)が挙げられる。サービスデプロイメントマネージャ600の詳細は後述する。
サービス実行基盤700は、外部サービス及びプロキシのインスタンスを実行する機能を持つ。サービス実行基盤700Aはサービスデプロイメントマネージャ600Aより、サービス実行基盤700Bはサービスデプロイメントマネージャ600Bより、外部サービスのデプロイメント命令、外部サービスのアンデプロイメント命令、プロキシのデプロイメント命令、プロキシのアンデプロイメント命令、及び、プロキシ設定の命令のうちの少なくとも一つを受信し、受信した命令を実行する。本実施形態では、外部サービスとそれのプロキシのデプロイメント命令とプロキシ設定の命令が第2のデプロイメント命令の一例に相当し、外部サービスとそれのプロキシのアンデプロイメント命令が個別アンデプロイメント命令の一例に相当する。サービス実行基盤700の例として、Kubernetes(https://kubernetes.io/)が挙げられる。
ネットワークスイッチ800A~800Dのうち、ネットワークスイッチ800B及び800Cが、ローカルネットワーク(例えばLAN(Local Area Network))におけるスイッチでよい。ネットワークスイッチ800Dが、リモートネットワーク(例えばWAN(Wide Area Network))におけるスイッチでよい。
<画面の説明>
図2は、フローエディタGUI201の一例を示す図である。
フローエディタGUI201は、選択可能なノードの一覧が表示されるパレットエリア2019と、フローの編集を受け付ける編集エリア2017とを含む。
ユーザ101は、フローエディタGUI201の編集エリア2017でフローの開発を行う。
ユーザ101は、フローのノード2012をパレットエリア2019から編集エリア2017にドラッグアンドドロップすることで当該ノードを編集エリア2017上で利用可能(編集可能)となる。また、ノード2012同士をマウス操作又はタッチ操作等により線2013で結ぶことで、ノード処理順序を定義することができる。あるノード2012の処理が終了すると、次に、当該あるノード2012を始点とし当該あるノード2012と線2013で結ばれているノード2012の処理が実行される。
ユーザ101がノード2012をダブルクリックすると、当該ノード2012のプロパティを設定するノードプロパティ設定画面2014が開く。ノードプロパティ設定画面2014は、当該ノード2012の処理に必要なプロパティ値を設定できる。例えば、外部サービスを呼び出すための呼出しノードBのプロパティには、画面2014のUI(User Interface)2015を介して、外部サービスのエンドポイントとなるURLを設定することができ、画面2014のUI2016を介して、外部サービスの認証トークン情報を設定するヘッダを設定することができる。本実施形態において、GUIにおける「UI」は、テキストボックスやプルダウンメニューのようなGUI部品である。本実施形態によれば、上述したように、フローエディタ41にダウンロードされたフローデータでは、呼出しノードのプロパティには、呼出し先エンドポイントの一例であるURLや、認証情報の一例であるヘッダは設定済である。
本実施形態では、パレットエリア2019にノード2012が動的に追加される。具体的には、上述したように、外部サービスの動的な追加が外部サービスマネージャ500により検知された場合、外部サービスマネージャ500が、当該外部サービスに対応した呼出しノードの追加をビジュアルプログラミングツール40に命令する。当該命令に応答して、ビジュアルプログラミングツール40により、命令対象の呼出しノードが追加され、パレットエリア2019に、当該追加された呼出しノードが表示される。なお、ユーザ101が動的にパレットエリア2019にノード2012を追加できてもよい。また、パレットエリア2019には、ノードの種別を示すテキスト2011が表示されてもよい。
図3A、図3B、図3C、図3D及び図3Eは、フローテンプレートマネージャGUI301の一例を示す図である。
図3Aに例示のフローテンプレートマネージャGUI301Aは、フローテンプレート一覧を表示しユーザ所望のフローテンプレートの選択をユーザから受け付けるための画面の一例である。ユーザ101が、GUI301Aにおけるフローテンプレート3011(例えばフローテンプレート1を示すアイコン)をクリックすると、図3Bに例示のフローテンプレートマネージャGUI301Bが開く。フローテンプレート3011のクリックが、フローテンプレートの選択の一例である。
フローテンプレートマネージャGUI301Bは、フローテンプレートの情報取得とフローデータのダウンロードとを実行することの指示をユーザから受け付けるための画面の一例である。ユーザ101は、GUI301Bにおけるフロータブ3021の画面上に表示されるフロー画像3025が示すフローを、選択したフローテンプレートが示すフローであると理解できる。また、説明タブ3022が選択される、或いは、関連資料タブ3023が選択されることにより表示される画面より、当該選択したフローテンプレートに関する詳細情報やドキュメント等のコンテンツを取得できる。ユーザ101が、ダウンロードボタン3024をクリックすると、図3Cに例示のフローテンプレートマネージャGUI301Cが開く。
フローテンプレートマネージャGUI301Cは、フローテンプレートのフローデータダウンロード先となるフローリポジトリ情報の指定、フローエディタ情報の指定、及び、外部サービスのデプロイメント実行指示をユーザから受け付けるための画面の一例である。ユーザ101は、GUI301を用い、フローリポジトリマネージャ400に関わるUI3031~3034を介して、フローリポジトリのURL、プロジェクト名、ユーザ名及びのパスワードを入力(又は閲覧)したり、ビジュアルプログラミングツール40に関わるUI3035及び3036を介して、フローエディタ41のURL、及び、フローテンプレートマネージャ300がフローエディタ41へフローデータをダウンロードする操作をする権限としてのアクセストークンを入力(又は閲覧)したりすることができる。また、ユーザ101が、外部サービスのデプロイメントのためのデプロイメントボタン3037をクリックすると、図3Dに例示のフローテンプレートマネージャGUI301Dが開く。
フローテンプレートマネージャGUI301Dは、外部サービスのデプロイメントの実行指示を受け付ける画面の一例である。ユーザ101は、フローテンプレートマネージャGUI304を介して、フローテンプレートのフロー実行に必要となる外部サービスのプランを選択できる。ここで、「プラン」とは、外部サービスのデプロイメント先サイトやAPI呼出し制限回数(外部サービスAPIの呼出し回数の制限)等、外部サービスをデプロイする際の条件の組合せを意味する。
ユーザ101は、ラジオボタンであるUI3041及び3042のいずれかを選択し、当該選択しUIに応じたプルダウンメニューであるUI3047を適宜選択し、その後にデプロイメントボタン3048をクリックすることで、ユーザ101が選択したプランでの外部サービスのデプロイメントが実行される。その際、図10、図11、図12に示す処理が順番に実行される。各処理の詳細は後述する。
GUI301Dに対するユーザ操作に応答して外部サービスのデプロイメントが完了した後、図3Cに例示したGUI301Cのダウンロードボタン3038をユーザ101がクリックすると、フローテンプレートマネージャ300は、上記選択されたフローテンプレートが示すフローデータの各呼出しノードのプロパティに、デプロイされた外部サービスのエンドポイントと認証トークン情報を設定し、当該フローデータをフローエディタ41にダウンロードし、結果として、エンドポイント及び認証トークン情報が設定済のフローデータが示すフローが、フローエディタGUI201の編集エリア2017に表示される。このため、その後、ユーザ101は、フローエディタGUI201のデプロイメントボタン2018をクリックすれば、ユーザ101が自ら各呼出しノードのプロパティにエンドポイント及び認証トークン情報の設定をすること無しに、外部サービス呼出し処理を含む当該フローを実行させることができる。
図3Eに例示のフローテンプレートマネージャGUI301Eは、デプロイメントされた外部サービスの一覧を表示する画面の一例である。フローテンプレートマネージャGUI301Eは、ユーザ101がGUI301Dを介してデプロイメント実行を指示した外部サービスの情報を表示する。また、ユーザ101は、GUI301E上の所望のUI(チェックボックス)3051にチェックを入れて削除ボタン3056をクリックすると、該当する外部サービスのアンデプロイメントを実行させることができる。その際、図14、図15、図16に示す処理が順番に実行される。各処理の詳細は後述する。
<計算機の説明>
図4は、計算機の構成の一例を示すブロック図である。
ビジュアルプログラミングツール40、フローテンプレートマネージャ300、フローリポジトリマネージャ400、外部サービスマネージャ500、サービスデプロイメントマネージャ600、及び、サービス実行基盤700のうちの少なくとも一つは、一つ以上の計算機30上に実現可能である。
計算機30は、プロセッサ31と、メモリ32と、永続記憶装置33と、インターフェース装置34と、これらの構成要素を接続するバス35とを有する。
プロセッサ31は、メモリ32に記憶されているプログラムを実行することによって、所定の機能を実現する。メモリ32は、プロセッサ31によって実行されるプログラム及び当該プログラムの実行に必要なデータを記憶する。プログラムは、永続記憶装置33からメモリ32にロードされる。インターフェース装置34は、いずれかのネットワークスイッチ800に接続される。計算機30は、インターフェース装置34を介して、他の計算機30と通信することができる。
なお、一部の計算機30は、仮想マシンやコンテナ等の仮想環境に置き換えることもできる。
<メモリ内のプログラム及びデータの説明>
図5Aは、ユーザ端末100のメモリ32A内のプログラムの一例を示す図である。
メモリ32Aは、OS(Operating System)121、及びウェブブラウザ122を持つ(格納する)。
図5Bは、ビジュアルプログラミングツール40のメモリ32B内のプログラムの一例を示す図である。
メモリ32Bは、OS211、フローの実行環境を提供するフロー実行環境222、フローエディタGUIを提供するエディタGUIプログラム223、フローエディタGUIのパレットエリアへのノード追加を実施するノード管理プログラム224、及び、ノードの本体(ノードのオリジナル)を管理するノードリポジトリ225を持つ。
図5Cは、フローテンプレートマネージャ300のメモリ32C内のプログラム及びデータの一例を示す図である。
メモリ32Cは、OS321、フローテンプレートを管理するテンプレート管理プログラム322、フローテンプレートマネージャGUIを提供するテンプレートGUIプログラム323、フローテンプレートテーブル324、フローテーブル325、コンテンツテーブル326、及び、外部サービスプランテーブル327を持つ。
図5Dは、フローリポジトリマネージャ400のメモリ32D内のプログラムの一例を示す図である。
メモリ32Dは、OS412、及び、ソースコードリポジトリを管理するリポジトリ管理プログラム422、及び、フローデータのソースコードが格納されるソースコードリポジトリ423を持つ。
図6Aは、外部サービスマネージャ500のメモリ32E内のプログラム及びデータの一例を示す図である。
メモリ32Eは、OS521、外部サービス管理プログラム522、呼出しノードテーブル523、呼出しノード管理プログラム528、外部サービステーブル524、サイトテーブル526、サービスデプロイメントマネージャテーブル525、及び、ノードマネージャテーブル527を持つ。外部サービス管理プログラム522及び呼出しノード管理プログラム528が実行されることで、例えば、上述した機能51~55が実現される。
図6Bは、サービスデプロイメントマネージャ600のメモリ32F内のプログラム及びデータの一例を示す図である。
メモリ32Fは、OS621、サービスデプロイメントプログラム622、サービスのインスタンスとなるプログラムを管理するサービスリポジトリ623、及び、サービスインスタンスの情報を管理するサービスデプロイメントテーブル624を持つ。
図6Cは、サービス実行基盤700のメモリ32G内のプログラム及びデータの一例を示す図である。
メモリ32Gは、OS721、サービスのデプロイメントやアンデプロイメントを実施するサービス管理プログラム722、サービスインスタンスの情報を管理するサービステーブル723、及び、デプロイされたサービスであるサービスインスタンス724を持つ。
<テーブルの説明>
図7は、フローテンプレートマネージャ300が保持するテーブルの構成の一例を示す図である。
フローテンプレートテーブル324は、フローテンプレートに関する情報を管理するテーブルである。例えば、フローテンプレートテーブル324は、フローテンプレート毎にエントリを有する。一つのフローテンプレート(この段落で「対象テンプレート」)を例に取ると、エントリは、対象テンプレートのフローテンプレートIDを示すフローテンプレートID32401、対象テンプレートの名称を示すフローテンプレート名32402、対象テンプレートが示すフローのフローIDを示すフローID32403、対象テンプレートが示すフローに含まれる一つ又は複数の呼出しノードに対応した一つ又は複数の外部サービスのIDを示す外部サービスID32404、及び、対象テンプレートのコンテンツのIDを示すコンテンツID32405といった情報を持つ。
フローテーブル325は、各フローテンプレートのフローデータに関する情報を管理するテーブルである。例えば、フローテーブル325は、フロー毎にエントリを有する。一つのフロー(この段落で「対象フロー」)を例に取ると、エントリは、フローのIDを示すフローID32501、及び、フローそれ自体を示すフロー32502といった情報を持つ。フロー32502は、例えば、フローデータの情報を示すテキストデータである。具体的には、例えば、フロー32502は、ノードID、ノード間の結線を示す情報、ノードのプロパティに設定されている情報を含む。
コンテンツテーブル326は、各フローテンプレートの説明や関連資料といったコンテンツに関する情報を管理するテーブルである。例えば、コンテンツテーブル326は、コンテンツ毎にエントリを有する。或るコンテンツ(この段落で「対象コンテンツ」)を例に取ると、エントリは、対象コンテンツのIDを示すコンテンツID32601、及び、対象コンテンツそれ自体を示すコンテンツ32602といった情報を持つ。コンテンツ32602は、例えば、説明情報のテキストデータや関連資料のアクセス先の情報を含む。
外部サービスプランテーブル327は、外部サービスのデプロイメントに関する条件となるプランに関わる情報を管理するテーブルである。例えば、外部サービスプランテーブル327は、プラン毎にエントリを有する。一つのプラン(この段落で「対象プラン」)を例に取ると、エントリは、対象プランのIDを示すプランID32701、対象プランの名称を示すプラン32702、対象プランが無料プランか否かを示す無料フラグ32703、対象プランに属する外部サービスのIDを示す外部サービスID32704、当該外部サービスのデプロイメント先のサイトのIDを示すサイトID32705、及び、体操プランに対応したAPI呼出し回数の制限を示す回数制限32706といった情報を持つ。回数制限32706は、{API呼出し回数,期間}という形式で表現された情報(API呼出し回数制限の情報)である。回数制限32706が無い(ブランク)のプランは、API呼出し回数制限が無いプランである。
図8は、外部サービスマネージャ500が保持するテーブルの構成の一例を示す図である。
呼出しノードテーブル523は、呼出しノードとその呼出し先となる外部サービスとの組合せに関する情報を管理するテーブルである。例えば、呼出しノードテーブル523は、呼出しノード毎にエントリを有する。一つの呼出しノード(この段落で「対象呼出しノード」)を例に取ると、エントリは、対象呼出しノードのIDを示す呼出しノードID52301、及び、対象呼出しノードの呼出し先となる外部サービスのIDを示す外部サービスID52302といった情報を持つ。
外部サービステーブル524は、外部サービスと、その外部サービスがデプロイされ得るサイト80との組合せを管理するテーブルである。例えば、外部サービステーブル524は、外部サービス毎にエントリを有する。一つの外部サービス(この段落で「対象外部サービス」)を例に取ると、エントリは、対象外部サービスのIDを示す外部サービスID52401、対象外部サービスの名称を示す外部サービス名52402、及び、対象外部サービスのデプロイメント先となり得る一つ以上のサイト80のIDを示すサイトID52403といった情報を持つ。
サービスデプロイメントマネージャテーブル525は、サービスデプロイメントマネージャ600に関する情報を管理するテーブルである。サービスデプロイメントマネージャテーブル525は、サービスデプロイメントマネージャ600毎にエントリを有する。一つのサービスデプロイメントマネージャ600(この段落で「対象マネージャ600」)を例に取ると、エントリは、対象マネージャ600のIDを示すサービスデプロイメントマネージャID52501、対象マネージャ600のアクセス先エンドポイントを示すエンドポイント52502、及び、対象マネージャ600が存在するサイト80のIDを示すサイトID52503といった情報を持つ。
サイトテーブル526は、サイト80に関する情報を管理するテーブルである。例えば、サイトテーブル526は、サイト80毎にエントリを有する。一つのサイト80(この段落で「対象サイト80」)を例に取ると、エントリは、対象サイト80のIDを示すサイトID52601、対象サイトの名称を示すサイト名52602、及び、対象サイトがローカルサイト80Lか否かを示すローカルフラグ52603といった情報を持つ。ここで、ローカルサイト80Lは、上述したように、ビジュアルプログラミングツール40の存在するサイトを示す。
ノードマネージャテーブル527は、ノード管理プログラム224に関する情報を管理するテーブルである。例えば、ノードマネージャテーブル527は、ノード管理プログラム224のアクセス先エンドポイントを示すエンドポイント52701といった情報を持つ。
図8に示すテーブル523~525によれば、一つ又は複数のサイト80の各々について、当該サイト80に対応したサービスデプロイメントマネージャ600は、当該サイト80のサイトIDと、当該サイトIDに対応した外部サービスIDとに関連付けられている。
図9Aは、サービスデプロイメントマネージャ600Aが保持するテーブルの構成の一例を示す図である。図9Bは、サービスデプロイメントマネージャ600Bが保持するテーブルの構成の一例を示す図である。
サービスデプロイメントテーブル624は、デプロイされた外部サービス及びプロキシに関する情報を管理するテーブルである。例えば、サービスデプロイメントテーブル624は、外部サービス毎にエントリを有する。一つのフローテンプレート(この段落で「対象テンプレート」)を例に取ると、エントリは、対象外部サービスのデプロイメント先のネームスペースのIDを示すネームスペースID62401、対象外部サービスのインスタンスのIDを示すリソースID62402、対象外部サービスのIDを示す外部サービスID62403、対象外部サービスのデプロイメント先とされるサイト80のIDを示すサイトID62404、対象外部サービスのユーザのIDを示すユーザID62405、対象外部サービスのユーザが属するグループのIDを示すグループID62406、対象外部サービスのエンドポイントを示す外部サービスエンドポイント62407、対象外部サービスのプロキシのエンドポイントを示すプロキシエンドポイント62408、対象外部サービスに関しローカルサイト80Lにデプロイされたプロキシの認証トークンを示すローカル認証トークン62409、対象外部サービスに関しリモートサイト80Rにデプロイされたプロキシの認証トークンを示すリモート認証トークン62410、及び、対象外部サービスのAPI呼出し回数の制限を示す回数制限62412といった情報を持つ。
図9A及び図9Bによれば、デプロイメント先がリモートサイトである外部サービスについて(外部サービスID“exsvc-2”を参照)、サービスデプロイメントテーブル624A及び624Bのいずれにも、当該外部サービスに対応したエントリが存在する。具体的には、当該外部サービスを図17に例示の外部サービス701Bであるとすると、サービスデプロイメントテーブル624Bには、リモートサイト80Rにデプロイされる外部サービス701B及びプロキシ702B1に関する情報を持つエントリがある(テーブル624Bでは、当該外部サービスについてローカル認証トークン62409Bがあるが、これは、当該サイト80Rにとっては当該サイト80Rがローカルとなるためである)。また、サービスデプロイメントテーブル624Aには、ローカルサイト80Lにデプロイされるプロキシ702B2に関する情報を持つエントリがある(プロキシ702B2について、外部サービスエンドポイント62407Aは、プロキシ702B2と通信するプロキシ702B1(プロキシ702B2にとっての外部のサービス)のエンドポイントを示す)。
<外部サービスデプロイメント処理の説明>
図10は、フローテンプレートマネージャ300のテンプレート管理プログラム322が行う外部サービスデプロイメント処理の一例を示す図である。
まず、ステップS101において、テンプレート管理プログラム322は、テンプレートGUIプログラム323より、外部サービスをデプロイすることの命令を受信する。当該命令は、テンプレートGUIプログラム323を介してユーザ所望のフローテンプレートが選択されたことに応答して当該フローテンプレートが示すフローのフローデータがフローテンプレートマネージャ300からビジュアルプログラミングツール40のフローエディタ41にダウンロードされる場合に、テンプレートGUIプログラム323より送信される。また、当該命令に関連付けられる引数は、外部サービスID-サイトID-API呼出し回数制限の組合せの配列と、各組合せについてのグループID及びユーザIDとを含む。
次に、ステップS102において、テンプレート管理プログラム322は、ステップS101で受信した命令の引数が適切か否かを判断する。具体的には、例えば、テンプレート管理プログラム322は、命令の引数として、外部サービスID-サイトID-API呼出し回数制限の組合せの配列が指定されていれば、引数が適切と判断する。引数が適切ならば、処理がステップS103に進む。引数が適切でないならば、処理がステップS108に進み、テンプレート管理プログラム322は、テンプレートGUIプログラム323にエラー情報を含んだ応答を返し、処理を終了する。
次に、ステップS103において、テンプレート管理プログラム322は、ステップS101で受信した命令の引数の配列から、外部サービスID-サイトID-API呼出し回数制限の組合せを一つ選出する。
次に、ステップS104において、テンプレート管理プログラム322は、外部サービスマネージャ500の外部サービス管理プログラム522へ、第1のデプロイメント命令を送信する。当該命令の引数として、ステップS103で選出した外部サービスID、サイトID及びAPI呼出し回数制限の組合せが指定される。更に、当該命令の引数として、ステップS103で選出した組合せに対応したグループID及びユーザIDも指定される。当該命令の送信後、テンプレート管理プログラム322は、既定のタイムアウト時間まで、当該命令に対応した第1のデプロイメント応答を待つ。
次に、ステップS105において、テンプレート管理プログラム322は、タイムアウト時間内に第1のデプロイメント応答があったか否かを確認する。タイムアウト時間内に当該応答があったら、処理がステップS106に進む。タイムアウト時間内に当該応答がなかったら、処理がステップS108に進み、テンプレート管理プログラム322は、テンプレートGUIプログラム323にエラー情報を含んだ応答を返し、処理を終了する。
次に、ステップS106において、テンプレート管理プログラム322は、外部サービス管理プログラム522からの第1のデプロイメント応答の内容を確認し、第1のデプロイメント命令のエラーがあるか否かを確認する。エラーが無ければ、処理がステップS107に進む。エラーがあれば、テンプレート管理プログラム322は、テンプレートGUIプログラム323にエラー情報を含んだ応答を返し、処理を終了する。
次に、ステップS107において、テンプレート管理プログラム322は、ステップS101で受信した命令の引数の配列から選出すべき引数があるか否かを確認する。選出すべき引数があれば、処理がステップS103に戻る。選出すべき引数がなければ、処理がステップS108へ進む。
次に、ステップS108において、テンプレート管理プログラム322は、テンプレートGUIプログラム323へ、外部サービスのデプロイメント処理の完了を示す結果を返し、処理を終了する。なお、ステップ108において、テンプレート管理プログラム322は、一つ以上の呼出しノードの各々のプロパティに、当該呼出しノードに対応した外部サービスについての第1のデプロイメント応答から得られる呼出し先エンドポイントを設定し、それにより、当該一つ以上の呼出しノードの各々のプロパティに呼出し先エンドポイントが設定済みのフローのフローデータがビジュアルプログラミングツール40のフローエディタ41にダウンロードされる。
図11は、外部サービスマネージャ500の外部サービス管理プログラム522が行う外部サービスデプロイ処理の一例を示す図である。
まず、ステップS201において、外部サービス管理プログラム522は、テンプレート管理プログラム322より、第1のデプロイメント命令を受信する。
次に、ステップS202において、外部サービス管理プログラム522は、ステップS201で受信した命令の引数が適切か否かを判断する。具体的には、外部サービス管理プログラム522は、当該引数に、外部サービスID、サイトID及びAPI呼出し回数制限が指定されていれば適切と判断する。当該引数が適切なら、処理がステップS203に進む。当該引数が適切でないならば、処理がステップS211に進み、外部サービス管理プログラム522は、テンプレート管理プログラム322にエラー情報を含んだ第1のデプロイメント応答を返し、処理を終了する。
次に、ステップS203において、外部サービス管理プログラム522は、ステップS201で受信した命令の引数であるサイトIDをキーに、サービスデプロイメントマネージャテーブル526より、サービスデプロイメントマネージャID52501を特定する。サービスデプロイメントマネージャID52501を特定できたら、処理がステップS204へ進む。サービスデプロイメントマネージャID52501を特定できなかったら、処理がステップS210へ進み、外部サービス管理プログラム522は、テンプレート管理プログラム322にエラー情報を含んだ第1のデプロイメント応答を返し、処理を終了する。
次に、ステップS204において、外部サービス管理プログラム522は、特定したサービスデプロイメントマネージャID52510のサービスデプロイメントマネージャ600A又は600Bのサービスデプロイメントプログラム622へ、第2のデプロイメント命令を送信する。当該第2のデプロイメント命令に関連付けられる引数は、ステップS201で受信した命令の引数である外部サービスID、API呼出し回数制限、グループID及びユーザIDを含む。第2のデプロイメント命令の送信後、外部サービス管理プログラム522は、既定のタイムアウト時間まで、当該命令の応答(つまり第2のデプロイメント応答)を待つ。
次に、ステップS205において、外部サービス管理プログラム522は、タイムアウト時間内に第2のデプロイメント応答があったか否かを確認する。タイムアウト時間内に当該応答があったら、処理がステップS206に進む。タイムアウト時間内に当該応答がなかったら、処理がステップS108に進み、外部サービス管理プログラム522は、テンプレート管理プログラム322にエラー情報を含んだ第1のデプロイメント応答を返し、処理を終了する。
次に、ステップS206において、外部サービス管理プログラム522は、サービスデプロイメントプログラム622からの第2のデプロイメント応答の内容を確認し、第2のデプロイメント命令のエラーがあるか否かを確認する。エラーが無ければ、処理がステップS207に進む。エラーがあれば、処理がステップS210へ進み、外部サービス管理プログラム522は、テンプレート管理プログラム322にエラー情報を含んだ第1のデプロイメント応答を返し、処理を終了する。
次に、ステップS207において、外部サービス管理プログラム522は、サイトテーブル526を参照し、ステップS201で受信した命令の引数内のサイトIDに対応したローカルフラグ52603が“true”か否か(つまり、デプロイメント先がローカルか否か)を確認する。デプロイメント先がローカルなら、処理がステップS208へ進む。デプロイメント先がローカルでないなら、処理がステップS204へ戻る。ローカルサイト80Lに、リモートサイト80Rにデプロイされたプロキシと通信するプロキシをデプロイするためである。
次に、ステップS208において、外部サービス管理プログラム522は、テンプレート管理プログラム322へ、外部サービスデプロイメント処理が完了した結果としての第1のデプロイメント応答を返し、処理を終了する。第1のデプロイメント応答には、第2のデプロイメント命令に従いデプロイされたプロキシのエンドポイント及び認証トークン情報が、第1のデプロイメント命令の引数である外部サービスIDに対応した呼出し先エンドポイント及び認証トークン情報として関連付けられる(このエンドポイント及び認証トークン情報が、フローテンプレートマネージャ300により、当該外部サービスIDに対応した呼出しノードのプロパティに設定される)。プロキシのエンドポイント及び認証トークン情報は、第2のデプロイメント命令に対する第2のデプロイメント応答に関連付けられている。
図12は、サービスデプロイメントマネージャ600のサービスデプロイメントプログラム622が行う外部サービスデプロイメント処理の一例を示す図である。
まず、ステップS301において、サービスデプロイメントプログラム622は、外部サービス管理プログラム522より、第2のデプロイメント命令を受信する。
次に、ステップS302において、サービスデプロイメントプログラム622は、ステップS301で受信した命令の引数が適切か否かを判断する。具体的には、サービスデプロイメントプログラム622は、引数に、外部サービスID、グループID及びAPI呼出し回数制限が指定されていれば適切と判断する。引数が適切なら、処理がステップS303へ進む。引数が適切でないならば、処理がステップS308へ進み、サービスデプロイメントプログラム622は、外部サービス管理プログラム522にエラー情報を含んだ第2のデプロイメント応答を返し、処理を終了する。
次に、ステップS303において、サービスデプロイメントプログラム622は、サービス実行基盤700のサービス管理プログラム722へ、第3の外部サービスデプロイメント命令を送信する。当該命令には、外部サービスID、ネームスペースID(グループIDと同じ値)、及び、API呼出し回数制限が引数として関連付けられる。当該命令に従い、外部サービス及びそれのプロキシのうちの少なくともプロキシが、サービス実行基盤700における複数のネームスペースのうち、当該ネームスペースIDに対応したネームスペースにデプロイされる。当該プロキシには、API呼出し回数制限や認証トークン情報が関連付けられる。当該命令の送信後、サービスデプロイメントプログラム622は、既定のタイムアウト時間まで、当該命令に対する応答である第3のデプロイメント応答を待つ。
次に、ステップS304において、サービスデプロイメントプログラム622は、タイムアウト時間内に第3のデプロイメント応答があったか否かを確認する。タイムアウト時間内に応答があったら、処理がステップS305へ進む。タイムアウト時間内に応答がなかったら、処理がステップS308に進み、サービスデプロイメントプログラム622は、外部サービス管理プログラム522にエラー情報を含んだ第2のデプロイメント応答を返し、処理を終了する。
次に、ステップS305において、サービスデプロイメントプログラム622は、サービス管理プログラム722からの第3のデプロイメント応答の内容を確認し、第3のデプロイメント命令のエラーがあるか否かを確認する。エラーが無ければ、処理がステップS306に進む。エラーがあれば、処理がステップS308へ進み、サービスデプロイメントプログラム622は、外部サービス管理プログラム522にエラー情報を含んだ第2のデプロイメント応答を返し、処理を終了する。
次に、ステップS306において、サービスデプロイメントプログラム622は、ステップS303の命令に対する結果(具体的には、情報62401~62411を含んだエントリ)を、サービスデプロイメントテーブル624に追加する。
次に、ステップS307において、サービスデプロイメントプログラム622は、ステップ306のサービスデプロイメントテーブル624への追加処理が正常に完了したか否かを確認する。追加処理が正常に完了したら、処理がステップS308(YES)へ進む。追加処理の結果、エラーが返ってきたら、処理がステップS308(NO)へ進み、サービスデプロイメントプログラム622は、外部サービス管理プログラム522にエラー情報を含んだ第2のデプロイメント応答を返し、処理を終了する。
次に、ステップS308において、サービスデプロイメントプログラム622は、外部サービス管理プログラム522に、第2のデプロイメント命令に従う処理が完了した結果としての第2のデプロイメント応答を返し、処理を終了する。第2のデプロイメント応答には、外部サービス及びプロキシのエンドポイントと、プロキシの認証トークン情報とが関連付けられる。
<ノード追加処理の説明>
図13は、外部サービスマネージャ500の呼出しノード管理プログラム528が行うノード追加処理の一例を示す図である。
まず、ステップS401において、呼出しノード管理プログラム528は、テンプレート管理プログラム322より、呼出しノード追加命令を受信する。
次に、ステップS402において、呼出しノード管理プログラム528は、ステップS401で受信した命令の引数が適切か否かを判断する。具体的には、テンプレート管理プログラム322は、当該引数に、追加される外部サービスの外部サービスIDの配列が指定されていれば適切と判断する。当該引数が適切なら、処理がステップS403へ進む。当該引数が適切でないならば、処理がステップS410へ進み、テンプレート管理プログラム322は、テンプレート管理プログラム322にエラー情報を含んだ応答を返し、処理を終了する。
次に、ステップS403において、呼出しノード管理プログラム528は、ステップS401で受信した命令の引数の配列から、外部サービスIDを一つ選出する。
次に、ステップS404において、呼出しノード管理プログラム528は、選出した外部サービスIDをキーに、呼出しノードテーブル523より、呼出しノードID52301を特定する。呼出しノードID52301を特定できたら、処理がステップS405へ進む。呼出しノードID52301を特定できなかったら、処理がステップS409へ進み、呼出しノード管理プログラム528は、テンプレート管理プログラム322にエラー情報を含んだ応答を返し、処理を終了する。
次に、ステップS405において、呼出しノード管理プログラム528は、ビジュアルプログラミングツール40へノード追加命令を送信する。当該命令の引数には、呼出しノードIDが指定される。当該命令の送信後、呼出しノード管理プログラム528は、既定のタイムアウト時間まで、当該命令の応答を待つ。
次に、ステップS406において、呼出しノード管理プログラム528は、タイムアウト時間内に応答があったか否かを確認する。タイムアウト時間内に応答があったら、処理がステップS407へ進む。タイムアウト時間内に応答がなかったら、処理がステップS409に進み、呼出しノード管理プログラム528は、テンプレート管理プログラム322にエラー情報を含んだ応答を返し、処理を終了する。
次に、ステップS407において、呼出しノード管理プログラム528は、応答を確認し、ステップS405で送信された命令のエラーがあるか否かを確認する。エラーが無ければ、処理がステップS408へ進む。エラーがあれば、処理がステップS409へ進み、呼出しノード管理プログラム528は、テンプレート管理プログラム322にエラー情報を含んだ応答を返し、処理を終了する。
次に、ステップS408において、呼出しノード管理プログラム528は、ステップS401で受信した命令の引数の配列から選出すべき外部サービスIDがあるか否かを確認する。選出すべき外部サービスIDがあれば、処理がステップS403に戻る。選出すべき外部サービスIDがなければ、処理がステップS409へ進む。
次に、ステップS409において、呼出しノード管理プログラム528は、テンプレート管理プログラム322へ、ノード追加処理が完了した結果としての応答を返し、処理を終了する。
なお、本実施形態では、ノード追加処理は、テンプレート管理プログラム322からの命令に従って行われる。それに代えて又は加えて、例えば、新たな外部サービスの追加が呼出しノード管理プログラム528により検出された場合に、呼出しノード管理プログラム528が、ステップS405を行ってもよい。
<外部サービスアンデプロイメント処理の説明>
図14は、フローテンプレートマネージャ300のテンプレート管理プログラム322が行う外部サービスアンデプロイメント処理の一例を示す図である。
まず、ステップS501において、テンプレート管理プログラム322は、テンプレートGUIプログラム323より、外部サービスをアンデプロイすることの命令を受信する。当該命令に関連付けられる引数は、リソースID(外部サービスのインスタンスのID)、サイトID及びグループIDを含む。また、当該命令は、例えば、フローエディタGUIにおいてフローから呼出しノードの削除が行われ、当該削除された呼出しノードがフローエディタ41からフローテンプレートマネージャ300に通知されたことを契機に、送信されてもよい。
次に、ステップS502において、テンプレート管理プログラム322は、ステップ501で受信した命令の引数が適切か否かを判断する。具体的には、テンプレート管理プログラム322は、当該引数にリソースIDが指定されていれば適切と判断する。当該引数が適切ならば、処理がステップS503に進む。当該引数が適切でないならば、処理がステップS506に進み、テンプレート管理プログラム322は、テンプレートGUIプログラム323にエラー情報を含んだ応答を返し、処理を終了する。
次に、ステップS503において、テンプレート管理プログラム322は、外部サービスマネージャ500の外部サービス管理プログラム522へ、外部サービスをアンデプロイすることの命令である第1のアンデプロイメント命令を送信する。当該命令の引数には、ステップS503で受信した命令の引数に含まれているリソースID、サイトID及びグループIDが含まれる。当該命令の送信後、テンプレート管理プログラム322は、既定のタイムアウト時間まで、当該命令の応答(つまり、第1のアンデプロイメント応答)を待つ。
次に、ステップS504において、タイムアウト時間内に第1のアンデプロイメント応答があったら、処理がステップS505へ進む。タイムアウト時間内に第1のアンデプロイメント応答がなかったら、処理がステップS506に進み、テンプレート管理プログラム322は、テンプレートGUIプログラム323にエラー情報を含んだ応答を返し、処理を終了する。
次に、ステップS505において、テンプレート管理プログラム322は、外部サービス管理プログラム522からの第1のアンデプロイメント応答の内容を確認し、第1のアンデプロイメント命令のエラーがあるか否かを確認する。エラーが無ければ、処理がステップS506(NO)に進む。エラーがあれば、ステップS506(YES)へ進み、テンプレート管理プログラム322は、テンプレートGUIプログラム323にエラー情報を含んだ応答を返し、処理を終了する。
次に、ステップS506において、テンプレート管理プログラム322は、テンプレートGUIプログラム323に、外部サービスアンデプロイメント処理が完了した結果を示す応答を返し、処理を終了する。
図15は、外部サービスマネージャ500の外部サービス管理プログラム522が行う外部サービスアンデプロイメント処理の一例を示す図である。
まず、ステップS601において、外部サービス管理プログラム522は、テンプレート管理プログラム322より、第1のアンデプロイメント命令を受信する。
次に、ステップS602において、外部サービス管理プログラム522は、ステップ601で受信した命令の引数が適切か否かを判断する。具体的には、外部サービス管理プログラム522は、当該引数にリソースIDとサイトIDが指定されていれば適切と判断する。当該引数が適切ならば、処理がステップS603に進む。当該引数が適切でないならば、処理がステップS608に進み、外部サービス管理プログラム522、テンプレート管理プログラム322にエラー情報を含んだ第1のアンデプロイメント応答を返し、処理を終了する。
次に、ステップS603において、外部サービス管理プログラム522は、第2のアンデプロイメント命令の引数内のサイトIDをキーに、サービスデプロイメントマネージャテーブル525より、サービスデプロイメントマネージャID52501を特定する。サービスデプロイメントマネージャID52501を特定できたら、処理がステップS604へ進む。サービスデプロイメントマネージャID52501を特定できなかったら、処理がステップS608へ進み、外部サービス管理プログラム522は、テンプレート管理プログラム322にエラー情報を含んだ第1のアンデプロイメント応答を返し、処理を終了する。
次に、ステップS604において、外部サービス管理プログラム522は、特定したサービスデプロイメントマネージャID52501に対応したサービスデプロイメントマネージャ600のサービスデプロイメントプログラム622へ、上記リソースIDから特定される外部インスタンス(外部サービスのインスタンス)をアンデプロイすることの命令である第2のアンデプロイメント命令を送信する。当該第2のアンデプロイメント命令には、第1のアンデプロイメント命令の引数に含まれているリソースID及びグループIDが含まれる。当該命令の送信後、外部サービス管理プログラム522は、既定のタイムアウト時間まで、当該命令の応答(つまり第2のアンデプロイメント応答)を待つ。
次に、ステップS605において、外部サービス管理プログラム522は、タイムアウト時間内に第2のアンデプロイメント応答があったか否かを確認する。タイムアウト時間内に第2のアンデプロイメント応答があったら、処理がステップS606に進む。タイムアウト時間内に第2のアンデプロイメント応答がなかったら、処理がステップS608に進み、外部サービス管理プログラム522は、テンプレート管理プログラム322にエラー情報を含んだ第1のアンデプロイメント応答を返し、処理を終了する。
次に、ステップS606において、外部サービス管理プログラム522は、サービスデプロイメントプログラム622からの第2のアンデプロイメント応答の内容を確認し、第2のアンデプロイメント命令のエラーがあるか否かを確認する。エラーが無ければ、処理がステップS607に進む。エラーがあれば、処理がステップS609へ進み、外部サービス管理プログラム522は、テンプレート管理プログラム322にエラー情報を含んだ第1のアンデプロイメント応答を返し、処理を終了する。
次に、ステップS607において、外部サービス管理プログラム522は、サイトテーブル526を参照し、ステップS601で受信した命令の引数内のサイトIDに対応したローカルフラグ52603が“true”か否か(つまり、アンデプロイメントされるインスタンスのあるサイトがローカルか否か)を確認する。当該サイトがローカルなら、処理がステップS608へ進む。当該サイトがローカルでないなら、処理がステップS604へ戻る。ローカルサイト80Lから、リモートサイト80Rからアンデプロイされたプロキシインスタンスと通信するプロキシインスタンスもアンデプロイするためである。
次に、ステップS608において、外部サービス管理プログラム522は、テンプレート管理プログラム322へ、外部サービスデプロイ処理が完了した結果としての第1のアンデプロイメント応答を返し、処理を終了する。
図16は、サービスデプロイメントマネージャ600のサービスデプロイメントプログラム622が行う外部サービスアンデプロイメント処理の一例を示す図である。
まず、ステップS701において、サービスデプロイメントプログラム622は、外部サービス管理プログラム522より、第2のアンデプロイメント命令を受信する。
次に、ステップS702において、サービスデプロイメントプログラム622は、ステップS701で受信した命令の引数が適切か否かを判断する。具体的には、サービスデプロイメントプログラム622は、当該引数に、リソースIDが指定されていれば適切と判断する。当該引数が適切なら、処理がステップS703へ進む。当該引数が適切でないならば、処理がステップS708へ進み、サービスデプロイメントプログラム622は、外部サービス管理プログラム522にエラー情報を含んだ第2のアンデプロイメント応答を返し、処理を終了する。
次に、ステップS703において、サービスデプロイメントプログラム622は、サービス実行基盤700のサービス管理プログラム722へ、上記リソースIDに対応したインスタンスをアンデプロイすることの命令である第3のアンデプロイメント命令を送信する。当該命令の送信後、サービスデプロイメントプログラム622は、既定のタイムアウト時間まで、当該命令の応答(つまり第3のアンデプロイメント応答)を待つ。
次に、ステップS704において、サービスデプロイメントプログラム622は、タイムアウト時間内に第3のアンデプロイメント応答があったか否かを確認する。タイムアウト時間内に第3のアンデプロイメント応答があったら、処理がステップS705へ進む。タイムアウト時間内に第3のアンデプロイメント応答がなかったら、処理がステップS708に進み、サービスデプロイメントプログラム622は、外部サービス管理プログラム522にエラー情報を含んだ第2のアンデプロイメント応答を返し、処理を終了する。
次に、ステップS705において、サービスデプロイメントプログラム622は、サービス管理プログラム722からの第3のアンデプロイメント応答の内容を確認し、第3のアンデプロイメント命令のエラーがあるか否かを確認する。エラーが無ければ、処理がステップS706に進む。エラーがあれば、処理がステップS708へ進み、サービスデプロイメントプログラム622は、外部サービス管理プログラム522にエラー情報を含んだ第2のアンデプロイメント応答を返し、処理を終了する。
次に、ステップS706において、サービスデプロイメントプログラム622は、ステップS703の第3のアンデプロイメント命令に従いアンデプロイされたインスタンスに対応したエントリを、サービスデプロイメントテーブル624より削除する。
次に、ステップS707において、サービスデプロイメントプログラム622は、ステップ706の削除処理が正常に完了したか否かを確認する。当該削除処理が正常に完了したら、処理がステップS708(YES)へ進む。当該削除処理の結果、エラーが返ってきたら、処理がステップS708(NO)へ進み、サービスデプロイメントプログラム622は、外部サービス管理プログラム522にエラー情報を含んだ第2のアンデプロイメント応答を返し、処理を終了する。
次に、ステップS708において、サービスデプロイメントプログラム622は、外部サービス管理プログラム522に、外部サービスアンデプロイメント処理が完了した結果を示す第2のアンデプロイメント応答を返し、処理を終了する。
以上のように、本実施形態に係る外部サービスアンデプロイメント処理では、インスタンスがアンデプロイされ、アンデプロイされたインスタンスに対応した呼出しノードの本体(オリジナル)は削除されない。
以上、一実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実行することが可能である。例えば、外部サービスマネージャ500は、フローテンプレートマネージャ300に含まれていてもよい。