以下、図面を用いて、本発明の一実施形態を詳述する。
ただし、本発明は後述する実施形態に限定されるものではなく、添付した特許請求の範囲の趣旨内における様々な変形例および同等の構成が含まれる。例えば、前述した実施形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに本発明は限定されない。
なお、以下の説明では、「インターフェース装置」は、一つ以上のインターフェースデバイスでよい。当該一つ以上のインターフェースデバイスは、下記のうちの少なくとも一つでよい。
・一つ以上の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))といった広義のプロセッサデバイスでもよい。
また、以下の説明では、各情報を「テーブル」または「JSON(JavaScript Object Notation)フォーマットのテキストデータ」形式にて説明するが(JavaScriptは登録商標)、これら情報は必ずしもテーブルによるデータ構造で表現されていなくてもよく、リスト、DB、キュー等のデータ構造や、Yaml、XML等フォーマットのテキストデータや、またそれ以外で表現されていてもよい。そのため、データ構造に依存しないことを示すために「テーブル」、「リスト」、「DB」、「キュー」等について単に「情報」と呼ぶことがある。また、各情報の内容を説明する際に、「識別情報」、「識別子」、「ID(Identification)」という表現を用いることが可能であり、これらについてはお互いに置換が可能である。
また、以下の説明では、GUI(Graphical User Interface)上のボタンの押下を起点に実行される処理は、対応するAPIの呼び出しを起点に実行されてもよい。
また、以下の説明では、各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリ、ハードディスク、SSD(Solid State Drive)等の記憶装置、又は、ICカード、SDカード、DVD等の記録媒体に格納することができる。
また、以下の説明では、前述した各構成、機能、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等により、ハードウェアで実現してもよく、プロセッサがそれぞれの機能を実現するプログラムを解釈し実行することにより、ソフトウェアで実現してもよい。
また、以下の説明では、「xxx機能」の表現にて機能を説明することがあるが、機能は、一つ以上のコンピュータプログラムがプロセッサによって実行されることで実現されてもよいし、一つ以上のハードウェア回路(例えばFPGAまたはASIC)によって実現されてもよい。プログラムがプロセッサによって実行されることで機能が実現される場合、定められた処理が、適宜に記憶装置および/またはインターフェース装置等を用いながら行われるため、機能はプロセッサの少なくとも一部とされてもよい。機能を主語として説明された処理は、プロセッサあるいはそのプロセッサを有する装置が行う処理としてもよい。プログラムは、プログラムソースからインストールされてもよい。プログラムソースは、例えば、プログラム配布計算機または計算機が読み取り可能な記録媒体(例えば非一時的な記録媒体)であってもよい。各機能の説明は一例であり、複数の機能が一つの機能にまとめられたり、一つの機能が複数の機能に分割されたりしてもよい。
また、以下の説明では、異なる計算機間にてデータを取得したりプログラムの機能を呼び出したりする際は、実際にはWeb API等の通信プロトコルを用いたリモートプロシージャコールを行っている場合がある。
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号のうちの共通部分を使用し、同種の要素を区別する場合は、参照符号を使用することがある。例えば、ビジュアルプログラミングシステムを区別しない場合には、「ビジュアルプログラミングシステム10」と言い、ビジュアルプログラミングシステムを区別する場合には、「ビジュアルプログラミングシステム10A」、「ビジュアルプログラミングシステム10B」のように言うことがある。
[第1実施形態]
<システムの説明>
図1は、本発明の第1実施形態におけるシステム構成の一例を示すブロック図である。
ネットワーク80に、ビジュアルプログラミングシステム10と、サービス連携システム50と、サービス管理システム60とが接続される。
本実施形態では、ビジュアルプログラミングシステム10のユーザ40が設定したポリシーを表すポリシー情報に従い、ビジュアルプログラミングシステム10での特定のイベントに応じて外部サービス(以下、サービス)70が作成される。作成されたサービス70が、ビジュアルプログラミングシステム10から接続可能になる。同様に、ビジュアルプログラミングシステム10での特定のイベントに応じて、サービス70の削除および再作成が可能である。更に、サービス70が利用可能か監視され、利用不可能なときは、当該サービス70を呼び出すフローの実行が待機または中断される。
ビジュアルプログラミングシステム10とサービス管理システム60のいずれも、サービス連携システム50一つに対し複数存在してよい。また、サービス70は、サービス管理システム60一つに対し複数存在してよい。また、1つのビジュアルプログラミングシステム10を複数のユーザが利用してもよいし、一人のユーザが複数のビジュアルプログラミングシステム10を利用してもよい。また、各コンポーネントの接続形態はネットワークに限らず、例えば、個々のビジュアルプログラミングシステム10の内部にサービス連携システム50が設けられてもよく、また、サービス連携システム50の内部にサービス管理システム60が設けられてもよい。
ビジュアルプログラミングシステム10は、フローを実装および実行する機能を有する。フローはビジュアルプログラミングシステム10を用いて実装されたプログラムである。ビジュアルプログラミングシステム10はフローを実装したり、実行したりするために、GUIを用いることができ、フローを編集するGUI画面を出力デバイス42に出力することができる。ビジュアルプログラミングシステム10の利用イメージの一例は図2にて詳述する。また、ビジュアルプログラミングシステム10内のコンポーネントの説明は図2説明の後に詳述する。
ユーザ40は、ビジュアルプログラミングシステム10を用いてプログラミングを行うことができる。プログラミングのために、ユーザ40は、液晶ディスプレイなどの出力デバイス42を用いビジュアルプログラミングシステム10のGUI画面を確認し、キーボードおよびポインティングデバイスなどの入力デバイス41を用いて、そのGUI画面を操作できる。ユーザ40の計算機(図示せず)が、入力デバイス41と出力デバイス42を有してよく、ビジュアルプログラミングシステム10と通信してよい。
サービス連携システム50は、ビジュアルプログラミングシステム10から通知されるイベントに応じてサービス70を作成または削除する機能と、ビジュアルプログラミングシステム10にサービス70の接続情報を通知する機能を有する。
具体的には、サービス連携システム50は、イベント検知機能51と、サービス作成機能52と、サービス削除機能53と、情報取得機能54とを有する。また、サービス連携システム50は、ポリシー情報55と、サービス定義情報56と、管理システム情報57とを管理する。
イベント検知機能51は、ビジュアルプログラミングシステム10から送付されるイベントを基に、サービス作成機能52またはサービス削除機能53にサービス70の作成または削除を依頼したり、サービス70の作成または削除の後に当該サービス70の接続情報をビジュアルプログラミングシステム10に送付したりする。イベント検知機能51の具体的な処理は図8にて詳述する。また、イベントの種類およびデータ形式は後述する。
ここで、「接続情報」とは、サービス70のAPIをネットワーク80を介して操作するために必要な情報であり、例えば、サービス70にアクセスするためのエンドポイントを表す情報とサービス70を操作するための認証情報とを含んだ情報である。エンドポイントは、例えば、サービス70のURL(Uniform Resource Locator)やIPアドレス(Internet Protocol)である。認証情報は、例えば、サービス70の認証を通過するためのユーザアカウント名とパスワードの組、もしくはアクセストークンや証明書などの文字列を表す。
サービス作成機能52は、サービス管理システム60にサービス70の作成を依頼する。サービス削除機能53は、サービス管理システム60にサービス70の削除を依頼する。サービス作成機能52の処理は図9にて詳述する。サービス削除機能53の処理は図10にて詳述する。
情報取得機能54は、サービス管理システム60からサービス70の接続情報を取得する。情報取得機能54は、ビジュアルプログラミングシステム10の接続管理機能34により使用される。
ポリシー情報55は、ユーザ40が設定した各サービス70の利用ポリシーを表す情報である。ポリシー情報55のデータ構造は、図5にて詳述する。
サービス定義情報56は、サービス70の利用方法をビジュアルプログラミングシステム10やユーザ40に提示するための情報である。サービス定義情報56は、例えば、サービス70を提供するプロバイダにより作成される。サービス定義情報56のデータ構造は、図5にて詳述する。
管理システム情報57は、サービス連携システム50がサービス管理システム60を利用するための情報である。管理システム情報57のデータ構造は、図5にて詳述する。
サービス管理システム60は、サービス連携システム50からの要求を基にサービス70を作成または削除する機能、および、サービス70への接続情報を保持する機能を有する。サービス管理システム60は、例えばOpen Service Brokerの仕様に則ったインターフェースを持つサービス作成システム(ServiceBroker)でよい。Open Service Brokerとは、コンポーネント化されたサービスを作成し、サービスを利用するための設定値をやりとりするための命令のインターフェースを標準化した仕様である。サービス管理システム60は、サービス70の種類ごとに存在してもよいし、サービスを提供する企業ごとに存在してもよい。図1の例によれば、サービス管理システムにより作成された60Xおよび60Yがある。
ここで、「サービス70の作成」とは、ネットワーク80を介して人やプログラムがサービス70を操作し、その機能を利用できる状態にすることを意味する。本実施形態では、サービス70の作成方法は大きく2種類ある。一つ目は、サービス70のアカウントを発行した後、そのアカウントのために新規にインスタンスを起動し、インスタンス上でサービス70の実態となるプログラムを稼働させた後、発行したアカウントと稼働させたインスタンスとを紐付ける方法である。このインスタンスは、専用のハードウェアで構築あってもよいし、計算機上や計算機上に仮想的技術やコンテナ技術によって構築された仮想的な計算機であってもよい。二つ目は、サービス70に新規アカウントを追加した後、そのアカウントを稼働済みのサービス70に登録する方法である。
また、「サービス70の削除」とは、例えば、下記の少なくとも一つを意味する。
・サービス70から対応するアカウント情報を削除した後、サービス70が個別にインスタンスを作成する場合、インスタンスを停止(物理計算機の場合)または削除(仮想的な計算機の場合)すること。
・サービス70が一つのインスタンスで複数のアカウントに対応する場合、当該アカウントの使用していたデータや設定情報を削除すること。
サービス管理システム60は、サービス作成機能61と、サービス削除機能62とを有する。また、サービス管理システム60は、接続情報一覧63を管理する。
サービス作成機能61は、前述の方法を用いてサービス70を作成する。サービス削除機能62は、前述の方法を用いてサービス70を削除する。
接続情報一覧63は、作成されたサービス70の接続情報(例えば、エンドポイント情報および認証情報を含んだ情報)を保持する。接続情報一覧63が保持する情報は、Web API等を通じて、サービス連携システム50の情報取得機能54が取得できる。接続情報一覧63のデータ構成は、図7にて詳述する。ただし、接続情報一覧63は、図7に示すStatusフィールド704は保持しなくてもよい(一方で、接続情報一覧35は、Statusフィールド704を保持する)。
サービス70は、一つ以上の計算機で実行されるプログラム(インスタンス)である。サービス70は、ネットワーク80を介してプログラムの機能を人や他のプログラムに提供する機能を有する。サービス70には、例えば、データベースサービスや音声認識サービスがある。人や他のプログラムは、例えばWeb APIを用いてサービス70の機能を利用する。サービス70は、ネットワーク80を介して当該サービス70にアクセスするためのURLやIPアドレス等のエンドポイント情報と、アクセス元がサービス70を利用可能か判定するための認証情報とを持つ。エンドポイント情報は、同じサービス70であったとしても、ユーザごとやインスタンスごとにより異なる場合がある。例えば、図1では、サービス70Xについて、エンドポイントが異なるサービスX1とサービスX2とがある。
<GUIの説明>
図2Aは、ビジュアルプログラミングシステム10のGUI画面の一例を示す図である。図2を用いて、ユーザ40がビジュアルプログラミングシステム10を利用する際の操作の一例を説明する。
GUI画面200は、ビジュアルプログラミングシステム10のフロー編集機能11が生成したGUI画面の一例である。本GUI画面200は、出力デバイス42に表示される。ユーザ40は、本GUI画面200を用いて、フローの作成、フローの実行、および、サービス70の利用のためのポリシーの設定を行う。GUI画面200が、フロー編集画面の一例である。
GUI画面200は、実行ボタン201、ユーザ情報UI202、ノードパレット210、編集UI220、プロパティ設定UI230、および、ノード説明UI234を有する。
ノードパレット210には、編集UI220に配置可能な(フロー221の要素になり得る)一つ以上のノード211が表示される。ノード211は、アイコン等により視覚化された処理部品(例えば、ソフトウェアの部品となり得るプログラムモジュール)のうちインスタンス化されていない処理部品を表す。ノード211の定義情報は、ノード定義情報20に格納される。
ノード211は、外部からの入力を受け付けるための入力ノードと、データを別形式のデータに変換する処理ノードと、外部に出力するための出力ノードの3種に大別できる。入力ノードには、例えば、ファイルからデータを入力するファイル読込ノードや、HTTP(Hyper Text Transfer Protocol)リクエストを受けるHTTP受付ノード、ユーザ40により設定された時間間隔で定期的にフローを実行する定期実行ノードがある。処理ノードには、例えば、サービスXの機能をAPI経由で呼び出すサービスX利用ノードや、JSON等の形式で入力された値をXML形式に変換するXMLノードや、任意のJavaScript関数を実行するファンクションノード等がある。出力ノードには、例えば、データをファイルに保存する結果保存ノードや、HTTPレスポンスを返すHTTP出力ノードがある。
ユーザ40は、ノードパレット210からノード211を編集UI220に配置する。これにより、ノード211が表す処理部品がインスタンス化される。編集UI220におけるノード222は、インスタンス化された処理部品を表す。ノード222間を線223で繋ぎ合わせることでフロー221を作成できる。フロー221は、複数のノード222と、ノード222間を結ぶ線223で表すことができる。フロー221に配置されたノード222が表す処理部品には、一意のnode_id(node_id401(図4)が表すノードID)が付与される。結果として、処理部品がインスタンス化される。このため、ユーザ40は、フロー221上に、同じノード定義21(図1参照)を持つ処理部品を表すノード222を複数配置できる。
ノード222同士の接続は、あるノード222の出力が別のノード222の入力となる接続である。ノード222の左端が入力を表し、右端が出力を表す。例えば、フロー221において、定期実行ノード222-1の出力が、サービスX利用ノード222-2の入力となり、サービスX利用ノード222-2の出力は、もう一つのサービスX利用ノード222-3の入力となる。
また、フロー221では、ノード222間の接続関係に基づいてフロー実行機能12による処理の実行順序が決定される。例えば、定期実行ノード222-1の処理の実行の次にサービスX利用ノード222-2の処理が実行される。例えば、サービスX利用ノード222-2または222-3(サービス利用ノードの一例)には、当該ノードのステータス224を表示できる。各サービス利用ノードについて、ステータス表示の有無、内容および変更条件は、後述するノード定義21の概要定義22に記述してある。概要定義22をフロー編集機能11が解釈してサービス利用ノード222のステータスを表示する。
ユーザ40は、編集UI220中のノード222を、入力デバイス41を用いて選択すると、フロー編集機能11が、当該ノード222に対応した情報に、プロパティUI230に表示される情報と、ノード説明UI234に表示される情報とを更新する。プロパティ設定UI230を介して、ユーザ40は、選択したノード222のプロパティを設定できる。プロパティ設定UI230は、UI231~233を有する。なお、「プロパティ」とは、ノード222の一種の属性であり、ノード222のプロパティに、一つ以上のパラメータが設定される。ノード222が、例えば定期実行ノード222-1の場合、プロパティの値として設定され得るパラメータ値として、実行間隔の値がある。プロパティの値は、ノード定義21ごとに異なる。プロパティ設定UI230が有するUIとしては、テキストボックス、リストボックス、ボタンなど、一般的なWebアプリケーションで使用されるGUI部品(コンポーネントの一例)でよく、そのようなUIを用いてノード222のプロパティの設定が行われる。
また、編集UI220上に配置されたノード222の概要、利用方法およびプロパティの説明が、ノード説明UI234に表示される。
ユーザ40が実行ボタン201を押下すると、フロー実行機能12にてフロー221が実行される。フロー221の実行処理は図2の説明後の図1の説明にて詳述する。
ユーザ情報UI202には、ビジュアルプログラミングシステム10にログイン中のユーザ40のプロフィール情報(例えば、アカウント名、所属プロジェクト名)とユーザ40を表すアイコンとが表示される。
ノード222の中には、前述のサービスX利用ノード222-2および222-3のように、ビジュアルプログラミングシステム10の外部にあるサービス70を呼び出しサービス70の機能を利用するノード222が存在する。このようなノードを、「サービス利用ノード」と呼称する。一つのサービス利用ノード222が、複数のサービス70を操作する場合もあれば、一つのサービス70を操作する場合もる。また、データ格納ノードとデータ取得ノードのように、一つのサービス70に対して複数種類のノード222が存在する場合もある(例えば、サービスY学習実行ノード、サービスY推論実行ノード)。このように、サービス利用ノード222とサービス70との対応関係は、1:1でもよいし、1:多でもよいし、多:1でもよいし、多:多でもよい。
サービス利用ノード222のプロパティは、通常ノード(サービス利用ノード以外のノード)のプロパティが持つパラメータ項目以外に、サービス70の接続情報やサービス70の作成または削除のポリシーが設定される接続設定プロパティを含む。接続設定プロパティの設定のため、サービス利用ノードのプロパティ設定UI230には、当該サービス利用ノードの接続先を選択するためのリストボックス231と、接続設定を編集することを指定するためのボタン232とがある。一つのサービス利用ノードが、複数の接続設定プロパティを保有してもよい。
サービス利用ノードの接続設定プロパティのユーザ40による入力を補助するため、ノード設定UI234には、ノードが使用するサービス70の概要や課金形式などのサービス仕様を表す情報が表示されてよい。
また、ノード211として、稼働確認ノード211が用意されてもよい。稼働確認ノード211は、当該稼働確認ノード211の実行中において、当該ノード211より後にフロー221の実行において呼び出される可能性のあるサービス70が全てアクセス可能か確認し、アクセスできないサービス70が一つでもあれば当該フロー221の実行を待機または中断するノードである。稼働確認ノードは、入力ノードや処理ノードとして構築されてよい。稼働確認ノードの処理は、図12にて詳述する。
図2Bは、サービス利用ノード222についてのプロパティ設定UI230の幾つかの例を示す。
プロパティ設定UI230-1は、例えば初めのプロパティ設定UI230である。ユーザ40が、リストボックス231を入力デバイス41を用いて選択すると、編集UI220で選択されたサービス利用ノードに接続可能なサービス70の一覧である接続設定一覧235が、フロー編集機能11により表示される(プロパティ選択UI230-2)。
接続設定一覧235において、選択可能な接続設定は、「新規追加」以外の文字列、例えば、「X1-9dbc4b3b」や「X1-c8dc722j」といった文字列により表される。接続設定を表す文字列は、ユーザ40(またはユーザ40が所属するプロジェクト)が既に作成しているサービス70の接続情報を表すID(例えば、後述のServiceIdとResourceIdとの組合せ)か、もしくはユーザ40が後述の接続名242にて登録した任意の文字列である。「ユーザ40(またはユーザ40が所属するプロジェクト)が既に作成しているサービス70」は、例えば、接続情報一覧35のうち、ユーザ40のID(または、ユーザ40のIDとプロジェクトのID)に適合する後述のCredential703に対応するサービス70でよい。「X1-9dbc4b3b」または「X1-c8dc722j」といった接続設定を選択するということは、例えば、エンドポイントを変えて作成済のサービスを利用することを意味する。ここで、「接続設定」とは、サービス70の接続情報とポリシー情報との両方の設定を意味する。一方、接続設定一覧235の「新規追加」という項目は、ユーザ40が新規にサービス70を作成したい場合に選択する。
ユーザ40が接続設定一覧235から既存の接続設定、もしくは新規追加を選択後に編集ボタン232を押下すると、フロー編集機能11により、プロパティ設定UI230に、接続設定の一つ以上の入力項目が表示される(プロパティ選択UI230-3)。
接続設定の一つ以上の入力項目にそれぞれ対応した一つ以上のUIの一例は、接続名242、エンドポイント243、認証情報244、自動作成条件245、自動削除条件246、リスタート条件247、および、カスタムポリシー248がある。ユーザ40は、これらのUI242~248を介して情報を入力後、設定ボタン240を押下することにより、新しい接続設定を生成できる。UI242~248の少なくとも一つについて、入力情報は、当該UIについて予め設定された特定の情報(値)が、ユーザ40からの特段の入力がなかったときに採用されてもよい。また、ユーザ40は、削除ボタン241を押下することにより既存の接続設定を削除できる。更に、プロパティ設定UI230-3には、ユーザ40が手動でサービス70を作成または削除するために、手動作成ボタン249や手動削除ボタン250が表示されてよい。
接続名242は、接続設定一覧235に表示される接続設定の名前の入力を受け付ける入力UIである。ユーザ40は、接続名として分かりやすい名前を設定できる。接続名242の初期値には、例えば、後述のServiceIdとResourceIdとの組合せでよい。
エンドポイント243は、サービス70のエンドポイント(例えば、サービス70にアクセスするためのURLやIPアドレス)の入力UIである。認証情報244は、サービス70の機能を使用するための認証情報(例えば、サービス70上のアカウント名とパスワードの組や、アクセストークン情報)の入力UIである。エンドポイントおよび認証情報は、本実施形態では、サービス70の作成時に自動で設定される。ただし、ユーザ40が手動でこれらの情報を入力できてもよい。
自動作成条件245は、サービス70を自動的に作成する条件である作成条件の入力を受け付ける入力UIである。作成条件が設定されることで、自動で、ユーザ40がサービス70を必要とするタイミングでそのサービス70を作成し、且つ、そのサービス70の接続情報をサービス利用ノードのプロパティに設定できる。
自動作成条件245は、例えば、作成条件の一覧を表示するリストボックスである。選択可能な作成条件として、例えば、接続設定追加時、ノード使用時、サービス呼び出し時、OFF等がある。これらの作成条件は、後述するイベント通知機能32のイベントに対応している。また、自動作成条件245には、初期値として「ノード使用時」などの特定の作成条件を設定しておくことができる。これにより、ユーザ40が手動で作成条件(ポリシーの少なくとも一部)を入力しなくても、サービス70が必要となるタイミングでサービス70が自動作成される。
「接続設定追加時」とは、ユーザ40が設定ボタン240を押下し、接続設定が接続設定一覧235に追加されたときを意味する。「ノード使用時」は、接続設定を使用したサービス利用ノードがフロー221の構成要素である状態でフローの実行ボタン201が押されたときを意味する。「サービス呼び出し時」は、サービス利用ノードの処理が実行され、実際にビジュアルプログラミングシステム10がサービス70にアクセスするときを意味する。「OFF」は、サービス70の自動作成を行わないことを意味する。ただし、「ノード使用時」において、サービス利用ノードが入力ノードなしに単体で置かれている場合など、編集UI220上に配置されていても明らかに実行されない場合は「ノード使用時」のタイミングとみなされなくてもよい。
「接続設定追加時」により、フロー221の実行前にサービス70が作成されるため、フロー実行時にサービス70の作成を待たなくてよくなる。一方で、サービス70の利用料金が、サービス70が利用可能な状態にある時間長に応じた従量課金に従う場合、フロー221の作成中の段階でも(別の言い方をすれば、サービス70が実際に利用されていなくても利用可能な状態にある限り)、サービス70の利用料金が発生する恐れがある。また、「ノード使用時」(言い換えれば「フロー実行時」)と「サービス呼び出し時」とでサービス70の作成タイミングが異なるので、例えば、フロー221にサービス利用ノードは組み込まれているものの、条件分岐の背後にある等の理由により当該サービス利用ノードが滅多に実行されないような場合、「サービス呼び出し時」が選択されれば、サービス70の不要な稼働を回避できる。一方で、サービス70の作成に時間がかかる場合、サービス70が作成されるまで、フロー221の処理が停止するので、そのような場合には、「接続設定追加時」または「ノード使用時」が選択されることが好ましいと考えられる。
自動削除条件246は、サービス70を自動的に削除する条件である削除条件の入力を受け付ける入力UIである。削除条件が設定されることで、ユーザ40にとってサービス70が不要となったタイミングで自動でそのサービス70が削除される。結果として、不必要なサービス70の課金を回避することや、消費される記憶容量を低減することが期待できる。
自動削除条件246は、例えば、削除条件の一覧を表示するリストボックスである。選択可能な削除条件として、例えば、装置停止時、接続設定削除時、ノード削除時、呼び出し終了時、OFF等がある。これらの削除条件は、後述するイベント通知機能32のイベントに対応している。また、自動削除条件246には、初期値として「ノード削除時」などの削除条件を設定しておくことができる。これにより、ユーザ40が手動で削除条件(ポリシーの少なくとも一部)を入力しなくても、サービス70が不要になったタイミングでサービス70が自動削除される。
「装置停止時」とは、ビジュアルプログラミングシステム10が停止するタイミングを意味する。「接続情報削除時」とは、ユーザ40により削除ボタン241が押下され、対応する接続設定が削除された状態でフローが実行されたタイミングを意味する。「ノード削除時」とは、当該接続設定を使用するサービス利用ノードが全て削除されたタイミングを意味する。「呼び出し終了時」とは、サービス利用ノードからのサービス70の呼び出しが終わったタイミングを意味する。「OFF」は、サービス70の自動削除を行わないことを意味する。
リスタート条件247は、サービス70の異常をビジュアルプログラミングシステム10が検知したときの挙動の条件であるリスタート条件の入力を受け付ける入力UIである。リスタート条件が設定されることで、サービス70が異常状態になったとき自動でサービス70を再作成したり、もしくはサービス70内部のデータの保護を優先して、サービス70が異常状態になってもサービス70の再作成を控えたりなど、ユーザ40は挙動を選択できる。ここで、再作成とは、サービス70を一度削除し、改めて作成することを意味する。ただし、サービス70の機能として、再作成やインスタンス再起動など、サービス70の異常解消につながる処理を実行する機能を有している場合は、その機能が実行されてもよい。
リスタート条件247は、例えば、リスタート条件の一覧を表示するリストボックスである。選択可能なリスタート条件として、例えば、常時、自動作成条件に合わせる、OFF等がある。「常時」とは、サービス70の異常を検知したときは常にサービス70を再作成することを意味する。「自動作成条件に合わせる」とは、サービス70の異常を検知したとき、サービス70の削除だけ行い、その後の再作成は、設定されている自動作成条件に従うことを意味する。「OFF」は、サービス70の自動リスタート(自動での削除および再作成)を行わないことを意味する。
カスタムポリシー248は、サービス70ごとに個別のポリシーの入力を受け付ける入力UIである。つまり、サービス利用ノードについて、ポリシーは、接続されるサービスに依存しない共通のポリシーと、接続されるサービスに依存する個別のポリシーとのうちの少なくとも共通のポリシーを含む。個別のポリシーとしては、例えば、課金プランがある。個別のポリシーは、課金プランに代えてまたは加えて、例えば、サービスのインスタンスの作成先データセンタや、サービスに割り当てるコンピュータリソースの量などが採用されてよい。カスタムポリシー248はなくてもよいし、複数存在してもよい。カスタムポリシー248が受け付ける入力項目は、例えば、サービス70の提供者がサービス定義情報56のCustomPolicy511として登録する。フロー編集機能11は、そのCustomPolicy511を解釈し、カスタムポリシー248を生成する。CustomPolicy511のデータ構造およびカスタムポリシー248の生成方法は、図5および図6にて詳述する。
<システムの説明(続き)>
図1の説明に戻る。
ビジュアルプログラミングシステム10は、フロー編集機能11と、フロー実行機能12と、ログイン機能14と、連携機能30とを有する。ビジュアルプログラミングシステム10は、フロー情報13と、ノード定義情報20とを管理する。
フロー編集機能11は、GUI画面200を提供し、GUI画面200に対するユーザ操作に応答して、フローを生成、変更または削除したり、フロー実行機能12を呼び出したりする。フロー編集機能11は、ノードパレット210、プロパティ設定230およびノード説明234の各々の表示を、後述のノード定義情報20にあるノード定義21を解釈して決定する。フロー編集機能11は、後述の第2実施形態の通り、Webアプリケーションとしてユーザ40に提供されてもよい。Webアプリケーションとしてのフロー編集機能を含むシステムの構成例は、図14にて詳述する。
フロー実行機能12は、フロー編集機能11からの要求を受けてフロー221を解釈および実行する。フロー221を解釈するとは、フロー情報13を解釈し、フロー情報13が表すフロー221を構成するノード222の種類とプロパティと接続関係を認識することを含む。フロー221を実行するとは、フロー221における前述の入力ノードを見つけ、入力ノードからノード222の接続に沿って順番にノード222の処理定義24のプログラムを実行することを含む。入力ノードが、定期的に実行されたり、HTTPリクエスト受け付けのように他入力をもとに処理を実行したりする場合は、そのたびに入力フローに接続されている一連のフローが実行される。処理定義24プログラムの仕様は後述する。
フロー情報13は、フロー221の実態としてのデータである。フロー情報13は、例えば、JSONで記載されている。フロー情報13は、フロー221内の全ノードを表す情報と、各ノードのプロパティを表す情報と、ノード間の接続関係を表す情報とを含む。フロー情報13のデータ構造の一例は、図4にて詳述する。
ログイン機能14は、ユーザ40にログイン画面を提示し、ログインされたのち、そのアカウント名と、所属プロジェクトと、ユーザ40を表すアイコンとを表す情報を含むプロフィール情報を管理する。プロフィール情報が、フロー編集機能11により、GUI画面200のユーザ情報UI202に表示される。
ノード定義情報20は、各ノード211の定義であるノード定義21を含む。ノード定義21は、定期実行ノード、サービスX利用ノードのようにノードごとに存在し、例えばHTMLとJavaScriptのような形式言語とプログラミング言語により記述される。ノード定義21は、概要定義22と、プロパティ定義23と、処理定義24とを有する。ノード定義21の以下の説明において、以下、一つのノードを例に取る(図1の説明において「注目ノード」)。
概要定義22は、例えば、注目ノードの概要を表す情報である。概要定義22は、例えば、注目ノードの名称を表す情報、注目ノードの種類(例えば、“処理ノード”)を表す情報、ノード説明234の表示内容を表すノード説明情報、および、注目ノードのステータス定義を表す情報、を含む。ノード説明情報は、表示する文章のテキストデータでもよいし、特定のプログラムを実行した結果を表す情報でもよい。注目ノードのステータス定義は、条件分岐を用いて特定の条件を満たす場合に、特定の文字列をステータスとして表示するというプログラムでよい。当該プログラムは、注目ノード211が編集UI220に配置されたタイミングで一度のみ実行される。当該プログラム内に定期実行処理が記述されていれば、定期的にステータスを更新することができる。
注目ノードのプロパティ定義23は、プロパティのデータ構造やプロパティ設定UI230を構築するためプログラムの定義を表す。
処理定義24は、フロー221の実行時に当該フロー221内の注目ノードが行うべき処理のプログラムの定義を表す。処理定義24のプログラムは、例えばJavaScriptのオブジェクト形式など、ハッシュマップの形式でデータの入出力ができる。この処理で出力されたデータが、フロー221にて注目ノードの出力側に接続しているノードの入力値となる。処理定義24のプログラム中では、プロパティ設定UI230にて設定されたプロパティの値が変数として利用できる。
ここで、サービス利用ノードのノード定義21の特徴の一例を説明する。サービス利用ノードについてノード説明UI234に表示される情報は、ポリシー設定機能31により実行されたノード説明取得処理の返り値でよい。また、ステータス定義の値は、接続情報一覧35(図7参照)の対応するレコードのStatus704の値でよい。対応するレコードとは、ResourceId700が接続設定プロパティ内のResourceIdと同じレコードである。また、プロパティ定義23が、接続設定プロパティとServiceIdプロパティを持つ。接続設定プロパティの入力UIは、例えば、呼び出されたポリシー設定機能31により生成される。ServiceIdの入力UIは無い。ユーザ40によりServiceIdが変更されないためである。また、処理定義24は、サービス70を呼び出す際は、接続管理機能34にResourceIdを引数として接続情報取得処理を実施し、その返り値として得た接続情報でサービス70を呼び出す。
連携機能30は、ビジュアルプログラミングシステム10からサービス連携システム50を呼び出したり、サービス70の接続情報を管理したり、サービス70の状態を監視したりする。連携機能30は、ポリシー設定機能31、イベント通知機能32、サービス監視機能33、および、接続管理機能34を含む。連携機能30は、接続情報一覧35を管理する。
ポリシー設定機能31は、サービス利用ノードのノード説明UI234、および、プロパティ設定UI230を生成したり、プロパティ設定UI230に対するユーザ操作に応答して値をポリシー情報55に追加したりポリシー情報55から削除したり、手動作成ボタン249もしくは手動削除ボタン250の押下時にサービスの作成または削除を表すイベントをイベント通知機能32に送付したりする。
例えば、ポリシー設定機能31は、ポリシー情報55から、サービス利用ノードのServiceIdと一致するServiceId501を持つレコードを全て取得し、取得した各レコード内のName503の値を、接続設定一覧235に含める。
また、例えば、ポリシー設定機能31は、プロパティ設定UI230-3を生成する際は、カスタムポリシー248以外の入力UIを生成した後、サービス定義情報56から、サービス利用ノードのServiceIdと一致するServiceId510を持つレコードを取得し、そのレコード内のCustomPolicy511を解釈して、カスタムポリシー248の入力UIを生成する。CustomPolicy511を「解釈」するとは、例えば、CustomPolicy511内部の各ポリシー設定項目の「type」が“string”や“number”の場合はテキストボックスを生成し、「type」が“Boolean”の場合はチェックボックスを生成し、「type」が“string”や“number”に加え“enum”を持つ場合は“enum”に定義された項目値を持つリストボックスを生成する等を行うことでよい。このような処理は、CustomPolicy511内のポリシーの数だけ繰り返し行われる。
また、例えば、ポリシー設定機能31は、サービス定義情報56のうちServiceIdと一致するServiceId510を持つレコード内のOverview513、Charges514およびCustomDescription515の値を、ノード説明UI234に表示する。また、当該レコードのCustomPolicy511内にカスタムポリシーの「description」が定義されている場合は、追加で、「description」の値が、ノード説明UI234に表示されてよい。
ユーザ40が設定ボタン240を押下したとき、ポリシー設定機能31は、プロパティ設定UI230に、ResourceIdを含みサービス連携システム50内で一意の値を追加した上で、その値を含んだレコードをポリシー情報55に新規レコードとして追加する。また、削除ボタン241が押下され、既存の接続設定が削除された場合は、ポリシー設定機能31は、ポリシー情報55のうち、削除対象についてのResourceIdと一致するResourceId500を持つレコードを削除する。また、例えば、接続設定が追加または削除される際は、ポリシー設定機能31は、上記の処理の後で、イベント通知機能32に、「接続先追加」または「接続先削除」を表すイベントを通知する。
イベント通知機能32は、ビジュアルプログラミングシステム10内の特定の処理の発生をイベントとしてサービス連携システム50に通知する。このイベントを起点として、サービス連携システム50は、サービス70の作成もしくは削除を行う。イベントの発生を、ビジュアルプログラミングシステム10内の各種プログラム(各種機能)が明示的にイベント通知機能32に通知してもよいし、イベント通知機能32が、各種プログラムの状態を監視することでイベントの発生を検知してもよい。
イベントとしては、例えば、接続設定追加、接続設定削除、ノード使用、ノード削除、サービス呼び出し、サービス呼び出し終了、装置停止、強制作成、および、強制終了がある。
「接続設定追加」は、設定ボタン240の押下時に発生するイベントであり、設定ボタン240の押下を表すイベントである。「接続設定削除」は、削除ボタン241の押下時に発生するイベントであり、削除ボタン241の押下を表すイベントである。「ノード使用」は、フロー実行ボタン201の押下時に発生するイベントであり、フロー実行ボタン201が押下された時にサービス70の接続情報がプロパティに未設定のサービス利用ノードをフロー221が有することを表すイベントである。「ノード削除」は、フロー実行ボタン201の押下時に発生するイベントであり、フロー実行ボタン201が押下された時に接続情報一覧35内にフロー221内で未使用の接続情報があることを表すイベントである。
また、「サービス呼び出し」は、フロー221の実行時に発生するイベントであり、フローの221の実行においてサービス利用ノードの処理によりビジュアルプログラミングシステム10がサービス70にアクセスすることを表すイベントである。「サービス呼び出し終了」は、フロー221の実行時に発生するイベントであり、ビジュアルプログラミングシステム10からサービス70へのアクセスが終了したことを表すイベントである。「装置停止」は、フロー編集機能11やフロー実行機能12のプログラムが停止する際に発生するイベントであり、フロー編集機能11やフロー実行機能12の停止を表すイベントである。
また、「強制作成」は、手動作成ボタン249の押下時やサービス監視機能33でのリスタート処理の際に発生するイベントであり、サービスの強制作成を表すイベントである。「手動終了」は、手動削除ボタン250の押下時やサービス監視機能33でのリスタート処理の際に発生するイベントであり、手動によりサービスを削除することを表すイベントである。
イベントの発生時に、イベント通知機能32がサービス連携システム50に送付するデータであるイベント通知は、例えば、JSON形式のデータであり、“event”、“serviceId”および“resourceId”を含む。
“event”は、発生したイベントの名前もしくは識別子を表す。具体的には、“event”は、前述の「接続設定追加」などのイベントの種類を表す。“event”は、接続設定追加などの文字列を含んでもよいし、イベントの種類の識別子を含んでもよい。“event”は、イベントの発生原因を表す情報を含んでもよい。
“serviceId”は、イベントの対象となるサービス70の識別子を表し、例えば、サービス利用ノードのプロパティが持つServiceIdの値や、接続情報一覧のServiceId701の値を含んでよい。
“resourceId”は、イベントに関係する接続設定または接続情報のResourceIdを表す。例えば、“resourceId”は、イベントを発行したサービス利用ノードの接続設定が持つResourceIdや、サービス監視機能33により異常を検知された接続情報のResourceId700の値を含んでよい。対象となるResourceIdが複数ある場合は、ResourceIdごとにイベントが発行されてよい。
サービス監視機能33は、定期的にサービス70の監視処理を行うことでサービス70の作成完了や異常を検知し、図7で示される接続情報一覧35のStatus704を更新する。また、サービス70の異常を検知した際は、サービス監視機能33は、接続管理機能34にサービス70の接続情報の再取得を依頼したり、それでもなおサービス70の異常を検知したときはポリシー情報55に従い、サービス70を再起動したりする。接続情報の再取得及びリスタートの処理は、図13にて詳述する。
サービス監視機能33により、ユーザ40がGUI画面200からサービス70のステータスを把握できるようになる。また、未稼働やエラー(サービス70のエラー以外にネットワークの到達性が無い場合のエラーも含んでよい)によりサービス70が利用できないとき、接続管理機能34がサービス利用ノードや稼働確認ノードの処理を止めることや、アクセス不可の状態で実行されるフロー221でエラーが発生することを、防げる。更に、サービス70のエラー時にユーザ40が手動でサービス70を再起動する必要がなくなる。
サービス監視機能33は、接続情報一覧35に含まれる接続情報を持つサービス70を監視対象とする。また、サービス70のステータスとしては、例えば、サービス70が作成されていない状態を意味する“Pending”、作成中を意味する“Provisioning”、稼働中を意味する“Running”、および、異常発生中を意味する“Error”などがある。
ここで、サービス監視機能33によるサービス70のステータス検知の具体的な動作の一例を説明する。サービス監視機能33が、接続情報一覧35への新規接続情報が追加されたことを検知した場合、ポリシー情報55から当該接続情報のResourceIdと同じResourceId700を持つレコードのMonitoring512の値を取得する。その後、サービス監視機能33が図6に示す方法で、Monitoring512の内容を基にサービス70の監視処理を実行する。サービス監視機能33が、サービス70の監視処理の応答に合わせて、監視処理において検出されたステータスを、当該サービス70に対応したStatus705として登録する。
ここで、「監視処理」とは、一定時間ごとにサービス70の指定されたURLにアクセスし、正しい応答が返るかチェックする処理を意味する。「正しい応答」とは、例えば、HTTPのステータスコードが200番代のHTTPレスポンスを意味してよい。ただし、HTTPに対応していないサービス70の監視処理は、TCP、UDP、ICMP等により指定されたエンドポイントからの応答が返るかチェックしてもよい。また、監視処理にて応答が返らない場合、サービス監視機能33は、接続管理機能34に接続情報の再取得を依頼し、接続情報が更新された後改めて監視処理を実行してよい。具体的には、例えば、サービス70から応答が返らない、もしくはエラーが返る場合、サービス監視機能33は、そのサービス70のResourceIdを接続情報一覧35から取得し、そのResourceIdを引数として接続管理機能34に接続情報の再取得を依頼し、その完了通知を取得後、改めて監視処理を実行してよい。
接続管理機能34は、接続情報一覧35を作成、変更および削除したり、サービス利用ノードに接続情報を伝達したりする。本機能34により、ユーザ40による接続情報の管理や、サービス利用ノードへの手動で接続情報設定が不要になり、ユーザ40の負荷が削減される。
接続管理機能34は、サービス連携システム50からの通知を基に、作成されたサービス70の接続情報を接続情報一覧35に追加したり、削除されたサービス70の接続情報を接続情報一覧35から削除したりする。この処理は、図8にて詳述する。
また、接続管理機能34は、サービス監視機能33からの依頼を受け、サービス70の接続情報の再取得を行う。具体的には、例えば、接続管理機能34は、サービス監視機能33から対象となるサービス70のResourceId700を引数としてサービス70の接続情報再取得を依頼されると、情報取得機能54にResourceId700の接続情報の取得を依頼する。接続管理機能34は、その応答として取得した接続情報にて、接続情報一覧35のResourceId700が一致するレコードのEndpoint702とCredential703の値を更新し、サービス監視機能33に応答を返す。
また、サービス利用ノードからResourceIdを引数としてサービス70の接続情報の取得依頼を受けると、接続管理機能34は、接続情報一覧35から、引数のResourceIdと一致するResourceId700を持つレコードを取得する。当該レコード内のStatus704が“Running”のときは、接続管理機能34は、当該レコード内のEndpoint702とCredential703の値をサービス利用ノードに返り値として渡す。当該レコード内のStatus704が“Error”のときは、接続管理機能34は、サービス利用ノードにErrorを通知する。当該レコード内のStatus704が“Running”および“Error”のいずれでもないときは、接続管理機能34は、Status704が“Running”になるまで一定時間応答を待つ。本処理は、図11にて詳述する。
接続情報一覧35は、サービス70の接続情報を保持する。接続情報一覧35のデータ構造は、図7にて詳述する。
<ハードウェア構成>
図3は、計算機のハードウェア構成の一例を示すブロック図である。
計算機300は、ビジュアルプログラミングシステム10、サービス連携システム50、サービス管理システム60、および、サービス70のうちの少なくとも一つの実行基盤の構成要素の一例である。すなわち、ビジュアルプログラミングシステム10、サービス連携システム50、サービス管理システム60、および、サービス70のうちの少なくとも一つは、一つ以上の計算機300を基に実現される。なお、実行基盤は、単一の計算機でもよいし、複数の計算機を含むクラウド基盤のようなシステムでもよい。ビジュアルプログラミングシステム10、サービス連携システム50、サービス管理システム60、および、サービス70のうちの少なくとも一つは、計算機300のような物理的な計算機上に実現されてもよいが、仮想的な計算機上で実現されてもよい。フロー情報13、ノード定義情報20、接続情報一覧35、ポリシー情報55、サービス定義情報56、管理システム情報57および接続情報一覧63が、一つ以上の記憶装置に格納されてよい。一つ以上の記憶装置の少なくとも一つは、いずれかの実行基盤内に存在してもよいし、実行基盤が通信可能な外部の記憶装置でもよい。
図3において、計算機300には、プロセッサ301、通信インターフェースデバイス303、主記憶デバイス304および補助記憶デバイス305が設けられている。プロセッサ301、通信インターフェースデバイス303、主記憶デバイス304および補助記憶デバイス305は、内部バス306を介して相互に接続されている。
また、計算機300のヒューマンインターフェースとして、入力デバイス307および出力デバイス308が設けられていてもよい。入力デバイス307および出力デバイス308は、内部バス306に接続されてよい。
プロセッサ301は、計算機300全体の動作制御を司るハードウェアである。主記憶デバイス304は、例えば、半導体メモリから構成され、各種プログラムやデータを保持する。具体的には、例えば、ビジュアルプログラミングシステム10の主記憶デバイス304には、フロー編集機能11、フロー実行機能12、ログイン機能14、連携機能30を実現するための一つ以上のプログラム、およびフロー情報13、ノード定義情報20を保持することができる。また、サービス連携システム50の主記憶デバイス304には、イベント検知機能51、サービス作成機能52、サービス削除機能53および情報取得機能54を実現するための一つ以上のプログラム、および、ポリシー情報55、サービス定義情報56および管理システム情報57を保持することができる。また、サービス管理システム60の主記憶デバイス304には、サービス作成機能61およびサービス削除機能62を実現するための一つ以上のプログラム、および、接続情報一覧63を保持することができる。
補助記憶デバイス305は、大容量の記憶容量を有する記憶デバイスであり、例えば、HDD(Hard Disk Drive)やSSD(Solid State Drive)である。補助記憶デバイス305は、各種プログラムの実行ファイルを保持する。補助記憶デバイス305および補助記憶デバイス305は、プロセッサ301からアクセス可能である。
<データ構造>
図4は、フロー情報13のデータ構造の一例を示す。
フロー情報13は、例えばJSON形式のデータである。ただし、フロー情報13は、XMLやYAMLなど他のデータ構造のデータであってもよい。
フロー情報13は、フロー221内のノードごとにノード設定400のブロックを持つ。一つのノードを例に取る(図4の説明において「注目ノード」)。
ノード設定400は、注目ノードをフロー上で一意に識別するための識別子を表すnodeId401、ノードの種別(例えば、オブジェクト指向でのクラスに相当)を表すnodeType402、GUI画面200での注目ノードの表示名を表すnodeName403、注目ノードのプロパティとして設定された値を表すproperties404、GUI画面200での注目ノードの表示位置としての座標を表す座標405、注目ノードと別ノード間の接続関係を表すwires406などを含む。
また、注目ノードがサービス利用ノードの場合、properties404は、当該サービス利用ノードに紐付けられた接続設定のresourceIdを表すresourceId407を持つ。サービス利用ノードは、接続管理機能34から、resourceId407を引数として、対応するサービス70の接続情報を取得することができる。
図5は、サービス連携システム50が持つ各種情報のデータ構造の一例を示す。
ポリシー情報55、サービス定義情報56および管理システム情報57の各々は、例えばテーブルである。
ポリシー情報55は、例えば、サービス70のポリシー毎に、レコードを有する。各レコードは、ResourceId500、ServiceId501、ProjectId502、Name503、Provision504、Delete505、Restart506およびCustomPolicy507といった情報を含む。ポリシー情報55の1レコードが、接続設定のポリシーに対応する。一つのフローに関し、例えば、一つのポリシーを複数のサービス利用ノードが参照する。以下、一つのポリシーおよびそのポリシーを使用するサービス利用ノードを例に取る(図5の説明において、「注目ポリシー」および「注目ノード」)。
ResourceId500は、注目ポリシーの識別子に相当し,注目ノードのResourceIdであるる。ServiceId501は、注目ノードについてのプロビジョニング済みサービス70の識別子を表す。なお、「プロビジョニング済みサービス70」とは、注目ノードのプロパティに未だ接続情報が設定されていないがやがて当該接続情報が設定されることになるサービス70と、注目ノードのプロパティに接続情報が設定済みのサービス70とのいずれかを意味する。ProjectId502は、注目ポリシーを設定したユーザ40の所属プロジェクトの識別子を表す。Name503は、ユーザ40が入力した接続名を表し、接続設定一覧235やプロパティ設定UI230-3の表示に使用される。Provision504は、プロビジョニング済みサービス70の自動作成条件である。Delete505は、プロビジョニング済みサービス70の自動削除条件である。Restart506は、プロビジョニング済みサービス70のリスタート条件である。CustomPolicy507は、注目ポリシーにおけるカスタムポリシーの設定値である。CustomPolicy507は、例えばJSON形式で表されるが、XMLやYAMLなど他のデータ構造であってもよい。
サービス定義情報56は、例えば、サービス70毎に、レコードを有する。各レコードは、ServiceId510、CustomPolicy511、Monitoring512、Overview513、Charges514およびCustomDescription515といった情報を含む。サービス定義情報56の各レコードにおける情報は、例えば、当該レコードに対応したサービス70の提供者により入力される。一つのサービス70を例に取る(図5の説明において、「注目サービス70」)。
ServiceId510は、注目サービス70の識別子を表す。CustomPolicy511は、注目サービス70のカスタムポリシーの定義を表す。CustomPolicy511の詳細は、図6にて説明する。Monitoring512は、注目サービス70の監視処理の定義を表す。Monitoring512の詳細は、図6にて説明する。Overview513は、注目サービス70についてノード説明UI234に表示される概要を表す。Charges514は、注目サービス70についてノード説明UI234に表示される課金形式を表す。CustomDescription515は、注目サービス70についてノード説明UI234に表示される個別説明(例えば、サービス70の提供者が個別に設定する説明項目)を表す。CustomDescription515は、例えば、Markdown形式で表されるが、HTML形式や平文など他のデータ構造であってもよい。
CustomPolicy511、Monitoring512、Overview513、Charges514、および、CustomDescription515の少なくとも一つの値は、空であってもよい。
管理システム情報57は、例えば、サービス管理システム60毎に、レコードを有する。各レコードは、SystemId520、Endpoint521、Credential522およびServices523といった情報を含む。以下、一つのサービス管理システム60を例に取る(図5の説明において「注目管理システム60」)。
SystemId520は、注目管理システム60の識別子を表す。Endpoint521は、注目管理システム60にアクセスするためのエンドポイント(例えば、URLやIPアドレス)を表す。Credential522は、注目管理システム60の認証情報(例えば、アカウント名とパスワードの組や、アクセストークン)である。Services523は、注目管理システムから作成または削除可能なサービス70のServiceIdのリストを表す。Services523は、例えばJSON形式で表されるが、XMLやYAMLなど他のデータ構造であってもよい。
図6は、サービス定義情報56のうちのCustomPolicy511およびMonitoring512のデータ構造の一例を示す。
上述したように、CustomPolicy511は、カスタムポリシーの定義を表し、Monitoring512は、監視処理の定義を表す。これらは、例えば、JSON形式で表されるが、XMLやYAMLなど他のデータ構造であってもよい。
CustomPolicy511は、カスタムポリシーの設定項目毎に、項目定義600を持つ。項目定義600は、例えば、設定項目の名前を表すname601、設定項目の説明を表すdescription602、および、設定項目のデータ構造を表すscheme603を含む。scheme603は、例えば、データ型を表すtype604、データとして入力可能な値であるenum605、および、初期値を表すdefault606を含む。
description602は、例えばMarkdown形式で表されるが、HTML形式や平文など他のデータ構造であってもよい。description602が設定されている場合は、その値がカスタムポリシーの説明としてノード説明UI234に表示される。type604の値は、例えば、文字列を意味する“string”、数値を意味する“number”、論理値を意味する“Boolean”がある。また、description602とenum605とdefault606は無くてもよい。また、カスタムポリシーが無い場合、CustomPolicy511は空であってもよい。
Monitoring512は、例えば、監視のための通信の通信プロトコルを表すprotocol611、監視対象のエンドポイント(例えば、URLやIPアドレス)を表すendpoint612、監視のための通信である監視通信に設定するHTTPヘッダを表すhttpHeaders613、サービス70の作成後にサービス70の起動時間を考慮し初回の監視通信を待つ時間を表すinitialDelaySeconds616、監視処理の実行間隔を表すperiodSeconds617、および、監視通信の応答のタイムアウト時間を表すtimeoutSeconds618を含む。また、httpHeader613は、HTTPヘッダの項目がリストとして設定されており、各項目はヘッダ名であるname614と値であるvalue615で構成される。
Monitoring512には、connection変数として接続情報一覧35の値を利用できる。使用する際はconnection.のあとに接続情報一覧35のフィールド名が指定されればよい。例えば、connection.Endpointとすると、接続情報一覧35にある監視対象のサービス70を表すレコードのEndpoint702の値を使用できる。変数は、例えば、JavaScriptのテンプレートリテラル内での変数使用時と同じ形式で文字列に埋め込む。各項目は無くてもよく、その場合は、サービス監視機能に定義されているデフォルトの設定値が用いられてよい。
サービス監視機能33は、endpoint612が表す監視対象にprotocol611が表すプロトコルで通信しその返り値を確認する処理を含む監視処理、periodSeconds617が表す時間間隔で行う。また、protocol611がhttpまたはhttpsを表す場合、HTTPヘッダとしてhttpHeaders613の値が用いられる。ただし、サービス70の作成後、初回の通信は、initialDelaySeconds616が表す時間だけ待ち、その後、監視通信がされる。通信の応答が、timeoutSeconds618が表す時間以上返らなかった場合(もしくは、HTTPやHTTPSの場合に通信の応答のステータスコードが所定番代以外のとき)、サービス監視機能33は、サービス70に異常があると判断する。
図7は、接続情報一覧35のデータ構造の一例を示す。
接続情報一覧35は、例えばテーブルである。接続情報一覧35は、例えば、サービス70の接続情報毎にレコードを有する。各レコードは、接続情報の識別子に相当するResourceIdであるResourceId700と、サービス70の識別子を表すServiceId701と、サービス70のエンドポイントを表すEndpoint702と、サービス70の認証情報であるCredential703と、サービス70のステータスを表すStatus704とを含む。各レコードにおいて、Endpoint702およびCredential703が、本実施形態において接続情報に相当する。
<各種処理>
図8は、イベント通知処理を示す。
本処理では、ビジュアルプログラミングシステム10でのフロー実行などのイベントを起点として、サービス70が作成または削除され、サービス70の接続情報がビジュアルプログラミングシステム10に動的に反映される。これにより、ユーザ40が事前にサービス70を作成または削除し、サービス70の接続情報の設定または削除を個別にノード211のプロパティに対して行なわなくてよくなり、ユーザ40の作業負荷が削減される。
まず、フロー編集機能11もしくはフロー実行機能12が、イベントの発生を検知した場合に当該イベントの通知であるイベント通知をイベント通知機能32に送信する(P901)。
次に、当該イベント通知を受けたイベント通知機能32が、当該通知が表すイベントのイベント通知を、サービス連携システム50に送信する(P902)。
当該イベント通知を受けたサービス連携システム50において、イベント検知機能51が、当該イベント通知とポリシー情報55とを比較する(P903)。イベント検知機能51が、イベント通知が持つResourceId(およびServiceId)と一致するResourceId500(およびServiceId501)に対応したProvision504またはDelete505が表す条件にイベント通知が表すイベント(例えばイベント発生原因)に適合するか否かを判断する。以下、図8の説明において、イベント通知が持つResourceIdに対応したサービス利用ノーを「注目利用ノード」と言い、イベント通知が持つServiceIdに対応したサービス70を「注目サービス70」と言う。
Provision504との一致が得られた場合(P904:Yes)、イベント検知機能51は、作成処理を実行する(P905)。
Delete505との一致が得られた場合(P906:Yes)、イベント検知機能51は、削除処理を実行する(P907)。
どちらとの一致も得られなかった場合(P906:No)、イベント検知機能51は、ビジュアルプログラミングシステム10に、処理が完了したという応答を返す(P910)。
なお、イベント通知が、「強制作成」イベントを表す場合、P904およびP906の判断無しに、P905が行われてよい。また、イベント通知が、「強制終了」イベントを表す場合、P904およびP906の判断無しに、P907が行われてよい。
作成処理(P905)では、サービス作成機能52が、注目利用ノードに接続される注目サービス70の作成を、注目サービスを作成可能なサービス管理システム60(注目サービスに対応したSystemId520が表すサービス管理システム60)に依頼し、その結果として取得された接続情報(注目サービス70の接続情報)を、イベント検知機能51に通知する。作成処理P905の詳細は、図9にて説明する。
削除処理(P907)では、サービス削除機能53が、注目サービス70の削除を、注目サービスを作成したサービス管理システム60(注目サービスに対応したSystemId520が表すサービス管理システム60)に依頼し、削除されたサービス70のResourceIdをイベント検知機能51に通知する。削除処理の詳細は、図10にて説明する。
その後、イベント検知機能51は、作成もしくは削除した注目サービス70の接続情報(例えば、接続情報一覧35のレコードのうちStatus704以外のデータ)を、ビジュアルプログラミングシステム10に送付する(P908)。ただし、サービス70の削除処理が実行された場合は、ResourceId以外のレコードの値は空でよい。
ビジュアルプログラミングシステム10では、接続管理機能34が、サービス連携システム50から受け取った接続情報を接続情報一覧35に反映(例えば追加)する(P909)。具体的には、例えば、受けた接続情報が、接続情報一覧35のレコードのうちStatus以外のレコード部分の場合、接続管理機能34が、そのレコード部分を接続情報一覧35に追加する。一方、例えば、接続情報が、ResourceId以外の値が空の情報の場合は、接続管理機能34が、受けた接続情報のResourceIdと一致するResourceId700を持つレコードを接続情報一覧35から削除する。
以上の処理により、ビジュアルプログラミングシステム10でのフロー実行などのイベントを起点として、サービス70が作成または削除され、その接続情報がビジュアルプログラミングシステム10の接続情報一覧35に動的に反映される。
図9は、サービス70の作成処理を示す。
本処理は、図8のP905の詳細である。
まず、イベント検知機能51が、イベントの発生をサービス作成機能52に通知する(P1001)。
次に、サービス作成機能52が、その通知に応答して、管理システム情報57にアクセスし、Services523内にイベント通知のServiceIdを含むレコードを取得する。その後、サービス作成機能52が、そのレコードのEndpoint521およびCredential522を取得し、Endpoint521が表すサービス管理システム60に、Credential522が表す認証情報を用いてアクセスし、イベント通知のResourceIdおよびServiceIdに対応したサービス70のインスタンスの作成を依頼する(P1002)。サービス70の識別子とは、例えばOpenServiceBrokerのinstance_idである。
その後、サービス管理システム60のサービス作成機能61が、依頼されたサービス70を作成する(P1003)。この作成により、サービス管理システム60に定義された方法でサービス70の接続情報(例えば、エンドポイントおよび認証情報を含んだ情報)が発行される。
その後、サービス作成機能61は、サービス70の接続情報を接続情報一覧63に保存する(P1004)。その後、サービス作成機能61は、作成処理終了の通知として、サービス70の接続情報(P1004で保存した接続情報)を、サービス連携システム50に送付する(P1005)。
サービス連携システム50のサービス作成機能52は、送付された接続情報と、イベント検知機能51から通知されたイベントのServiceIdとResourceIdとを(すなわち、Status704を除いた、接続情報一覧35のレコード部分)を、イベント検知機能32に送付する(P1006)。
以上の処理によりサービス70の作成が実現される。
図10は、サービス70の削除処理を示す。
本処理は、図8のP907の詳細である。
まず、イベント検知機能51が、イベントの発生をサービス削除機能53に通知する(P1101)。
次に、サービス削除機能53が、その通知に応答して、管理システム情報57にアクセスし、Services523内にイベント通知のServiceIdの値を含むレコードを取得する。その後、サービス削除機能53が、そのレコードのEndpoint521およびCredential522を取得し、Endpoint521が表すサービス管理システム60に、Credential522が表す認証情報を用いてアクセスし、イベント通知のResourceIdおよびServiceIdに対応したサービス70のインスタンスの削除を依頼する(P1102)。
その後、サービス管理システム60のサービス削除機能62が、依頼されたサービス70を削除する(P1103)。
その後、サービス削除機能62は、削除されたサービス70に対応したレコードを接続情報一覧63から削除する(P1104)。その後、サービス削除機能62は、削除処理終了の通知をサービス連携システム50に送付する(P1105)。
サービス連携システム50のサービス削除機能53は、削除されたサービス70のResourceIdをイベント検知機能51に送付する(P1106)。
以上の処理によりサービス70の削除が実現される。
図11は、ノード別の一時停止処理を示す。
各サービス70のステータスがサービス監視機能33により監視されStatus704に反映されるが、ノード別の一時停止処理とは、サービス70のStatus704に基づきノードの処理を待機または中断する処理である。本処理により、ビジュアルプログラミングシステム10は、サービス70の作成前や当該サービス70のエラー等により当該サービス70を利用できない状態でサービス利用ノードが実行されてしまうことを避けることができ、以って、フローの処理に悪影響を及ぼすことを避けることができる。
フロー221の実行において、サービス利用ノードの処理定義24がフロー実行機能12により実行されると、処理定義24(プログラム)は、サービス利用ノードのプロパティが持つResourceIdを引数として、接続管理機能34に接続情報の取得を依頼する(P1301)。
次に、接続管理機能34は、接続情報一覧35から、引数のResourceIdと一致するResourceId700を持つレコードから、Endpoint702、Credential703およびStatus704の値を取得する(P1302)。
その後、Status704が“Running”であれば(P1303:Yes)、接続管理機能34は、取得したEndpoint702とCredential703を処理定義24に送付する(P1304)。
また、Status704が“Error”であれば(P1305:Yes)、接続管理機能34は、処理定義24にエラーを通知する(P1307)。エラーを通知された処理定義24は、サービス70へのアクセスを中断する。中断の場合、フローが最初から実行されてもよい。
また、Status704が“Running”でも“Error”でもなければ(例えば、“Provisioning”)(P1305:No)、接続管理機能34は、予め定められた時間待機し(P1306)、その後再びP1302を実行する。すなわち、サービス70がエラーではないがサービス70にアクセス不可の場合には、サービス70へのアクセスが待機される。
以上の処理により、サービス70のStatus704が“Running”以外のときは、サービス70へのアクセスが待機または中断される。このため、サービス70が利用可能ではない状態でサービス70が呼び出されることがなくなり、フローへの悪影響を避けることができる。
図12は、フロー全体の一時停止処理を示す。
フロー全体の一時停止処理とは、稼働確認ノードがフロー内で後続の全てのサービス利用ノードにそれぞれ接続される全サービス70の各々のStatus704を基にフローを待機または中断する処理である。本処理により、ビジュアルプログラミングシステム10は、稼働確認ノード以降の全サービス70が利用可能な状態なことを確認してからフローを実行できるため、いずれかのサービス70が利用不可能な状態で呼び出され、フローの実行に悪影響を及ぼすことを避けることができる。
フロー221の実行において、稼働確認ノードの処理定義24がフロー実行機能12により実行されると、処理定義24は、稼働確認ノード以降にある全サービス利用ノード(稼働確認ノードを含むフローにおいて、当該稼働確認ノードの後に実行され得る全サービス利用ノード)がアクセスする全サービス70のステータスを接続管理機能34に確認する(P1401)。具体的には、例えば、次の通りである。すなわち、処理定義24が、稼働確認ノードのフロー情報13にアクセスする。処理定義24が、フロー情報13中のwires407を辿って、稼働確認ノードの出力側に接続しているノードの情報をフローの終端まで全て取得する。その後、処理定義24が、取得したノード群からサービス利用ノードを抽出し、抽出した全サービス利用ノードの各々のResourceIdを取得する。その後、処理定義24は、取得した全ResourceIdを引数として、接続管理機能34に接続情報の取得を依頼する。
次に、接続管理機能34は、接続情報一覧35から、引数として与えられた各ResourceIdについて、当該ResourceIdと一致するResourceId700を持つレコードから、Endpoint702、Credential703およびStatus704の値を取得する(P1402)。
その後、取得した全てのStatus704が“Running”であれば(P1403:Yes)、接続管理機能34は、取得した全ての接続情報(Endpoint702とCredential703)を処理定義24に送付し(P1404)、処理定義24が、処理を後続のノード211に渡す(P1408)。
取得したStatus704の一つでも“Error”であれば(P1405:Yes)、接続管理機能34は、“Error”に対応するResourceIdのリストを処理定義24に通知する(P1407)。その後、処理定義24は、ResourceIdのリストをフロー編集機能11に通知する(P1409)。また、当該リストが通知されたフロー編集機能11は、フローの実行を中断してよい。例えば、フロー編集機能11は、GUI画面200(または別のGUI画面)に、通知されたリストにおけるResourceIdに対応したサービス利用ノードのリストを表示してよい。
取得したStatus704に“Error”が無く“Running”および“Error”以外の値(例えば“Provisioning”)が存在するとき(P1405:No)、接続管理機能34は、予め定められた時間待機し(P1406)、その後再びP1402を実行する。すなわち、全てのサービス70のいずれもエラーではないがいずれかのサービス70にアクセス不可の場合には、サービス70へのアクセスが待機される。
以上の処理により、稼働確認ノード以降の全サービス70のStatusが“Running”以外のときは、フロー0の実行が待機または中断される。このため、サービス70が利用可能ではない状態でサービス70が呼び出されることがなくなり、フローへの悪影響を避けることができる。
図13は、サービス再起動処理を示す。
サービス再起動処理は、サービス監視機能33がサービス70のエラーを検知したときに、ユーザ40が設定したポリシー情報55を基にサービス70をリスタートする処理である。本処理により、ユーザ40はサービス70にエラーが起きた時、手動でのサービス70のリスタートが不要になる。また、このときのリスタートのタイミングをユーザ40が指定することもできる。
サービス監視機能33が、監視処理にて、正常な値がサービス70から返らない等の理由によりサービス70の状態がエラーであると検知すると(P1501)、サービス70のResourceIdを引数に、接続管理機能34に、サービス70の接続情報の再取得を依頼する(P1502)。接続管理機能34は、その依頼に応答して、引数とされたResourceIdに一致するResourceId700に対応した接続情報を接続情報一覧35から取得し、取得した接続情報をサービス監視機能33に渡す。サービス監視機能33は、その渡された接続情報を用いて、サービス70にアクセスしてみる。
しかし、それでもサービス70への監視処理が失敗する(もしくは接続管理機能34にて接続情報の再取得に失敗した通知を受ける)等の理由によりサービス70のエラーを検知すると(P1503)、サービス監視機能33は、ポリシー情報55から、サービス70のResourceIdと一致するResourceId500に対応したRestart506の値を確認する。
Restart506の値が“OFF”の場合(P1504:Yes)、サービス監視機能33は、再起動処理を終了する。
Restart506の値が“OFF”以外の場合(P1504:No)、サービス監視機能33は、イベント通知機能32に、強制終了イベントの通知を送付する。強制終了イベントの通知をイベント通知機能32が受けた場合、図8のP907以降の処理が行われる。すなわち、サービス70が削除され、サービス70の接続情報がを接続情報一覧35から削除される(P1505)。
その後、Restart506の値が“常時”の場合(P1506:Yes)、サービス監視機能33は、イベント通知機能32に、強制作成イベントの通知を送付する。強制作成イベントの通知をイベント通知機能32が受けた場合、図8のP905以降の処理が行われる。すなわち、サービス70が作成され、サービス70の接続情報が接続情報一覧35に登録される(P1507)。
P1505の後、Restart506の値が“常時”ではない場合(例えば、“自動作成条件に合わせる”の場合)(P1506:No)、再起動処理は終了する。P1505で削除されたが本再起動処理において作成されなかったサービス70は、後に、ポリシー情報55内のProvision504の条件を満たすイベントがビジュアルプログラミングシステム10で発生した際に作成されることになる。
以上の処理により、サービス70が異常なとき、ビジュアルプログラミングシステム10は接続情報の更新およびポリシー情報55に基づくサービスのリスタートが可能となる。
[第2実施形態]
以下、第2実施形態を説明する。その際、第1実施形態との相違点を主に説明し、第1実施形態との共通点については説明を簡略または省略する。
図14は、第2実施形態におけるシステム構成の一例を示すブロック図である。
図14に示されるシステムでは、図1のビジュアルプログラミングシステム10の代わりにビジュアルプログラミングシステム1600が設けられている。ビジュアルプログラミングシステム1600にはフロー編集機能11の代わりにWeb通信機能1610が設けられている。
計算機1620には、Webブラウザ1621が設けられている。Webブラウザ1621には、フロー編集機能1622が設けられている。フロー編集機能1622は、Webブラウザ1621にて動作することができる。計算機1620は、出力デバイス1630および入力デバイス1640を有する。さらに、計算機1620は、ネットワーク80を介してWeb通信機能1610に接続されている。
Webブラウザ1621は、計算機1620の上で動作するアプリケーションである。Webブラウザ1621は、ビジュアルプログラミングシステム1600にHTTPまたはHTTPSリクエストを発行し、その応答として取得したデータを計算機1620の出力デバイス1630に表示する。この時、Webブラウザ1621は、フロー編集機能1622を出力デバイス1630に表示することができる。
Web通信機能1610は、Webブラウザ1621のHTTPリクエストを基にフロー編集機能1622の処理を定義したデータをWebブラウザ1621に送付する。そして、Webブラウザ1621上で動作するフロー編集機能1622からのHTTPリクエストを基に、Webブラウザ1621上のフロー編集が実現できるよう、Web通信機能1610は、各種処理の制御命令およびデータを中継する。
フロー編集機能1622は、フロー編集機能11をWebブラウザ1621で動作可能にしたものである。フロー編集機能1622が図14のシステム内の各種データや機能を使用する時は、Web通信機能1610を介して使用する。
以上により、図14のシステムはWebアプリケーションとして、遠隔の計算機1620を用いてフロー221を作成することができる。
上述した説明を、例えば下記のように総括することができる。
サービス連携システム50と通知機能30が、サービス連携システムの一例である。サービス連携システム50は、第1の機能の一例である。通知機能30が、第2の機能の一例である。サービス連携システム50が、ビジュアルプログラミングシステム10または1600が提供するGUI画面200(フロー編集画面の一例)におけるフロー221が、サービス利用ノード222を含んでいて、且つ、当該サービス利用ノード222にサービス70(外部サービスの一例)を接続するユーザ要求を検出した場合、サービス70の作成機能61を有するサービス管理システム60に、サービス70の作成要求を送信する。サービス連携システム50が、当該作成要求に応答してサービス管理システム60により作成されたサービス70に接続するための接続情報(当該サービス管理システム60により作成された接続情報)を、サービス管理システム60から取得する。連携機能30が、サービス連携システム50により取得された接続情報をサービス利用ノード222のプロパティに設定する。以上のように、フロー221の編集において、動的にサービス70が作成されると共に、当該作成されたサービス70の接続情報が、サービス利用ノード222のプロパティに自動で設定される。このため、ユーザは事前にサービス70を作成したりそのサービス70の接続情報を手動で設定したりする必要がなくなる。これにより、サービス利用ノード222を含んだフロー221を用いた試行錯誤を高速に行うことができる。
連携機能30が、サービス70の自動作成条件(「Provision」)と自動削除条件(「Delete」)のうちの少なくとも一つを含んだポリシーの指定をユーザ40から受け付けてよい。サービス連携システム50が、ユーザ40により指定されたポリシーを表すポリシー情報に従ってよい。これにより、サービス70の作成または削除をユーザ40の所望のポリシーに従って行うことができる。
サービス連携システム50が、サービス70に関しユーザ要求を検出した場合、ポリシー情報に指定されている自動作成条件が満たされたときに、サービス70の作成要求をサービス管理システム60に送信してよい。これにより、サービス70が作成されるタイミングを、ユーザ40の所望のタイミングとすることができる。
サービス連携システム50が、ポリシー情報に指定されている自動削除条件が満たされたときに、サービス70の削除要求をサービス管理システム60に送信してよい。これにより、サービス70が作成されるタイミングを、ユーザ40の所望のタイミングとすることができる。
連携機能30は、取得された接続情報を接続情報一覧35に書き込むようになっている。連携機能30は、サービス利用ノード222のStatus704が“Running”でない場合(サービス利用ノード222がプロパティに設定された接続情報を用いてサービス70を呼び出すことができなくなったことを検出したことの一例)、サービス70の接続情報を接続情報一覧35から取得し当該取得された接続情報を用いてサービス70に対するアクセスを行い、それでもアクセスに失敗した場合、削除条件が満たされたときに削除要求をサービス管理システム60に送信し、その後に、作成条件が満たされたときにサービス70の作成要求をサービス管理システム60に送信してよい。この段落で言う「削除条件」は、アクセス失敗に応答して直ちに削除する強制削除でもよいし、ユーザ40の任意の条件でもよい。同様に、この段落で言う「作成条件」は、強制削除の後直ちに作成する強制作成でもよいし、ユーザ40の任意の条件でもよい。これにより、サービス70のエラーまたはその他の理由によりサービス70へのアクセスが不可の場合、手動でのサービス70のリスタートが不要になる。
連携機能30は、サービス利用ノード222のStatus704が“Running”でない場合、サービス70の接続情報を接続情報一覧35から取得し、当該取得された接続情報を用いてサービス70に対するアクセスしてよい。これにより、サービス70のエラーまたはその他の理由によりサービス70へのアクセスが不可になった場合、サービス利用ノード222に代えて連携機能30がサービス70へのアクセスが可能か否かのチェックを行うことができる。
連携機能30は、サービス70にアクセスが可能か監視してよい。連携機能30は、サービス70にアクセス不可の場合、当該サービス70に接続されるサービス利用ノード222の処理を待機または中断してよい。これにより、サービス70が作成前や当該サービス70のエラー等により当該サービス70にアクセス不可の状態でサービス利用ノード222が実行されてしまうことを避けることができる。
連携機能30は、フロー221が有する全てのサービス利用ノード222の各々について、当該サービス利用ノード222に接続されるサービス70にアクセスが可能か監視してよい。フロー221における稼働確認ノード(実行中ノードの一例)の後に実行される一つ以上のサービス利用ノード222からに呼び出される少なくとも一つのサービス70にアクセス不可の場合、フロー221の実行が待機または中断されてよい。これにより、稼働確認ノード以降の全サービス70が利用可能な状態なことを確認してからフローを実行できる。
サービス連携システム50は、ビジュアルプログラミングシステム10または1600の外部に設けられていてよい。連携機能30は、ビジュアルプログラミングシステム10または1600の内部に設けられていてよい。連携機能30が、サービス利用ノード222に対するサービス70の接続がユーザ40により要求された場合にユーザ要求の発生を表すイベントの通知をサービス連携システム50に送信してよい。当該通知をサービス連携システム50により受信することが、ユーザ要求をサービス連携システム50により検出することであってよい。これにより、複数のビジュアルプログラミングシステム10または1600に対しサービス連携システム50を一つとすることできる。
フロー221を表すフロー情報13が、サービス利用ノード222のResourceId(所定種類のIDの一例)を表す情報を含んでよい。サービス管理システム60への作成要求には、当該サービス利用ノード222のResourceIdが関連付けられてよい。当該サービス管理システム60により作成され接続情報一覧63に格納される接続情報には、ResourceId(例えば、ResourceIdとServiceIdとの組のようなキー)が関連付けられてよい。サービス連携システム50により取得され接続情報一覧35において管理される接続情報には、ResourceId(例えば、上記キーと同一のキー)が関連付けられてよい。これにより、サービス利用ノードのResourceIdを用いて接続情報を接続情報一覧35から取得できる。
以上、本発明の幾つかの実施形態を説明したが、本発明は上述した実施形態に限定されるものではなく、添付した特許請求の範囲の趣旨内における様々な変形例および同等の構成が含まれる。例えば、上述した実施形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに本発明は限定されない。